Sadržaj:
2025 Autor: John Day | [email protected]. Zadnja promjena: 2025-01-13 06:57
Ideja je prenijeti fotografije i videozapise snimljene kamerom pokretom povezane s Raspberry Pi za prijenos datoteka u oblak. Softver "Motion" podržava prijenos na Google disk putem PyDrivea. U ovom se članku "Motion" koristi za prijenos na Google fotografije.
Hardver:
Malina Pi 3B+
USB web kamera Logitech C920
Odabir hardvera nije određen, samo sam uzeo ono što mi je bilo pri ruci.
Preduvjeti:
Radi praktičnosti, Raspberry pi bi trebao biti u vašoj lokalnoj mreži - kontrolirati ga bez monitora/tipkovnice i učitavati/preuzimati datoteke. Za to trebate imati ssh agent na računalu (npr. Kit).
Veliko hvala ssandbac -u na izvrsnom vodiču. Ako trebate više informacija o postavljanju okruženja, pogledajte ovaj članak. Posudio sam instalaciju pokreta i korake konfiguriranja te dodao neke promjene. Konkretno, umjesto slanja datoteka i upozorenja putem e -pošte, ovaj primjer koristi prijenos na google fotografije podijeljenog albuma i primanje obavijesti u obliku "dodanih fotografija" na traci obavijesti.
Evo koraka:
Korak 1: Instalirajte Linux Motion na Raspberry
Posebno se u ovom primjeru koristilo gibanje v4.0.
1.1 Ažuriranje pi
pi@raspberrypi: ~ $ sudo apt-get update
pi@raspberrypi: ~ $ sudo apt-get upgrade
1.2 Preuzmite prijedlog
pi@raspberrypi: ~ $ sudo apt-get install motion
1.3 Sada uredite ovu datoteku sa sljedećim izmjenama
pi@raspberrypi: ~ $ sudo nano /etc/motion/motion.conf
# Pokrenite u daemon (pozadini) načinu rada i otpustite terminal (zadano: isključeno)
demon uključen
# Koristite datoteku za spremanje poruka dnevnika, ako nije definirano koriste se stderr i syslog. (zadano: nije definirano)
logfile /var/log/motion/motion.log
# Širina slike (pikseli). Važeći raspon: ovisno o kameri, zadano: 352
širina 1920
# Visina slike (pikseli). Važeći raspon: Ovisno o kameri, zadano: 288
visina 1080
# Maksimalan broj kadrova za snimanje u sekundi.
broj sličica u sekundi 30
# Određuje broj unaprijed snimljenih (međuspremnih) slika od prije pokreta
pre_capture 5
# Broj kadrova za snimanje nakon kretanja više se ne detektira
post_capture 5
# Ispis "normalnih" slika kada se detektira pokret (zadano: uključeno)
izlazne_slike isključene
# Kvaliteta (u postocima) koju će koristiti jpeg kompresija
kvaliteta 100
# Koristite ffmpeg za kodiranje filmova u stvarnom vremenu
ffmpeg_output_movies off
# ili raspon 1 - 100 gdje 1 znači najlošiju kvalitetu, a 100 najbolju.
ffmpeg_variable_bitrate 100
# Prilikom stvaranja video zapisa, trebaju li se okviri duplicirati redom
ffmpeg_duplicate_frames false
# Bool za omogućavanje ili onemogućavanje extpipe -a (zadano: isključeno)
use_extpipe uključeno
extpipe ffmpeg -y -f rawvideo -pix_fmt yuv420p -video_size %wx %h -framerate %fps -i pipe: 0 -vcodec libx264 -preset ultrabrzi -f mp4 %f.mp4
target_dir/var/lib/motion
# Naredba za izvršavanje datoteke filma
; on_movie_end sudo python3 /var/lib/motion/photos.py %f.mp4 &
Zadnji sa zarezom za sada (komentirano) ostavite da komentira nakon što provjerite radi li snimanje i prijenos videozapisa.
1.4 Zatim promijenite
pi@raspberrypi: ~ $ sudo nano/etc/default/motion
pi@raspberrypi: ~ $ start_motion_daemon = da
Korak 2: Postavite Google Photos API za Python
2.1 Preporučuje se stvaranje novog računa u tu svrhu za dijeljenje albuma s vašim glavnim da biste primali obavijesti o dodavanju novih datoteka, plus više prostora za pohranu. Omogućite Google fotografije API za račun koji ćete koristiti za prijenos.
Nakon ovoga biste trebali imati datoteku credentials.json.
2.2 Postavljanje okruženja Python
U osnovi je postavljanje okruženja potrebno samo na malini. Ali zahtijeva autorizaciju oauth -a što je prikladnije izvršiti na računalu. Da biste to učinili na malini, morate na nju spojiti monitor/tipkovnicu ili postaviti neko udaljeno korisničko sučelje. Upravo sam instalirao isto okruženje na malinu i na računalo. Dakle, koraci 2.2.1..2.2.3 napravljeni su na računalu, 2.2.1, 2.2.2, 2.2.5, 2.2.6 na Rpi
2.2.1 instalirajte Python 3
2.2.2 Instalirajte google api pakete prema priručniku*(vidi 5.1)
Na PC -u
pip3 install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
Na malini
pi@raspberrypi: ~ $ sudo pip3 install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
2.2.3 Provjerite učitavanje skripte na google fotografije. Postavljeno je na moj github. Stavite ga u isti direktorij s vjerodajnicama.json.
2.2.4 Snimite sliku i testirajte prijenos
python3 photos.py image.jpg
Instalirajte ovisnosti koje nedostaju ako postoje i pokušajte ponovno. Kao rezultat toga, trebali biste dobiti token.pickle u direktoriju skripte, a također i novi zajednički album kreiran na vašem web sučelju Google fotografija sa image.jpg. Kako dobijete token.pickle, više vam ne trebaju vjerodajnice.json za photos.py u istom direktoriju.
2.2.5 Podijelite album s računom o tome na što želite primati obavijesti o novim medijima. Dodajte ovaj račun na telefon.
2.2.6 Postavite photos.py i token.pickle u/var/lib/motion na malinu. "Pi" korisnik ne može pisati u "motion's dir's" pa ga najprije prenesite na /home /pi
scp photos.py token.pickle pi@IP:/home/pi
Zatim se prijavite na malinu i premjestite datoteke pod sudo
ssh pi@IP
pi@raspberrypi: ~ $ sudo mv photos.py token.pickle/var/lib/motion
2.2.7 Provjerite kako učitavanje radi na malini. Snimite neku sliku pomoću fsweb kamere i pokušajte je prenijeti
pi@raspberrypi: ~ $ sudo fswebcam /var/lib/motion/image.jpg
pi@raspberrypi: ~ $ sudo python3 /var/lib/motion/photos.py /var/lib/motion/image.jpg
U albumu "helloworld" trebao bi biti image-j.webp
Korak 3: Testirajte
3.1 Pokrenite uslugu Motion
pi@raspberrypi: ~ $ sudo service motion start
Naredbu možete promijeniti u "stop" ili "restart"
3.2 Omogući zapisnike kretanja
pi@raspberrypi: ~ $ tail -f /var/log/motion/motion.log
3.2 Pogledajte izlaz kamere na drugom uređaju spojenom na istu lokalnu mrežu. Unesite u preglednik:
IP: 8081
3.3 Gledajući zapisnike pričekajte da se pokret otkrije i datoteka NAME.mp4 upiše u/var/lib/motion. Zatim ručno pokrenite prijenos skripte
pi@raspberrypi: ~ $ sudo python3 /var/lib/motion/photos.py /var/lib/motion/NAME.mp4
Provjerite tragove pitona. Pričekajte da se event_end pojavi u motion.log. Zatim idite na album "helloworld" na svojim google fotografijama i provjerite ima li učitanog videozapisa.
3.4 Ako je prijenos uspješan, uklonite komentar u /etc/motion.conf retku:
pi@raspberrypi: ~ $ sudo nano /etc/motion.conf
# Naredba koja će se izvršiti kada je datoteka filma spremna
on_movie_end sudo python3 /var/lib/motion/photos.py %f.mp4 &
pi@raspberrypi: ~ $ sync
pi@raspberrypi: ~ $ sudo ponovno pokretanje pokreta
3.5 Gledajući zapisnike pokreta i album provjerite je li video automatski prenijet.
3.6 Po želji podijelite album sa svojim glavnim računom da biste dobili obavijest o dodavanju novog videozapisa ili fotografije.
Korak 4: Izborno: Konfigurirajte web pristup kameri za streaming u stvarnom vremenu
Ovaj se korak temelji na Michelovom vodiču Parreno. Upravo sam odabrao FreeDNS umjesto NoIP kako je ovdje preporučeno.
4.1 Konfigurirajte ovlašteni pristup poslužitelju pokreta za video streaming:
pi@raspberrypi: ~ $ sudo nano /etc/motion/motion.conf
# Postavite način autentifikacije (zadano: 0)
# 0 = onemogućeno
# 1 = Osnovna provjera autentičnosti
# 2 = sažetak MD5 (sigurnija autentifikacija)
metoda_automatskog_toka 2
# Autentifikacija za stream. Korisničko ime sintakse: lozinka
# Zadano: nije definirano (onemogućeno)
webcontrol_authentication korisničko ime: lozinka
# Maksimalna brzina kadrova za streamove (zadano: 1)
stream_maxrate 30
# Ograniči stream veze samo na localhost (zadano: uključeno)
stream_localhost isključen
Ako nećete koristiti sučelje za web kontrolu s vanjske mreže, ostavite ga onemogućenim (prema zadanim postavkama)
# Ograniči kontrolne veze samo na localhost (zadano: uključeno)
webcontrol_localhost uključen
Također, budući da je malina na mreži, preporučujem da promijenite zadanu lozinku za malinu
pi@raspberrypi: ~ $ passwd
Iako ssh port 22 nije preusmjeren na malinu, ipak.
4.2 Idite na FreeDNS web mjesto
4.3 Prijavite se
4.4 Dodavanje poddomene (Za članove -> Poddomene)
4.5 Odaberite DNS klijent za instaliranje na Raspberry (Za članove -> Dinamički DNS -> Sinamički DNS resursi -> Dinamički DNS klijenti)
Odabrao sam wget_script update.sh od Adama Deana (pri dnu stranice)
Postoje rezervirana mjesta _YOURAPIKEYHERE_ i _YOURDOMAINHERE_. Da biste ih dobili, idite na (Za članove -> Dinamički DNS)
Na donjoj stranici pronaći ćete primjere skripti sa svojim APIKEY -om i DOMAIN -om (onim koji je dodan u 4.4). Uzeo sam ove vrijednosti iz Wget skripte i zamijenio _YOURAPIKEYHERE_ i _YOURDOMAINHERE_ u update.sh
4.6 Zatim pokrenite update.sh na malini. Za nslookup može zahtijevati dnsutils. Zatim ga instalirajte:
pi@raspberrypi: ~ $ sudo apt-get dnsutils
4.7 Zatim konfigurirajte svoj usmjerivač da preusmjeri zahtjeve vanjskog svijeta na port 8081 na ip maline
4.8 Rezervirajte ip za MAC vaše maline u DHCP postavci kako bi Rpi uvijek imao isti ip
4.9 Zatim u preglednik unesite uređaj koji nije povezan s lokalnom mrežom:
vaša domena: 8081
Unesite svoje vjerodajnice koje ste definirali u motion.conf.
Testirajte kako video radi.
4.10 radi ažuriranja DDNS -a, automatski postavlja cron zadatak. Pogledajte quick_cron_example on (Za članove -> Dinamički DNS)
Korak 5: Savjeti
5.1 Budite pažljivi pri instaliranju python paketa na malinu. Proveo sam dan u otklanjanju pogrešaka u ovome - problem je bio u tome što je skripta s konzole dobro radila, no poziv iz događaja pri kretanju nije uspio. Ono što je pogoršalo je to što u posljednjem slučaju tragovi iz scenarija nisu bili dostupni.
Razlog je bio u tome što sam slijedeći vodič instalirao pakete za 'pi' korisnika (koji je prema zadanim postavkama u /home /pi direktoriju i ograničen za druge korisnike), ali da bi se skripta pokrenula kao dijete 'motion' usluge, paketi moraju biti dostupna i za 'motion' korisnike. Na kraju sam to popravio instalirajući pakete kao
sudo pip3 …
Ovo nije pravilan način koji još uvijek radi. Instalacija bez sudoa kao pip3 --sustava mi je iz nekog razloga davala greške.
Shodno tome, skripta se naziva i pod sudo (vidi motion.conf).
Tijekom ovog rješavanja problema napravio sam mnogo nepotrebnih promjena i nisam siguran što je potrebno, a sada sam lijen da ih postupno vraćam i vidim kada će prestati raditi. Osobito su dodijeljena administratorska prava za kretanje:
pi@raspberrypi: ~ $ grupno kretanje
motion: motion adm sudo audio video korisnici netdev pi
pi@raspberrypi: ~ $ sudo cat /etc/sudoers.d/010_pi-nopasswd
pi ALL = (SVE) NOPASSWD: SVE
pokret ALL = (SVE) NOPASSWD: SVE
Također se mijenjala vlasnici datoteka i dopuštenja slična prijenosu na Google disk. Vjerojatno bi vam moglo pomoći u slučaju da imate sličan problem.
5.2 Google Photos API omogućuje dodavanje datoteka samo u dijeljene albume tako da im može pristupiti svatko s vezom. Nemojte ga dijeliti putem veze i brisati stare filmove niti ih premještati u otpad ili iz albuma. U potonjem slučaju ostaju na računu.
5.3 Googleov pomoćnik za fotografije prepoznaje lica, što je vrlo korisno ako je kvaliteta kamere dobra. Kao bonus, čini fensi medije kompilacijama i gifovima itd.
5.4 Pokušao sam koristiti 4G LTE USB modem za pristup internetu i evo mojih rezultata. 5.4.1 Huawei E3372h-153 radi s malinom bez problema i dodatnog softvera. 5.4.2 Omogućena je i hotspot tako da Rasperry dijeli internetsku vezu putem WiFi-ja. Postoji https://howtoraspberrypi.com/create-a-wi-fi-hotspot-in-less-than-10-minutes-with-pi-raspberry/ stvarno jednostavan vodič kako to učiniti pomoću RaspAP-a. 5.4.3 Dinamički DNS nije radio u 4G mreži moje carrie. Postoji objašnjenje zašto
5.5 Nakon što se pokazalo da je ovaj sustav korišten nekoliko tjedana, iako je videozapise prikladnije pregledavati i učitavati, Google fotografije bolje rade sa slikama. Npr. Omogućuje grupiranje stvari/lica samo za analizu slika, a tek tada traži lica/stvari sa slika u video zapisima, ali ne i suprotno. Pa ću isprobati slike koje prenose videozapise.