Raspberry Pi Linux Motion Integrasi Foto Google: 5 Langkah
Raspberry Pi Linux Motion Integrasi Foto Google: 5 Langkah
Anonim
Raspberry Pi Linux Motion Integrasi Foto Google
Raspberry Pi Linux Motion Integrasi Foto Google

Ideanya adalah untuk memuat naik foto dan video yang dibuat dengan kamera diaktifkan gerakan yang disambungkan ke Raspberry Pi untuk memuat naik fail ke awan. Perisian ‘Motion’ menyokong muat naik ke Google Drive melalui PyDrive. Dalam artikel ini ‘Motion’ digunakan untuk memuat naik ke Foto Google.

Perkakasan:

Raspberry Pi 3B +

USB Webcam Logitech C920

Pemilihan perkakasan tidak ditentukan, saya hanya mengambil apa yang ada.

Prasyarat:

Untuk kemudahan Raspberry pi harus berada di rangkaian tempatan anda - untuk mengawalnya tanpa monitor / papan kekunci dan memuat naik / memuat turun fail. Untuk ini, anda mesti mempunyai ejen ssh di PC anda (misalnya putty).

Terima kasih banyak kepada ssandbac untuk tutorial yang hebat. Sekiranya anda memerlukan lebih banyak maklumat mengenai cara mengatur persekitaran, baca artikel ini. Saya meminjam pemasangan gerakan dan mengkonfigurasi langkah daripadanya dan menambahkan beberapa perubahan. Khususnya, alih-alih menghantar e-mel ke fail dan amaran, contoh ini menggunakan muat naik ke album foto bersama Google dan dapatkan pemberitahuan semacam "foto tambahan" di bar pemberitahuan.

Berikut adalah langkah-langkahnya:

Langkah 1: Pasang Linux Motion pada Raspberry

Terutama dalam contoh ini digunakan gerakan v4.0.

1.1 Mengemas kini pi

pi @ raspberrypi: ~ $ sudo apt-get kemas kini

pi @ raspberrypi: ~ $ sudo apt-dapatkan peningkatan

1.2 Muat turun gerakan

pi @ raspberrypi: ~ $ sudo apt-get install install

1.3 Sekarang edit fail ini dengan perubahan berikut

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

# Mulakan dalam mod daemon (latar belakang) dan lepaskan terminal (lalai: mati)

daemon dihidupkan

# Gunakan file untuk menyimpan mesej log, jika tidak ditentukan stderr dan syslog digunakan. (lalai: tidak ditentukan)

logfile /var/log/motion/motion.log

# Lebar gambar (piksel). Julat sah: Bergantung pada kamera, lalai: 352

lebar 1920

# Tinggi gambar (piksel). Julat sah: Bergantung pada kamera, lalai: 288

tinggi 1080

# Bilangan maksimum bingkai yang akan ditangkap sesaat.

framerate 30

# Menentukan bilangan gambar yang telah ditangkap (buffered) sebelum gerakan

pra_capture 5

# Bilangan bingkai yang akan diambil setelah gerakan tidak lagi dikesan

post_capture 5

# Keluarkan gambar 'normal' ketika gerakan dikesan (lalai: aktif)

output_pataran mati

# Kualiti (dalam peratus) yang akan digunakan oleh pemampatan jpeg

berkualiti 100

# Gunakan ffmpeg untuk menyandikan filem dalam masa nyata

ffmpeg_output_movies mati

# atau julat 1 - 100 di mana 1 bermaksud kualiti terburuk dan 100 terbaik.

ffmpeg_variable_bitrate 100

# Semasa membuat video, haruskah bingkai digandakan secara berurutan

ffmpeg_duplicate_frames false

# Bool untuk mengaktifkan atau mematikan extpipe (lalai: mati)

use_extpipe dihidupkan

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 / gerakan

# Perintah yang akan dilaksanakan ketika fail filem

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

Biarkan yang terakhir dengan titik koma untuk sekarang (dikomentari) menjadi tidak puas hati setelah memastikan rakaman video dan muat naik berfungsi.

1.4 Kemudian ubah

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

pi @ raspberrypi: ~ $ start_motion_daemon = ya

Langkah 2: Sediakan API Foto Google untuk Python

Sediakan API Foto Google untuk Python
Sediakan API Foto Google untuk Python
Sediakan API Foto Google untuk Python
Sediakan API Foto Google untuk Python

2.1 Disarankan untuk membuat akaun baru untuk tujuan ini untuk berkongsi album dengan yang utama untuk mendapatkan pemberitahuan apabila fail baru ditambahkan, ditambah lebih banyak ruang penyimpanan. Aktifkan API Foto Google untuk akaun yang akan anda gunakan untuk memuat naik.

Anda harus mempunyai fail credentials.json selepas ini.

2.2 Persediaan persekitaran Python

Pada dasarnya penyediaan persekitaran hanya diperlukan pada raspberry. Tetapi ia memerlukan kebenaran oauth yang lebih senang dilakukan di PC. Untuk melakukan ini pada raspberry, anda perlu menyambungkan monitor / papan kekunci padanya atau menyediakan beberapa UI desktop jauh. Saya baru sahaja memasang persekitaran yang sama pada raspberry dan PC keduanya. Jadi langkah 2.2.1..2.2.3 dibuat pada PC, 2.2.1, 2.2.2, 2.2.5, 2.2.6 pada Rpi

2.2.1 memasang Python 3

2.2.2 Pasang pakej google api mengikut manual * (lihat 5.1)

Pada PC

pasang pip3 - tingkatkan google-api-python-klien google-auth-httplib2 google-auth-oauthlib

Pada raspberry

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

2.2.3 Lihat skrip memuat naik ke foto google.. Ia diletakkan di github saya. Masukkan ke dalam direktori yang sama dengan credentials.json.

2.2.4 Mengambil gambar dan memuat naik ujian

python3 photos.py image.jpg

Pasang kebergantungan yang hilang jika ada dan cuba lagi. Akibatnya anda harus mendapatkan token.pickle di direktori skrip dan juga album bersama baru yang dibuat di antara muka web Foto Google anda dengan image.jpg. Semasa anda mendapat token.pickle anda tidak memerlukan credentials.json untuk photos.py dalam direktori yang sama lagi.

2.2.5 Berkongsi album dengan akaun mengenai perkara yang anda ingin dapatkan pemberitahuan di media baru yang ditambahkan. Tambahkan akaun ini ke telefon anda.

2.2.6 Masukkan photos.py dan token.pickle in / var / lib / motion pada raspberry. Pengguna ‘pi’ tidak dapat menulis ke dir ‘motion’ jadi muat naik ke / home / pi terlebih dahulu

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

Kemudian log masuk ke raspberry dan pindahkan fail di bawah sudo

ssh pi @ IP

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

2.2.7 Periksa cara memuat naik pada raspberry. Ambil gambar dengan fswebcam dan cuba muat naik

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

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

Mungkin ada image-j.webp

Langkah 3: Uji

3.1 Mula perkhidmatan Motion

pi @ raspberrypi: ~ $ sudo memulakan gerak perkhidmatan

Anda boleh menukar perintah menjadi "berhenti", atau "mulakan semula"

3.2 Membolehkan log pergerakan

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

3.2 Melihat output kamera pada peranti lain yang disambungkan ke rangkaian tempatan yang sama. Masukkan dalam penyemak imbas:

IP: 8081

3.3 Melihat log tunggu sehingga gerakan dikesan dan fail NAME.mp4 ditulis dalam / var / lib / motion. Kemudian lancarkan muat naik skrip secara manual

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

Periksa jejak ular sawa. Tunggu sehingga event_end muncul dalam gerakan.log. Kemudian pergi ke album "helloworld" di foto google anda dan periksa apakah ada video yang dimuat naik.

3.4 Sekiranya memuat naik berjaya, hantar di /etc/motion.conf baris:

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

# Perintah yang akan dilaksanakan apabila fail filem siap

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

pi @ raspberrypi: ~ $ segerakkan

pi @ raspberrypi: ~ $ sudo memulakan gerakan semula

3.5 Melihat log gerakan dan dalam album periksa sama ada video dimuat naik secara automatik.

3.6 Kongsi album secara pilihan dengan akaun utama anda untuk mendapatkan pemberitahuan apabila video atau foto baru ditambahkan.

Langkah 4: Pilihan: Konfigurasikan Akses Web ke Kamera Streaming Masa Nyata

Pilihan: Konfigurasikan Akses Web ke Kamera Streaming Masa Nyata
Pilihan: Konfigurasikan Akses Web ke Kamera Streaming Masa Nyata
Pilihan: Konfigurasikan Akses Web ke Kamera Streaming Masa Nyata
Pilihan: Konfigurasikan Akses Web ke Kamera Streaming Masa Nyata
Pilihan: Konfigurasikan Akses Web ke Kamera Streaming Masa Nyata
Pilihan: Konfigurasikan Akses Web ke Kamera Streaming Masa Nyata

Langkah ini berdasarkan tutorial Michel's Parreno. Saya hanya memilih FreeDNS dan bukannya NoIP seperti yang disyorkan di sini.

4.1 Konfigurasikan akses yang dibenarkan ke pelayan gerakan streaming video:

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

# Tetapkan kaedah pengesahan (lalai: 0)

# 0 = dilumpuhkan

# 1 = Pengesahan asas

# 2 = Ringkasan MD5 (pengesahan yang lebih selamat)

stream_auth_ kaedah 2

# Pengesahan untuk aliran. Nama pengguna sintaks: kata laluan

# Lalai: tidak ditentukan (Dinyahdayakan)

nama pengguna webcontrol_authentication: kata laluan

# Framerate maksimum untuk aliran aliran (lalai: 1)

aliran_maxrate 30

# Hadkan sambungan aliran ke localhost sahaja (lalai: aktif)

stream_localhost mati

Sekiranya anda tidak akan menggunakan antara muka kawalan web dari rangkaian luaran biarkan ia dinyahaktifkan (seperti secara lalai)

# Hadkan sambungan kawalan ke localhost sahaja (lalai: aktif)

webcontrol_localhost dihidupkan

Oleh kerana raspberry dalam talian, saya cadangkan untuk menukar kata laluan raspberry lalai

pi @ raspberrypi: ~ $ passwd

Walaupun ssh port 22 tidak dialihkan ke raspberry, tetap.

4.2 Pergi ke laman FreeDNS

4.3 Mendaftar

4.4 Menambah subdomain (Untuk Ahli -> Subdomain)

4.5 Pilih klien DNS untuk dipasang pada Raspberry (Untuk Anggota -> Dynamic DNS -> Synamic DNS Resources -> Dynamic DNS Clients)

Saya memilih wget_script update.sh dari Adam Dean (di bahagian bawah halaman)

Terdapat ruang letak _YOURAPIKEYHERE_ dan _YOURDOMAINHERE_. Untuk mendapatkannya pergi ke (Untuk Anggota -> DNS Dinamik)

Dan di halaman di bawah ini, anda akan menemui contoh skrip dengan APIKEY dan DOMAIN anda (yang ditambahkan dalam 4.4). Saya mengambil nilai-nilai ini dari Wget Script dan menggantikan _YOURAPIKEYHERE_ dan _YOURDOMAINHERE_ dalam update.sh

4.6 Kemudian jalankan update.sh pada raspberry. Mungkin memerlukan dnsutils untuk nslookup. Pasang kemudian:

pi @ raspberrypi: ~ $ sudo apt-get dnsutils

4.7 Kemudian konfigurasikan penghala anda untuk mengubah arah permintaan dunia luaran ke port 8081 ke ip raspberry

4.8 Simpan ip untuk MAC raspberry anda dalam pengaturan DHCP sehingga Rpi akan selalu memiliki ip yang sama

4.9 Kemudian masukkan penyemak imbas pada peranti yang tidak disambungkan ke rangkaian tempatan:

domainanda: 8081

Masukkan kelayakan anda yang anda tentukan di motion.conf.

Uji bagaimana video berfungsi.

4.10 untuk mengemas kini DDNS secara automatik mengatur tugas cron. Lihat quick_cron_example di (Untuk Anggota -> DNS Dinamik)

Langkah 5: Petua

5.1 Berhati-hati memasang pakej python pada raspberry. Saya menghabiskan satu hari untuk men-debug ini - masalahnya adalah bahawa dari konsol skrip berjalan dengan baik, tetapi panggilan dari acara panggilan balik tidak berlaku. Yang memburukkannya adalah bahawa jejak dari skrip tidak tersedia dalam kes terakhir.

Sebabnya ialah dengan mengikuti panduan, saya memasang pakej untuk pengguna 'pi' (yang secara lalai adalah direktori / home / pi dan terhad untuk pengguna lain) tetapi untuk menjalankan skrip sebagai anak perkhidmatan 'gerakan', pakej mesti tersedia untuk pengguna 'gerakan' juga. Jadi akhirnya saya memperbaikinya memasang pakej sebagai

sudo pip3…

Ini bukan cara yang betul masih berfungsi. Pemasangan tanpa sudo sebagai sistem pip3 memberi saya kesalahan kerana beberapa sebab.

Sejajar dengan itu skrip disebut juga di bawah sudo (lihat motion.conf).

Semasa menyelesaikan masalah ini, saya melakukan banyak perubahan yang tidak perlu dan tidak pasti apa yang perlu dan sekarang terlalu malas untuk mengembalikannya secara bertahap dan melihat kapan ia berhenti berfungsi. Terutama, hak pentadbir gerakan yang diberikan:

pi @ raspberrypi: ~ gerakan kumpulan $

gerak: gerakan ad sudo pengguna video audio netdev pi

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

pi SEMUA = (SEMUA) NOPASSWD: SEMUA

gerak SEMUA = (SEMUA) NOPASSWD: SEMUA

Juga menukar pemilik dan kebenaran fail yang serupa dengan memuat naik ke Google Drive. Mungkin ia dapat membantu anda sekiranya anda mempunyai masalah yang serupa.

5.2 Google Photos API memungkinkan untuk menambahkan fail ke album yang dikongsi sahaja sehingga sesiapa sahaja yang mempunyai pautan dapat mengaksesnya. Jangan kongsi dengan pautan dan padamkan filem lama atau pindahkan ke sampah atau dari album. Dalam kes terakhir mereka tetap berada dalam akaun.

5.3 Pembantu gambar Google mengesan wajah, yang sangat berguna sekiranya kualiti kamera baik-baik saja. Sebagai bonus, ia menjadikan kompilasi dan-g.webp

5.4 Saya cuba menggunakan modem USB 4G LTE untuk akses internet dan inilah hasil saya.5.4.1 Huawei E3372h-153 berfungsi dengan raspberry tanpa masalah dan perisian tambahan 5.4.2 Juga mendayakan hotspot sehingga Rasperry berkongsi sambungan internet melalui wifi. Terdapat https://howtoraspberrypi.com/create-a-wi-fi-hotspot-in-less-than-10-minutes-with-pi-raspberry/ panduan yang sangat mudah bagaimana melakukannya menggunakan RaspAP. 5.4.3 DNS Dinamik tidak berfungsi di rangkaian 4G carrie saya. Terdapat penjelasan mengapa

5.5 Setelah menggunakan sistem ini selama beberapa minggu, walaupun video lebih senang dilihat dan dimuat, Foto Google berfungsi lebih baik dengan gambar. Contohnya, membolehkan perkara / wajah mengelompokkan hanya menganalisis gambar, dan hanya kemudian mencari wajah / benda dari gambar dalam video, tetapi bukan sebaliknya. Jadi saya akan menguji gambar yang memuat naik dan bukannya video.

Disyorkan: