Daftar Isi:
2025 Pengarang: John Day | [email protected]. Terakhir diubah: 2025-01-13 06:57
Idenya adalah untuk mengunggah foto dan video yang dibuat dengan cam yang diaktifkan gerakan yang terhubung ke Raspberry Pi untuk mengunggah file ke cloud. Perangkat lunak 'Motion' mendukung pengunggahan ke Google Drive melalui PyDrive. Dalam artikel ini 'Gerakan' digunakan untuk mengunggah ke Foto Google.
Perangkat keras:
Raspberry Pi 3B+
Webcam USB Logitech C920
Pemilihan perangkat keras tidak ditentukan, saya hanya mengambil apa yang ada.
Prasyarat:
Untuk kenyamanan Raspberry pi harus berada di jaringan lokal Anda – untuk mengontrolnya tanpa monitor/keyboard dan mengunggah/mengunduh file. Untuk ini, Anda harus memiliki agen ssh di PC Anda (misalnya dempul).
Banyak terima kasih kepada ssandbac untuk tutorial yang bagus. Jika Anda memerlukan info lebih lanjut tentang cara mengatur lingkungan, lihat artikel ini. Saya meminjam instalasi gerak dan mengonfigurasi langkah-langkah darinya dan menambahkan beberapa perubahan. Secara khusus, alih-alih mengirim file dan peringatan melalui email, contoh ini menggunakan pengunggahan ke album bersama foto google dan mendapatkan jenis pemberitahuan "foto tambahan" di bilah notifikasi.
Berikut langkah-langkahnya:
Langkah 1: Instal Linux Motion di Raspberry
Khususnya dalam contoh ini digunakan gerakan v4.0.
1.1 Memperbarui gambar
pi@raspberrypi:~ $ sudo apt-get update
pi@raspberrypi:~ $ sudo apt-get upgrade
1.2 Unduh gerakan
pi@raspberrypi:~ $ sudo apt-get install motion
1.3 Sekarang edit file ini dengan perubahan berikut:
pi@raspberrypi:~ $ sudo nano /etc/motion/motion.conf
# Mulai dalam mode daemon (latar belakang) dan lepaskan terminal (default: mati)
daemon aktif
# Gunakan file untuk menyimpan pesan log, jika tidak ditentukan stderr dan syslog digunakan. (default: tidak ditentukan)
file log /var/log/motion/motion.log
# Lebar gambar (piksel). Rentang valid: Tergantung kamera, default: 352
lebar 1920
# Tinggi gambar (piksel). Rentang valid: Tergantung kamera, default: 288
tinggi 1080
# Jumlah bingkai maksimum yang akan diambil per detik.
kecepatan bingkai 30
# Menentukan jumlah gambar yang diambil sebelumnya (disangga) dari sebelum gerakan
pra_tangkap 5
# Jumlah bingkai yang akan diambil setelah gerakan tidak lagi terdeteksi
post_capture 5
# Keluarkan gambar 'normal' saat gerakan terdeteksi (default: aktif)
output_gambar mati
# Kualitas (dalam persen) yang akan digunakan oleh kompresi jpeg
kualitas 100
# Gunakan ffmpeg untuk menyandikan film secara realtime
ffmpeg_output_film mati
# atau rentang 1 - 100 di mana 1 berarti kualitas terburuk dan 100 adalah yang terbaik.
ffmpeg_variable_bitrate 100
# Saat membuat video, bingkai harus digandakan secara berurutan
ffmpeg_duplicate_frames salah
# Bool untuk mengaktifkan atau menonaktifkan extpipe (default: off)
use_extpipe aktif
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/motion
# Perintah yang akan dijalankan saat file film
; on_movie_end sudo python3 /var/lib/motion/photos.py %f.mp4 &
Biarkan yang terakhir dengan titik koma untuk saat ini (dikomentari) untuk membatalkan komentar setelah memastikan bahwa perekaman dan pengunggahan video berfungsi.
1.4 Kemudian ubah
pi@raspberrypi:~ $ sudo nano /etc/default/motion
pi@raspberrypi:~ $ start_motion_daemon=ya
Langkah 2: Siapkan Google Foto API untuk Python
2.1 Direkomendasikan untuk membuat akun baru untuk tujuan ini untuk berbagi album dengan akun utama Anda untuk mendapatkan pemberitahuan ketika file baru ditambahkan, ditambah lebih banyak ruang penyimpanan. Aktifkan Google Photos API untuk akun yang akan Anda gunakan untuk mengunggah.
Anda harus memiliki file kredensial.json setelah ini.
2.2 Pengaturan lingkungan Python
Pada dasarnya pengaturan lingkungan hanya diperlukan pada raspberry. Tapi itu membutuhkan otorisasi oauth yang lebih nyaman untuk dilakukan di PC. Untuk melakukan ini pada raspberry, Anda perlu menghubungkan monitor/keyboard ke sana atau mengatur beberapa UI desktop jarak jauh. Saya baru saja menginstal lingkungan yang sama pada raspberry dan PC keduanya. Jadi langkah 2.2.1..2.2.3 dibuat di PC, 2.2.1, 2.2.2, 2.2.5, 2.2.6 di Rpi
2.2.1 instal Python 3
2.2.2 Instal paket google api sesuai dengan manual*(lihat 5.1)
Di PC
instal pip3 --upgrade google-api-python-client 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 pengunggahan skrip ke foto google.. Itu ditempatkan di github saya. Masukkan ke dalam direktori yang sama dengan credential.json.
2.2.4 Ambil beberapa gambar dan uji unggah
python3 photos.py image.jpg
Instal dependensi yang hilang jika ada dan coba lagi. Akibatnya Anda harus mendapatkan token.pickle di direktori skrip dan juga album bersama baru yang dibuat di antarmuka web Foto Google Anda dengan image.jpg. Saat Anda mendapatkan token.pickle, Anda tidak memerlukan kredensial.json untuk photos.py di direktori yang sama lagi.
2.2.5 Bagikan album dengan akun tentang apa yang Anda ingin dapatkan pemberitahuan tentang media baru yang ditambahkan. Tambahkan akun ini ke ponsel Anda.
2.2.6 Letakkan photos.py dan token.pickle di /var/lib/motion pada raspberry. Pengguna 'pi' tidak dapat menulis ke direktori 'motion's jadi unggah ke /home/pi terlebih dahulu
scp photos.py token.pickle pi@IP:/home/pi
Kemudian masuk ke raspberry dan pindahkan file di bawah sudo
ssh pi@IP
pi@raspberrypi:~ $ sudo mv photos.py token.pickle /var/lib/motion
2.2.7 Periksa cara kerja pengunggahan di raspberry. Ambil beberapa gambar dengan fswebcam dan coba unggah
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 Mulai layanan Gerak
pi@raspberrypi:~ $ sudo layanan mulai bergerak
Anda dapat mengubah perintah menjadi "stop", atau "restart"
3.2 Aktifkan log gerak
pi@raspberrypi:~ $ tail -f /var/log/motion/motion.log
3.2 Lihat output kamera pada perangkat lain yang terhubung ke jaringan lokal yang sama. Masuk ke browser:
IP:8081
3.3 Melihat log tunggu sampai gerakan terdeteksi dan file NAME.mp4 ditulis di /var/lib/motion. Kemudian luncurkan skrip pengunggahan secara manual
pi@raspberrypi:~ $ sudo python3 /var/lib/motion/photos.py /var/lib/motion/NAME.mp4
Periksa jejak python. Tunggu sampai event_end muncul di motion.log. Lalu buka album "helloworld" di foto google Anda dan periksa apakah ada video yang diunggah.
3.4 Jika pengunggahan berhasil, batalkan komentar di /etc/motion.conf baris:
pi@raspberrypi:~ $ sudo nano /etc/motion.conf
# Perintah untuk dieksekusi saat file film siap
on_movie_end sudo python3 /var/lib/motion/photos.py %f.mp4 &
pi@raspberrypi:~ $ sinkron
pi@raspberrypi:~ $ sudo service motion restart
3.5 Melihat log gerak dan di album periksa apakah video diunggah secara otomatis.
3.6 Opsional bagikan album dengan akun utama Anda untuk mendapatkan pemberitahuan ketika video atau foto baru ditambahkan.
Langkah 4: Opsional: Konfigurasikan Akses Web ke Kamera Streaming Waktu Nyata
Langkah ini didasarkan pada tutorial Parreno Michel. Saya baru saja memilih FreeDNS daripada NoIP seperti yang direkomendasikan di sini.
4.1 Konfigurasikan akses resmi ke server gerakan streaming video:
pi@raspberrypi:~ $ sudo nano /etc/motion/motion.conf
# Atur metode otentikasi (default: 0)
# 0 = dinonaktifkan
#1 = Otentikasi dasar
#2 = MD5 digest (otentikasi lebih aman)
stream_auth_method 2
# Otentikasi untuk streaming. Nama pengguna sintaks: kata sandi
# Default: tidak ditentukan (Dinonaktifkan)
webcontrol_authentication nama pengguna: kata sandi
# Framerate maksimum untuk streaming streaming (default: 1)
streaming_maxrate 30
# Batasi koneksi streaming hanya ke localhost (default: aktif)
stream_localhost nonaktif
Jika Anda tidak akan menggunakan antarmuka kontrol web dari jaringan eksternal, biarkan dinonaktifkan (seperti secara default)
# Batasi koneksi kontrol ke localhost saja (default: aktif)
webcontrol_localhost aktif
Juga, karena raspberry online, saya sarankan untuk mengubah kata sandi raspberry default
pi@raspberrypi:~ $ passwd
Meskipun ssh port 22 tidak dialihkan ke raspberry, tetap saja.
4.2 Buka situs FreeDNS
4.3 Mendaftar
4.4 Tambahkan subdomain (Untuk Anggota -> Subdomain)
4.5 Pilih klien DNS untuk diinstal pada Raspberry (Untuk Anggota -> DNS Dinamis -> Sumber Daya DNS Synamic -> Klien DNS Dinamis)
Saya memilih wget_script update.sh dari Adam Dean (di bagian bawah halaman)
Ada placeholder _YOURAPIKEYHERE_ dan _YOURDOMAINHERE_. Untuk mendapatkannya, buka (Untuk Anggota -> DNS Dinamis)
Dan pada halaman di bawah ini Anda akan menemukan contoh skrip dengan APIKEY dan DOMAIN Anda (yang ditambahkan di 4.4). Saya mengambil nilai-nilai ini dari Wget Script dan mengganti _YOURAPIKEYHERE_ dan _YOURDOMAINHERE_ di update.sh
4.6 Kemudian jalankan update.sh pada raspberry. Mungkin memerlukan dnsutils untuk nslookup. Instal kemudian:
pi@raspberrypi:~ $ sudo apt-get dnsutils
4.7 Kemudian konfigurasikan router Anda untuk merutekan ulang permintaan dunia eksternal ke port 8081 ke ip raspberry
4.8 Cadangan ip untuk MAC raspberry Anda dalam pengaturan DHCP sehingga Rpi akan selalu memiliki ip yang sama
4.9 Kemudian masuk ke browser pada perangkat yang tidak terhubung ke jaringan lokal:
domainmu:8081
Masukkan kredensial Anda yang Anda tentukan di motion.conf.
Uji cara kerja video.
4.10 untuk memperbarui DDNS secara otomatis mengatur tugas cron. Lihat quick_cron_example di (Untuk Anggota -> DNS Dinamis)
Langkah 5: Kiat
5.1 Berhati-hatilah saat menginstal paket python di raspberry. Saya menghabiskan satu hari untuk men-debug ini - masalahnya adalah dari konsol skrip berjalan dengan baik, tetapi dipanggil dari panggilan balik acara gerak tidak. Yang membuatnya lebih buruk adalah bahwa jejak dari skrip tidak tersedia dalam kasus terakhir.
Alasannya adalah karena mengikuti panduan saya menginstal paket untuk pengguna 'pi' (yang secara default ada di direktori /home/pi dan dibatasi untuk pengguna lain) tetapi untuk menjalankan skrip sebagai anak dari layanan 'gerak' paket harus tersedia untuk pengguna 'gerak' juga. Jadi akhirnya saya memperbaikinya dengan menginstal paket-paket sebagai
sudo pip3 …
Ini bukan cara yang tepat masih bekerja. Instalasi tanpa Sudo karena pip3 --system memberi saya kesalahan karena beberapa alasan.
Sejalan dengan itu skrip disebut juga di bawah sudo (lihat motion.conf).
Selama pemecahan masalah ini saya melakukan banyak perubahan yang tidak perlu dan tidak yakin apa yang diperlukan dan sekarang terlalu malas untuk memutarnya kembali secara bertahap dan melihat kapan itu berhenti bekerja. Khususnya, diberikan hak administrator gerakan:
pi@raspberrypi:~ $ gerakan kelompok
gerak: motion adm sudo pengguna video audio netdev pi
pi@raspberrypi:~ $ sudo cat /etc/sudoers.d/010_pi-nopasswd
pi ALL=(ALL) NOPASSWD: ALL
gerak ALL=(ALL) NOPASSWD: ALL
Juga mengubah pemilik dan izin file yang mirip dengan mengunggah ke Google Drive. Mungkin itu dapat membantu Anda jika Anda memiliki masalah serupa.
5.2 Google Foto API memungkinkan untuk menambahkan file ke album bersama saja sehingga siapa pun yang memiliki tautan dapat mengaksesnya. Jangan membagikannya melalui tautan dan menghapus film lama atau memindahkannya ke sampah atau dari album. Dalam kasus terakhir mereka tetap di akun.
5.3 Asisten foto Google mendeteksi wajah, yang cukup berguna jika kualitas kamera baik-baik saja. Sebagai bonus, itu membuat jenis kompilasi dan-g.webp
5.4 Saya mencoba menggunakan modem USB 4G LTE untuk akses internet dan inilah hasilnya.5.4.1 Huawei E3372h-153 bekerja dengan raspberry tanpa masalah dan perangkat lunak tambahan 5.4.2 Juga mengaktifkan hotspot sehingga Rasperry berbagi koneksi internet melalui wifi. Ada 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 Dinamis tidak berfungsi di jaringan 4G dari operator saya. Ada penjelasan kenapa
5.5 Setelah menggunakan sistem ini selama beberapa minggu ternyata, meskipun video lebih nyaman untuk dilihat dan diunggah, Google Foto bekerja lebih baik dengan gambar. Misalnya memungkinkan pengelompokan benda/wajah hanya menganalisis gambar, dan baru kemudian mencari wajah/benda dari gambar dalam video, tetapi tidak sebaliknya. Jadi saya akan menguji upload gambar daripada video.