Kazalo:
2025 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2025-01-13 06:58
Zamisel je naložiti fotografije in video posnetke, narejene z kamero, aktivirano z gibanjem, povezano z Raspberry Pi, da naložite datoteke v oblak. Programska oprema "Motion" podpira nalaganje v Google Drive prek PyDrive. V tem članku se "Motion" uporablja za nalaganje v Google Foto.
Strojna oprema:
Raspberry Pi 3B+
Spletna kamera USB Logitech C920
Izbira strojne opreme ni bila določena, vzela sem samo tisto, kar je bilo pri roki.
Predpogoji:
Za udobje mora biti Raspberry pi v vašem lokalnem omrežju - za nadzor brez monitorja/tipkovnice in nalaganje/nalaganje datotek. V ta namen morate imeti v računalniku ssh agent (npr. Kit).
Najlepša hvala ssandbac za odlično vadnico. Če potrebujete več informacij o nastavitvi okolja, si oglejte ta članek. Od nje sem si izposodil namestitev gibanja in korake konfiguracije ter dodal nekaj sprememb. Namesto pošiljanja datotek in opozoril po e -pošti ta primer uporablja nalaganje v album v skupni rabi google photos in prejemanje obvestil v obliki »dodanih fotografij« v vrstici z obvestili.
Tu so koraki:
1. korak: Namestite Linux Motion na Raspberry
V tem primeru je bilo zlasti uporabljeno gibanje v4.0.
1.1 Posodobi pi
pi@raspberrypi: ~ $ sudo apt-get update
pi@raspberrypi: ~ $ sudo apt-get upgrade
1.2 Prenesite gibanje
pi@raspberrypi: ~ $ sudo apt-get install motion
1.3 Zdaj uredite to datoteko z naslednjimi spremembami
pi@raspberrypi: ~ $ sudo nano /etc/motion/motion.conf
# Začni v daemon (ozadju) načinu in sprosti terminal (privzeto: izklopljeno)
demon vklopljen
# Uporabite datoteko za shranjevanje dnevniških sporočil, če nista določena stderr in syslog. (privzeto: ni definirano)
logfile /var/log/motion/motion.log
# Širina slike (slikovne pike). Veljavno območje: odvisno od kamere, privzeto: 352
širina 1920
# Višina slike (slikovne pike). Veljavno območje: odvisno od kamere, privzeto: 288
višina 1080
# Največje število sličic na sekundo.
hitrost sličic 30
# Določa število vnaprej posnetih (medpomnjenih) slik pred gibanjem
pre_capture 5
# Število sličic za zajem po gibanju ni več zaznano
post_capture 5
# Predvajajte "normalne" slike, ko zaznate gibanje (privzeto: vklopljeno)
izhodne_slike izklopljene
# Kakovost (v odstotkih) za stiskanje jpeg
kakovost 100
# Uporabite ffmpeg za kodiranje filmov v realnem času
ffmpeg_output_movies off
# ali razpon 1 - 100, kjer 1 pomeni najslabšo kakovost, 100 pa najboljšo.
ffmpeg_variable_bitrate 100
# Pri ustvarjanju videoposnetkov je treba okvirje podvojiti po vrstnem redu
ffmpeg_duplicate_frames false
# Bool za omogočanje ali onemogočanje extpipe (privzeto: izklopljeno)
use_extpipe vklopljeno
extpipe ffmpeg -y -f rawvideo -pix_fmt yuv420p -video_size %wx %h -framerate %fps -i cev: 0 -vcodec libx264 -nastavljeno ultra hitro -f mp4 %f.mp4
target_dir/var/lib/motion
# Ukaz, ki ga je treba izvesti pri filmski datoteki
; on_movie_end sudo python3 /var/lib/motion/photos.py %f.mp4 &
Zadnjega s podpičjem zaenkrat (komentirano) pustite, da komentira, potem ko zagotovite, da snemanje in nalaganje videa deluje.
1.4 Nato spremenite
pi@raspberrypi: ~ $ sudo nano/etc/default/motion
pi@raspberrypi: ~ $ start_motion_daemon = da
2. korak: Nastavite Google Photos API za Python
2.1 Priporočljivo je, da v ta namen ustvarite nov račun, ki bo album delil z vašim glavnim, da boste prejemali obvestila o dodajanju novih datotek in več prostora za shranjevanje. Omogočite Google Photos API za račun, ki ga boste uporabili za nalaganje.
Po tem bi morali imeti datoteko credentials.json.
2.2 Nastavitev okolja Python
V osnovi je nastavitev okolja potrebna samo za maline. Vendar pa zahteva avtorizacijo oauth, ki je primernejša za izvedbo v računalniku. Če želite to narediti na malini, morate nanjo priključiti monitor/tipkovnico ali nastaviti nekaj uporabniškega vmesnika za oddaljeno namizje. Pravkar sem namestil isto okolje na malino in na računalnik. Koraki 2.2.1..2.2.3 so bili narejeni na osebnem računalniku, 2.2.1, 2.2.2, 2.2.5, 2.2.6 na Rpi
2.2.1 namestite Python 3
2.2.2 Namestite google api pakete v skladu z navodili*(glejte 5.1)
Na osebnem računalniku
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 Oglejte si nalaganje skripta v google fotografije. Postavljen je na moj github. Dajte ga v isti imenik z credentials.json.
2.2.4 Fotografirajte in preizkusite nalaganje
python3 photos.py image.jpg
Namestite manjkajoče odvisnosti, če obstajajo, in poskusite znova. Posledično bi morali v imenik skripta dobiti token.pickle in tudi nov album v skupni rabi, ustvarjen v spletnem vmesniku Google Photos s image.jpg. Ko dobite token.pickle, za photos.py v istem imeniku ne potrebujete več credentials.json.
2.2.5 Dajte album v skupno rabo z računom o tem, kaj želite, da se dodajo obvestila o novih medijih. Dodajte ta račun v telefon.
2.2.6 Postavite photos.py in token.pickle v/var/lib/motion na malino. "Pi" uporabnik ne more pisati v "motion's dir's", zato ga najprej naložite v /home /pi
scp photos.py token.pickle pi@IP:/home/pi
Nato se prijavite v malino in premaknite datoteke pod sudo
ssh pi@IP
pi@raspberrypi: ~ $ sudo mv photos.py token.pickle/var/lib/motion
2.2.7 Preverite, kako nalaganje deluje na malino. Fotografirajte s fswebcam in jo poskusite naložiti
pi@raspberrypi: ~ $ sudo fswebcam /var/lib/motion/image.jpg
pi@raspberrypi: ~ $ sudo python3 /var/lib/motion/photos.py /var/lib/motion/image.jpg
V albumu "helloworld" bi moral biti image-j.webp
3. korak: Preizkusite
3.1 Zaženite storitev Motion
pi@raspberrypi: ~ $ sudo start motion start
Ukaz lahko spremenite v "stop" ali "restart"
3.2 Omogoči dnevnike gibanja
pi@raspberrypi: ~ $ tail -f /var/log/motion/motion.log
3.2 Oglejte si izhod kamere na drugi napravi, povezani v isto lokalno omrežje. V brskalnik vnesite:
IP: 8081
3.3 Če pogledate dnevnike, počakajte, da se zazna gibanje in datoteka NAME.mp4 zapiše v/var/lib/motion. Nato ročno zaženite nalaganje skripta
pi@raspberrypi: ~ $ sudo python3 /var/lib/motion/photos.py /var/lib/motion/NAME.mp4
Preverite sledi pythona. Počakajte, da se event_end prikaže v motion.log. Nato pojdite v album »helloworld« na svojih fotografijah v Googlu in preverite, ali je naložen videoposnetek.
3.4 Če je nalaganje uspešno, komentirajte v /etc/motion.conf vrstici:
pi@raspberrypi: ~ $ sudo nano /etc/motion.conf
# Ukaz, ki ga je treba izvesti, ko je filmska datoteka pripravljena
on_movie_end sudo python3 /var/lib/motion/photos.py %f.mp4 &
pi@raspberrypi: ~ $ sinhronizacija
pi@raspberrypi: ~ $ sudo ponovni zagon gibanja storitve
3.5 Ogled dnevnikov gibanja in albuma preverite, ali se je videoposnetek samodejno naložil.
3.6 Po želji album delite z glavnim računom, da prejmete obvestilo o dodajanju novega videoposnetka ali fotografije.
4. korak: Izbirno: Konfigurirajte spletni dostop do pretočne kamere v realnem času
Ta korak temelji na Michelovi vadnici Parreno. Pravkar sem izbral FreeDNS namesto NoIP, kot je priporočeno tukaj.
4.1 Konfigurirajte pooblaščen dostop do strežnika za pretakanje videoposnetkov:
pi@raspberrypi: ~ $ sudo nano /etc/motion/motion.conf
# Nastavite način preverjanja pristnosti (privzeto: 0)
# 0 = onemogočeno
# 1 = Osnovno preverjanje pristnosti
# 2 = povzetek MD5 (varnejša avtentikacija)
tok_auth_metoda 2
# Preverjanje pristnosti za tok. Uporabniško ime sintakse: geslo
# Privzeto: ni definirano (onemogočeno)
webcontrol_authentication uporabniško ime: geslo
# Največja hitrost sličic za tokove tokov (privzeto: 1)
stream_maxrate 30
# Omeji pretočne povezave samo na localhost (privzeto: vklopljeno)
stream_localhost izklopljen
Če ne boste uporabljali spletnega nadzornega vmesnika iz zunanjega omrežja, ga pustite onemogočenega (privzeto)
# Omejite nadzorne povezave samo na localhost (privzeto: vklopljeno)
webcontrol_localhost je vklopljen
Ker gre malina na splet, priporočam, da spremenite privzeto geslo za malino
pi@raspberrypi: ~ $ passwd
Čeprav vrata ssh 22 niso preusmerjena na malino, še vedno.
4.2 Pojdite na spletno mesto FreeDNS
4.3 Prijavite se
4.4 Dodajanje poddomene (za člane -> poddomene)
4.5 Izberite odjemalca DNS za namestitev na Raspberry (Za člane -> Dinamični DNS -> Viri sinamičnih DNS -> Odjemalci dinamičnih DNS)
Za Adama Deana sem izbral wget_script update.sh (na dnu strani)
Obstajata nadomestna znaka _YOURAPIKEYHERE_ in _YOURDOMAINHERE_. Če jih želite dobiti, pojdite na (Za člane -> Dinamični DNS)
Na spodnji strani boste našli primere skriptov z APIKEY in DOMAIN (tisto, dodano v 4.4). Te vrednosti sem vzel iz skripta Wget in zamenjal _YOURAPIKEYHERE_ in _YOURDOMAINHERE_ v update.sh
4.6 Nato zaženite update.sh na malini. Za nslookup lahko zahteva dnsutils. Nato ga namestite:
pi@raspberrypi: ~ $ sudo apt-get dnsutils
4.7 Nato usmerjevalnik konfigurirajte tako, da preusmeri zahteve zunanjega sveta na vrata 8081 v ip maline
4.8 Rezervirajte IP za nastavitev MAC vaše maline v nastavitvi DHCP, tako da bo Rpi vedno imel isti ip
4.9 Nato vnesite brskalnik v napravi, ki ni povezana z lokalnim omrežjem:
vaša domena: 8081
Vnesite poverilnice, ki ste jih določili v motion.conf.
Preizkusite, kako video deluje.
4.10 za posodobitev DDNS samodejno nastavi cron opravilo. Oglejte si quick_cron_example on (Za člane -> Dinamični DNS)
5. korak: Nasveti
5.1 Bodite previdni pri nameščanju paketov python na malino. En dan sem odpravljal napake - težava je bila v tem, da se je iz konzole skript dobro izvajal, klic iz povratnega klica pri dogodku gibanja pa ni. Še huje pa je bilo, da v slednjem primeru sledi iz scenarija niso bile na voljo.
Razlog je bil v tem, da sem po vodniku namestil pakete za uporabnika 'pi' (ki je privzeto v imeniku /home /pi in je omejen za druge uporabnike), a za zagon skripta kot podrejenca storitve 'motion' morajo biti paketi na voljo tudi uporabnikom 'motion'. Tako sem končno popravil namestitev paketov kot
sudo pip3 …
To še vedno ni pravilen način. Namestitev brez sudo kot pip3 --system mi je iz nekega razloga povzročala napake.
Skladno s tem se skript pokliče tudi pod sudo (glej motion.conf).
Med tem odpravljanjem težav sem naredil veliko nepotrebnih sprememb in nisem prepričan, kaj je potrebno, zdaj pa sem preveč len, da bi jih postopoma zavrnil in videl, kdaj preneha delovati. Zlasti podeljene pravice skrbnika gibanja:
pi@raspberrypi: ~ $ gibanje skupin
motion: motion adm sudo avdio video uporabniki netdev pi
pi@raspberrypi: ~ $ sudo cat /etc/sudoers.d/010_pi-nopasswd
pi ALL = (VSE) NOPASSWD: VSE
gibanje ALL = (VSE) NOPASSWD: VSE
Spreminjal se je tudi lastnik datotek in dovoljenja, podobna nalaganju v Google Drive. Verjetno vam lahko pomaga, če imate podobno težavo.
5.2 Google Photos API omogoča dodajanje datotek v albume v skupni rabi, tako da lahko do njih dostopa vsak, ki ima povezavo. Ne delite ga prek povezave in ne brišite starih filmov ali jih premikajte v koš ali iz albuma. V zadnjem primeru ostanejo na računu.
5.3 Googlov pomočnik za fotografije zazna obraze, kar je zelo koristno, če je kakovost kamere dobra. Kot bonus naredi fancy medijske vrste kompilacij in gifov itd.
5.4 Poskusil sem uporabiti 4G LTE USB modem za dostop do interneta in tukaj so moji rezultati. 5.4.1 Huawei E3372h-153 deluje z malino brez težav in dodatne programske opreme. 5.4.2 Omogočena je tudi dostopna točka, tako da je Rasperry delil internetno povezavo prek wifi. Obstaja https://howtoraspberrypi.com/create-a-wi-fi-hotspot-in-less-than-10-minutes-with-pi-raspberry/ res enostaven vodnik, kako to storiti z uporabo RaspAP. 5.4.3 Dinamični DNS ni deloval v omrežju 4G moje carrie. Obstaja razlaga, zakaj
5.5 Po nekaj tednih uporabe tega sistema, čeprav so videoposnetki bolj priročni za ogled in nalaganje, Google Photos bolje deluje s slikami. Npr. Omogoča samo združevanje stvari/obrazov za analizo slik in šele nato iskanje obrazov/stvari iz slik v videoposnetkih, ne pa tudi obratno. Zato bom preizkusil slike, ki nalagajo videoposnetke.