İçindekiler:

Raspberry Pi Linux Motion Google Fotoğraflar Entegrasyonu: 5 Adım
Raspberry Pi Linux Motion Google Fotoğraflar Entegrasyonu: 5 Adım

Video: Raspberry Pi Linux Motion Google Fotoğraflar Entegrasyonu: 5 Adım

Video: Raspberry Pi Linux Motion Google Fotoğraflar Entegrasyonu: 5 Adım
Video: Raspberry Pi Pardus Armv3 WEBCAM ILE WIFI IP CAMERA 2024, Kasım
Anonim
Raspberry Pi Linux Motion Google Fotoğraflar Entegrasyonu
Raspberry Pi Linux Motion Google Fotoğraflar Entegrasyonu

Buradaki fikir, dosyaları bir buluta yüklemek için Raspberry Pi'ye bağlı hareketle etkinleştirilen kamera ile yapılan fotoğrafları ve videoları yüklemek. "Hareket" yazılımı, PyDrive aracılığıyla Google Drive'a yüklemeyi destekler. Bu makalede, Google Fotoğraflar'a yüklemek için 'Hareket' kullanılmıştır.

Donanım:

Ahududu Pi 3B+

USB Web Kamerası Logitech C920

Donanım seçimi belirlenmedi, sadece elimde olanı aldım.

Önkoşullar:

Kolaylık sağlamak için Raspberry pi yerel ağınızda olmalıdır – monitör/klavye olmadan kontrol etmek ve dosya yüklemek/indirmek için. Bunun için PC'nizde ssh aracısı olmalıdır (örn. macun).

Harika bir eğitim için ssandbac'a çok teşekkürler. Ortamın nasıl kurulacağı hakkında daha fazla bilgiye ihtiyacınız varsa bu makaleye göz atın. Hareket kurulumunu ve adımlarını ondan ödünç aldım ve bazı değişiklikler ekledim. Özellikle, bu örnek, dosya ve uyarıları e-postayla göndermek yerine, google photos paylaşılan albümüne yüklemeyi ve bildirim çubuğunda “eklenen fotoğraflar” türünden bildirimler almayı kullanır.

İşte adımlar:

Adım 1: Linux Motion'ı Raspberry'ye yükleyin

Bu örnekte özellikle hareket v4.0 kullanılmıştır.

1.1 pi'yi güncelle

pi@raspberrypi:~ $ sudo apt-get güncellemesi

pi@raspberrypi:~ $ sudo apt-get yükseltmesi

1.2 İndirme hareketi

pi@raspberrypi:~ $ sudo apt-get yükleme hareketi

1.3 Şimdi bu dosyayı aşağıdaki değişikliklerle düzenleyin

pi@raspberrypi:~ $ sudo nano /etc/motion/motion.conf

# Daemon (arka plan) modunda başlayın ve terminali bırakın (varsayılan: kapalı)

arka plan programı

# Tanımlanmamış stderr ve syslog kullanılıyorsa, günlük mesajlarını kaydetmek için bir dosya kullanın. (varsayılan: tanımlanmadı)

günlük dosyası /var/log/motion/motion.log

# Görüntü genişliği (piksel). Geçerli aralık: Kameraya bağlı, varsayılan: 352

genişlik 1920

# Görüntü yüksekliği (piksel). Geçerli aralık: Kameraya bağlı, varsayılan: 288

yükseklik 1080

# Saniyede yakalanacak maksimum kare sayısı.

çerçeve hızı 30

# Hareketten önce yakalanmış (arabelleğe alınmış) resimlerin sayısını belirtir

ön_yakalama 5

# Hareket algılanmadığında çekilecek kare sayısı

post_capture 5

# Hareket algılandığında 'normal' resimlerin çıktısını alın (varsayılan: açık)

output_pictures kapalı

# jpeg sıkıştırması tarafından kullanılacak kalite (yüzde olarak)

kalite 100

# Filmleri gerçek zamanlı olarak kodlamak için ffmpeg kullanın

ffmpeg_output_movies kapalı

# veya 1 - 100 aralığı, burada 1 en kötü kalite ve 100 en iyi kalite anlamına gelir.

ffmpeg_variable_bitrate 100

# Video oluştururken kareler sırayla çoğaltılmalı mı

ffmpeg_duplicate_frames yanlış

# Expipe'ı etkinleştirmek veya devre dışı bırakmak için Bool (varsayılan: kapalı)

use_extpipe açık

extpipe ffmpeg -y -f rawvideo -pix_fmt yuv420p -video_size %wx%h -framerate %fps -i pipe:0 -vcodec libx264 -preset ultrafast -f mp4 %f.mp4

target_dir /var/lib/hareket

# Bir film dosyası olduğunda yürütülecek komut

; on_movie_end sudo python3 /var/lib/motion/photos.py %f.mp4 &

Video kaydı ve yüklemenin çalıştığından emin olduktan sonra sonuncuyu noktalı virgülle (yorum yapıldı) şimdilik bırakın.

1.4 Sonra değiştir

pi@raspberrypi:~ $ sudo nano /etc/default/motion

pi@raspberrypi:~ $ start_motion_daemon=evet

2. Adım: Python için Google Fotoğraflar API'sini kurun

Python için Google Foto API'sini kurun
Python için Google Foto API'sini kurun
Python için Google Foto API'sini kurun
Python için Google Foto API'sini kurun

2.1 Yeni dosyalar eklendiğinde bildirim almak ve daha fazla depolama alanı almak için bir albümü ana hesabınızla paylaşmak için bu amaçla yeni bir hesap oluşturmanız önerilir. Yükleme için kullanacağınız hesap için Google Fotoğraflar API'sini etkinleştirin.

Bundan sonra kimlik bilgileri.json dosyanız olmalıdır.

2.2 Python ortamı kurulumu

Temel olarak ortam kurulumu yalnızca ahudududa gereklidir. Ancak, PC'de gerçekleştirmek için daha uygun olan oauth yetkilendirmesi gerektirir. Bunu ahududu üzerinde yapmak için, monitör/klavyeyi ona bağlamanız veya bazı uzak masaüstü kullanıcı arayüzü kurmanız gerekir. Aynı ortamı hem ahududu hem de PC'ye kurdum. Böylece 2.2.1..2.2.3 adımları PC'de, 2.2.1, 2.2.2, 2.2.5, 2.2.6 Rpi'de yapıldı.

2.2.1 Python 3'ü kurun

2.2.2 Google API paketlerini kılavuza göre kurun*(bkz. 5.1)

PC'de

pip3 kurulumu --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib

ahududu üzerinde

pi@raspberrypi:~ $ sudo pip3 kurulumu --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib

2.2.3 google fotoğraflara script yüklemeye bakın.. github'uma yerleştirildi. Bunu kimlik bilgileri.json ile aynı dizine koyun.

2.2.4 Biraz resim çekin ve yüklemeyi test edin

python3 fotoğrafları.py resim.jpg

Varsa eksik bağımlılıkları kurun ve tekrar deneyin. Sonuç olarak, betiğin dizininde token.pickle'ı ve ayrıca Google Fotoğraflar web arayüzünde image-j.webp

2.2.5 Albümü, eklenen yeni medya bildirimlerini almak istediğiniz şeyle ilgili hesapla paylaşın. Bu hesabı telefonunuza ekleyin.

2.2.6 ahududu üzerinde photos.py ve token.pickle'ı /var/lib/motion içine koyun. 'pi' kullanıcısı 'hareket dizinine yazamaz, bu nedenle önce /home/pi'ye yükleyin

scp photos.py token.pickle pi@IP:/home/pi

Ardından ahududuya giriş yapın ve dosyaları sudo altına taşıyın

ssh pi@IP

pi@raspberrypi:~ $ sudo mv photos.py token.pickle /var/lib/motion

2.2.7 Raspberry'de yüklemenin nasıl çalıştığını kontrol edin. fswebcam ile bir resim çekin ve yüklemeyi deneyin

pi@raspberrypi:~ $ sudo fswebcam /var/lib/motion/image.jpg

pi@raspberrypi:~ $ sudo python3 /var/lib/motion/photos.py /var/lib/motion/image.jpg

“Helloworld” albümünde image-j.webp

3. Adım: Test edin

3.1 Hareket hizmetini başlatma

pi@raspberrypi:~ $ sudo servis hareketi başlangıcı

Komutu "dur" veya "yeniden başlat" olarak değiştirebilirsiniz.

3.2 Hareket günlüklerini etkinleştir

pi@raspberrypi:~ $ tail -f /var/log/motion/motion.log

3.2 Aynı yerel ağa bağlı başka bir cihazda kamera çıkışını görüntüleyin. Tarayıcıya girin:

IP:8081

3.3 Günlüklere bakıldığında, hareket algılanana ve NAME.mp4 dosyası /var/lib/motion'a yazılana kadar bekleyin. Ardından komut dosyasını manuel olarak yüklemeyi başlatın

pi@raspberrypi:~ $ sudo python3 /var/lib/motion/photos.py /var/lib/motion/NAME.mp4

Python izlerini kontrol edin. motion.log'da event_end görünene kadar bekleyin. Ardından google fotoğraflarınızdaki “helloworld” albümüne gidin ve yüklenen bir video olup olmadığını kontrol edin.

3.4 Yükleme başarılıysa, /etc/motion.conf satırındaki açıklamayı kaldırın:

pi@raspberrypi:~ $ sudo nano /etc/motion.conf

# Bir film dosyası hazır olduğunda yürütülecek komut

on_movie_end sudo python3 /var/lib/motion/photos.py %f.mp4 &

pi@raspberrypi:~ $ senkronizasyon

pi@raspberrypi:~ $ sudo hizmet hareketi yeniden başlatma

3.5 Hareket kayıtlarına ve albüme bakarak videonun otomatik olarak yüklenip yüklenmediğini kontrol edin.

3.6 Yeni video veya fotoğraf eklendiğinde bildirim almak için isteğe bağlı olarak albümü ana hesabınızla paylaşın.

4. Adım: İsteğe bağlı: Gerçek Zamanlı Akış Kamerasına Web Erişimini Yapılandırın

İsteğe bağlı: Gerçek Zamanlı Akış Kamerasına Web Erişimini Yapılandırın
İsteğe bağlı: Gerçek Zamanlı Akış Kamerasına Web Erişimini Yapılandırın
İsteğe bağlı: Gerçek Zamanlı Akış Kamerasına Web Erişimini Yapılandırın
İsteğe bağlı: Gerçek Zamanlı Akış Kamerasına Web Erişimini Yapılandırın
İsteğe bağlı: Gerçek Zamanlı Akış Kamerasına Web Erişimini Yapılandırın
İsteğe bağlı: Gerçek Zamanlı Akış Kamerasına Web Erişimini Yapılandırın

Bu adım, Michel'in Parreno eğitimine dayanmaktadır. Burada önerildiği gibi NoIP yerine FreeDNS'i seçtim.

4.1 Video akışı hareket sunucusuna yetkili erişimi yapılandırın:

pi@raspberrypi:~ $ sudo nano /etc/motion/motion.conf

# Kimlik doğrulama yöntemini ayarlayın (varsayılan: 0)

# 0 = devre dışı

# 1 = Temel kimlik doğrulama

# 2 = MD5 özeti (daha güvenli kimlik doğrulama)

stream_auth_method 2

# Akış için kimlik doğrulama. Sözdizimi kullanıcı adı:şifre

# Varsayılan: tanımlanmadı (Devre Dışı)

webcontrol_authentication kullanıcı adı:şifre

# Akış akışları için maksimum kare hızı (varsayılan: 1)

stream_maxrate 30

# Akış bağlantılarını yalnızca localhost ile kısıtla (varsayılan: açık)

stream_localhost kapalı

Harici ağdan web kontrol arayüzünü kullanmayacaksanız, devre dışı bırakın (varsayılan olarak)

# Kontrol bağlantılarını yalnızca localhost ile kısıtla (varsayılan: açık)

webcontrol_localhost açık

Ayrıca ahududu çevrimiçi olduğu için varsayılan ahududu şifresini değiştirmenizi tavsiye ederim

pi@raspberrypi:~ $ şifre

Her ne kadar ssh bağlantı noktası 22 ahududuya yönlendirilmemiş olsa da, yine de.

4.2 FreeDNS sitesine gidin

4.3 Kaydol

4.4 Alt alan adı ekle (Üyeler İçin -> Alt Alan Adları)

4.5 Raspberry'ye kurmak için DNS istemcisini seçin (Üyeler İçin -> Dinamik DNS -> Synamic DNS Kaynakları -> Dinamik DNS İstemcileri)

Adam Dean'den wget_script update.sh'yi seçtim (sayfanın altında)

_YOURAPIKEYHERE_ ve _YOURDOMAINHERE_ yer tutucuları var. Onları almak için (Üyeler İçin -> Dinamik DNS) bölümüne gidin.

Aşağıdaki sayfada, APIKEY ve DOMAIN (4.4'te eklenen) ile komut dosyası örnekleri bulacaksınız. Bu değerleri Wget Komut Dosyasından aldım ve update.sh içinde _YOURAPIKEYHERE_ ve _YOURDOMAINHERE_ ile değiştirdim

4.6 Ardından ahududu üzerinde update.sh çalıştırın. nslookup için dnsutils gerektirebilir. Daha sonra kurun:

pi@raspberrypi:~ $ sudo apt-get dnsutils

4.7 Ardından yönlendiricinizi, dış dünya isteklerini ahududu ipine 8081 bağlantı noktasına yeniden yönlendirecek şekilde yapılandırın

4.8 Ahududunuzun MAC'i için ipi DHCP ayarında ayırın, böylece Rpi her zaman aynı ip'ye sahip olur

4.9 Ardından yerel ağa bağlı olmayan bir cihazdaki tarayıcıya girin:

etki alanınız:8081

Motion.conf'ta tanımladığınız kimlik bilgilerinizi girin.

Videonun nasıl çalıştığını test edin.

4.10 DDNS'yi güncellemek için cron görevini otomatik olarak ayarlayın. Quick_cron_example'a bakın (Üyeler için -> Dinamik DNS)

Adım 5: İpuçları

5.1 Raspberry'ye python paketleri kurarken dikkatli olun. Bunu hata ayıklamak için bir gün harcadım - sorun şuydu ki konsoldan komut dosyası iyi çalıştı, ancak hareket olayı geri çağrısından çağrılmadı. Durumu daha da kötüleştiren şey, ikinci durumda senaryodaki izlerin mevcut olmamasıydı.

Bunun nedeni, kılavuzu izleyerek 'pi' kullanıcısı için paketleri kurmamdı (bu, varsayılan olarak /home/pi dizinindedir ve diğer kullanıcılar için sınırlıdır), ancak komut dosyasını 'hareket' hizmetinin bir çocuğu olarak çalıştırmak için paketler olmalıdır. 'hareket' kullanıcısı için de mevcuttur. Sonunda paketleri kurmayı düzelttim

sudo pip3…

Bu hala işe yarayan uygun bir yol değil. Sudo as pip3 --system olmadan kurulum nedense bana hata veriyordu.

Buna uygun olarak komut dosyası sudo altında da çağrılır (bkz. motion.conf).

Bu sorun giderme sırasında birçok gereksiz değişiklik yaptım ve neyin gerekli olduğundan emin değilim ve şimdi bunları aşamalı olarak geri almak ve ne zaman çalışmayı bıraktığını görmek için çok tembelim. Özellikle, verilen hareket yöneticisi hakları:

pi@raspberrypi:~ $ grup hareketi

hareket: hareket adm sudo ses video kullanıcıları netdev pi

pi@raspberrypi:~ $ sudo cat /etc/sudoers.d/010_pi-nopasswd

pi TÜMÜ=(TÜMÜ) NOPASSWD: TÜMÜ

hareket TÜMÜ=(TÜMÜ) NOPASSWD: TÜMÜ

Ayrıca Google Drive'a yüklemeye benzer şekilde dosya sahiplerini ve izinleri değiştiriyordu. Muhtemelen benzer bir sorununuz olduğunda size yardımcı olabilir.

5.2 Google Fotoğraflar API'si, yalnızca bağlantıya sahip olan herkesin erişebilmesi için paylaşılan albümlere dosya eklemeye izin verir. Link vererek paylaşıp eski filmleri silmeyin, çöp kutusuna veya albümden taşımayın. İkinci durumda, hesapta kalırlar.

5.3 Google fotoğraf asistanı, kamera kalitesi iyiyse oldukça kullanışlı olan yüzleri algılar. Bir bonus olarak, süslü medya türlerini derlemeler ve gifler vb. yapar.

5.4 İnternet erişimi için 4G LTE USB modemi kullanmayı denedim ve işte sonuçlarım.5.4.1 Huawei E3372h-153, ahududu ile sorunsuz ve ekstra yazılımla çalışıyor 5.4.2 Ayrıca etkin nokta etkinleştirildi, böylece Rasperry wifi üzerinden internet bağlantısını paylaştı. https://howtoraspberrypi.com/create-a-wi-fi-hotspot-in-less-than-10-minutes-with-pi-raspberry/ RaspAP kullanarak nasıl yapılacağına dair gerçekten kolay bir kılavuz var. 5.4.3 Dinamik DNS, carrie'min 4G ağında çalışmadı. neden açıklaması var

5.5 Bu sistemi birkaç hafta kullandıktan sonra, videoları görüntülemek ve yüklemek için daha uygun olmasına rağmen, Google Fotoğraflar resimlerle daha iyi çalışıyor. Örneğin, yalnızca görüntüleri analiz eden nesneleri/yüzleri gruplandırmayı ve ancak o zaman videolardaki görüntülerden yüzleri/nesneleri aramayı sağlar, ancak tam tersini yapmaz. Bu yüzden videolar yerine resimleri yükleyerek test edeceğim.

Önerilen: