
Isi kandungan:
2025 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2025-01-23 15:01

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


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



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:
Pembuka Pintu Garasi Pintar DIY + Integrasi Pembantu Rumah: 5 Langkah

Pembuka Pintu Garasi Pintar DIY + Integrasi Pembantu Rumah: Hidupkan pintu garaj biasa anda dengan bijak menggunakan projek DIY ini. Saya akan menunjukkan kepada anda bagaimana membinanya dan mengawalnya menggunakan Pembantu Rumah (melalui MQTT) dan mempunyai kemampuan untuk membuka dan menutup pintu garaj anda dari jauh. Saya akan menggunakan papan ESP8266 yang disebut Wemos
Pintar Pintar DIY: Kod, Persediaan dan Integrasi HA: 7 Langkah (dengan Gambar)

Pintar Pintar DIY: Kod, Penyediaan dan Integrasi HA: Dalam projek ini, saya akan menunjukkan kepada anda bagaimana anda boleh mengubah bel pintu biasa anda menjadi telefon pintar tanpa mengubah fungsi semasa atau memotong wayar. Saya akan menggunakan papan ESP8266 yang dipanggil Wemos D1 mini. Baru ke ESP8266? Tonton Pengenalan saya
Status dan Sistem Tempahan Kicker Mudah Dengan Integrasi Slack: 12 Langkah (dengan Gambar)

Status dan Sistem Tempahan Kicker Mudah Dengan Integrasi Slack: Di sebuah syarikat tempat saya bekerja ada meja kicker. Syarikat ini menempati banyak tingkat dan bagi sebilangan pekerja memerlukan masa hingga 3 minit untuk sampai ke meja dan … untuk menyedari bahawa meja itu sudah terpakai. Oleh itu, timbul idea untuk membina
Blinds Control Dengan ESP8266, Integrasi Laman Utama Google dan Openhab dan Kawalan Web: 5 Langkah (dengan Gambar)

Blinds Control Dengan ESP8266, Integrasi Rumah dan Openhab Google dan Kontrol Web: Dalam Instruksional ini saya menunjukkan kepada anda bagaimana saya menambah automasi pada tirai saya. Saya mahu dapat menambah dan mengeluarkan automasi, jadi semua pemasangan terpasang. Bahagian utamanya adalah: Motor stepper Driver stepper dikendalikan bij ESP-01 Gear dan pemasangan
Jalur Led 12v Dikawal Wifi Menggunakan Raspberry Pi Dengan Tasker, Integrasi Ifttt .: 15 Langkah (dengan Gambar)

Jalur Led 12v Dikawal Wifi Menggunakan Raspberry Pi Dengan Tasker, Integrasi Ifttt .: Dalam projek ini saya akan menunjukkan kepada anda cara mengendalikan jalur LED 12v analog mudah melalui wifi menggunakan pi raspberry. Untuk projek ini, anda memerlukan: 1x Raspberry Pi (I saya menggunakan Raspberry Pi 1 Model B +) 1x RGB 12v