Turinys:

„Raspberry Pi Linux Motion“„Google“nuotraukų integravimas: 5 žingsniai
„Raspberry Pi Linux Motion“„Google“nuotraukų integravimas: 5 žingsniai

Video: „Raspberry Pi Linux Motion“„Google“nuotraukų integravimas: 5 žingsniai

Video: „Raspberry Pi Linux Motion“„Google“nuotraukų integravimas: 5 žingsniai
Video: CS50 2013 - Week 10, continued 2024, Lapkritis
Anonim
„Raspberry Pi Linux Motion“„Google“nuotraukų integracija
„Raspberry Pi Linux Motion“„Google“nuotraukų integracija

Idėja yra įkelti nuotraukas ir vaizdo įrašus, padarytus naudojant judesio aktyvuotą kamerą, prijungtą prie „Raspberry Pi“, kad būtų galima įkelti failus į debesį. „Motion“programinė įranga palaiko įkėlimą į „Google“diską per „PyDrive“. Šiame straipsnyje „Judėjimas“naudojamas įkelti į „Google“nuotraukas.

Techninė įranga:

Raspberry Pi 3B+

„USB“kamera „Logitech C920“

Techninės įrangos pasirinkimas nebuvo nustatytas, aš tiesiog pasiėmiau tai, kas buvo po ranka.

Būtinos sąlygos:

Patogumui „Raspberry pi“turėtų būti jūsų vietiniame tinkle - valdyti jį be monitoriaus/klaviatūros ir įkelti/atsisiųsti failus. Norėdami tai padaryti, kompiuteryje turėtumėte turėti ssh agentą (pvz., Glaistą).

Labai ačiū ssandbac už puikią pamoką. Jei jums reikia daugiau informacijos apie tai, kaip nustatyti aplinką, skaitykite šį straipsnį. Iš jo pasiskolinau judesio diegimo ir konfigūravimo veiksmus ir pridėjau keletą pakeitimų. Visų pirma, vietoj failų ir įspėjimų siuntimo el. Paštu šiame pavyzdyje naudojamas įkėlimas į „Google“nuotraukų bendrinamą albumą ir pranešimų juostoje gaunami pranešimai apie „pridėtas nuotraukas“.

Štai šie veiksmai:

1 veiksmas: įdiekite „Linux Motion“į „Raspberry“

Ypač šiame pavyzdyje buvo naudojamas judesys v4.0.

1.1 Atnaujinti pi

pi@raspberrypi: ~ $ sudo apt-get update

pi@raspberrypi: ~ $ sudo apt-get upgrade

1.2 Atsisiųsti judesį

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

1.3 Dabar redaguokite šį failą atlikdami šiuos pakeitimus

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

# Pradėkite demono (fono) režimu ir paleiskite terminalą (numatytasis: išjungtas)

demonas įjungtas

# Naudokite failą, kad išsaugotumėte žurnalų pranešimus, jei nenurodyta stderr ir syslog. (numatytasis: neapibrėžtas)

logfile /var/log/motion/motion.log

# Vaizdo plotis (pikseliais). Tinkamas diapazonas: priklauso nuo fotoaparato, numatytasis: 352

plotis 1920 m

# Vaizdo aukštis (pikseliais). Tinkamas diapazonas: priklauso nuo fotoaparato, numatytasis: 288

aukštis 1080

# Maksimalus kadrų, kuriuos reikia užfiksuoti per sekundę, skaičius.

kadrų dažnis 30

# Nurodo iš anksto užfiksuotų (buferinių) nuotraukų skaičių prieš judesį

5

# Kadrų, kuriuos reikia užfiksuoti po judesio, skaičius jau neaptinkamas

5

# Išveskite „normalias“nuotraukas, kai aptinkamas judesys (numatytasis: įjungtas)

output_pictures išjungtas

# Kokybė (procentais), naudojama jpeg glaudinimui

kokybė 100

# Naudokite ffmpeg, kad koduotumėte filmus realiuoju laiku

ffmpeg_output_movies išjungtas

# arba diapazonas nuo 1 iki 100, kur 1 reiškia blogiausią kokybę, o 100 - geriausia.

100 ffmpeg_variable_bitrate 100

# Kuriant vaizdo įrašus, ar kadrai turėtų būti dubliuojami eilės tvarka

ffmpeg_duplicate_frames klaidinga

# „Bool“, kad įjungtumėte arba išjungtumėte „Extpipe“(numatytasis: išjungtas)

use_extpipe on

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

# Komanda, kurią reikia vykdyti, kai yra filmo failas

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

Paskutinį kartą palikite kabliataškiu (pakomentavo), kad galėtumėte nekomentuoti, įsitikinę, kad vaizdo įrašymas ir įkėlimas veikia.

1.4 Tada keiskite

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

pi@raspberrypi: ~ $ start_motion_daemon = taip

2 veiksmas: nustatykite „Google“nuotraukų API, skirtą „Python“

Nustatykite „Google“nuotraukų API, skirtą „Python“
Nustatykite „Google“nuotraukų API, skirtą „Python“
Nustatykite „Google“nuotraukų API, skirtą „Python“
Nustatykite „Google“nuotraukų API, skirtą „Python“

2.1 Rekomenduojama šiuo tikslu sukurti naują paskyrą, kad galėtumėte bendrinti albumą su pagrindiniu, kad gautumėte pranešimus apie pridėtus naujus failus ir daugiau vietos saugykloje. Įgalinkite „Google“nuotraukų API paskyroje, kurią ketinate įkelti.

Po to turėtumėte turėti failą credentials.json.

2.2 „Python“aplinkos sąranka

Iš esmės aplinkos nustatymas reikalingas tik avietėms. Tačiau tam reikia autorizacijos, kurią patogiau atlikti asmeniniame kompiuteryje. Norėdami tai padaryti naudodami avietę, turite prijungti monitorių/klaviatūrą arba nustatyti nuotolinio darbalaukio vartotojo sąsają. Aš ką tik įdiegiau tą pačią aplinką tiek avietėse, tiek asmeniniuose kompiuteriuose. Taigi 2.2.1..2.2.3 veiksmai buvo atlikti asmeniniame kompiuteryje, 2.2.1, 2.2.2, 2.2.5, 2.2.6 - Rpi

2.2.1 įdiegti „Python 3“

2.2.2 Įdiekite „Google“API paketus pagal vadovą*(žr. 5.1)

Kompiuteryje

pip3 install-upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib

Ant aviečių

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

2.2.3 Patikrinkite scenarijaus įkėlimą į „Google“nuotraukas. Jis yra mano „github“. Įdėkite jį į tą patį katalogą su credentials.json.

2.2.4 Nufotografuokite ir išbandykite įkėlimą

python3 photos.py image.jpg

Įdiekite trūkstamas priklausomybes ir bandykite dar kartą. Dėl to turėtumėte gauti token.pickle scenarijaus kataloge ir naują bendrinamą albumą, sukurtą „Google“nuotraukų žiniatinklio sąsajoje su image.jpg. Kai gausite token.pickle, jums nebereikia credentials.json photos.py tame pačiame kataloge.

2.2.5 Bendrinkite albumą su paskyra, kur norite gauti pranešimus apie naują mediją. Pridėkite šią paskyrą prie savo telefono.

2.2.6 Įdėkite photos.py ir token.pickle į/var/lib/motion ant aviečių. „Pi“vartotojas negali rašyti „judesio režimui“, todėl pirmiausia įkelkite į /home /pi

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

Tada prisijunkite prie aviečių ir perkelkite failus į „sudo“

ssh pi@IP

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

2.2.7 Patikrinkite, kaip įkėlimas veikia avietes. Padarykite nuotrauką naudodami „fswebcam“ir pabandykite ją įkelti

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

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

Albume „helloworld“gali būti image.jpg, o telefono juostoje - pranešimas.

3 žingsnis: išbandykite

3.1 Paleiskite „Motion“paslaugą

pi@raspberrypi: ~ $ sudo paslaugos judesio pradžia

Komandą galite pakeisti į „stop“arba „restart“

3.2 Įgalinti judesio žurnalus

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

3.2 Peržiūrėkite fotoaparato išvestį kitame prie to paties vietinio tinklo prijungtame įrenginyje. Įveskite į naršyklę:

IP: 8081

3.3 Žiūrėdami į žurnalus, palaukite, kol bus aptiktas judesys ir failas NAME.mp4 įrašomas į/var/lib/motion. Tada paleiskite scenarijų įkėlimą rankiniu būdu

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

Patikrinkite pitono pėdsakus. Palaukite, kol event_end bus rodomas „motion.log“. Tada eikite į „helloworld“albumą savo „Google“nuotraukose ir patikrinkite, ar yra įkeltas vaizdo įrašas.

3.4 Jei įkėlimas sėkmingas, pašalinkite komentarą /etc/motion.conf eilutėje:

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

# Komanda, kurią reikia vykdyti, kai filmo failas yra paruoštas

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

pi@raspberrypi: ~ $ sync

pi@raspberrypi: ~ $ sudo paslaugos judesio paleidimas iš naujo

3.5 Žiūrėdami į judesio žurnalus ir albumą patikrinkite, ar vaizdo įrašas įkeltas automatiškai.

3.6 Pasirinktinai bendrinkite albumą su savo pagrindine paskyra, kad gautumėte pranešimą, kai bus pridėtas naujas vaizdo įrašas ar nuotrauka.

4 veiksmas: neprivaloma: sukonfigūruokite prieigą prie žiniatinklio prie realaus laiko transliacijos kameros

Pasirenkama: sukonfigūruokite prieigą prie žiniatinklio prie realaus laiko transliacijos kameros
Pasirenkama: sukonfigūruokite prieigą prie žiniatinklio prie realaus laiko transliacijos kameros
Neprivaloma: sukonfigūruokite prieigą prie žiniatinklio prie realaus laiko transliacijos kameros
Neprivaloma: sukonfigūruokite prieigą prie žiniatinklio prie realaus laiko transliacijos kameros
Pasirenkama: sukonfigūruokite prieigą prie žiniatinklio prie realaus laiko transliacijos kameros
Pasirenkama: sukonfigūruokite prieigą prie žiniatinklio prie realaus laiko transliacijos kameros

Šis žingsnis pagrįstas Michelio Parreno pamoka. Aš tiesiog pasirinkau „FreeDNS“, o ne „NoIP“, kaip čia rekomenduojama.

4.1 Įgaliotos prieigos prie vaizdo transliacijos judesio serverio konfigūravimas:

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

# Nustatykite autentifikavimo metodą (numatytasis: 0)

# 0 = išjungta

# 1 = Pagrindinis autentifikavimas

# 2 = MD5 santrauka (saugesnis autentifikavimas)

srautas_auto_metodas 2

# Srauto autentifikavimas. Sintaksės vartotojo vardas: slaptažodis

# Numatytasis: neapibrėžtas (išjungtas)

webcontrol_authentication vartotojo vardas: slaptažodis

# Maksimalus srautų srautų kadrų dažnis (numatytasis: 1)

30

# Apriboti srauto ryšius tik su „localhost“(numatytasis: įjungtas)

„stream_localhost“išjungtas

Jei nesinaudosite žiniatinklio valdymo sąsaja iš išorinio tinklo, palikite ją išjungtą (kaip numatyta)

# Apriboti valdymo ryšius tik su „localhost“(numatytasis: įjungtas)

„webcontrol_localhost“įjungtas

Be to, kadangi avietės prisijungia prie interneto, rekomenduoju pakeisti numatytąjį aviečių slaptažodį

pi@raspberrypi: ~ $ passwd

Nors ssh 22 prievadas nėra nukreiptas į avietę, vis tiek.

4.2 Eikite į „FreeDNS“svetainę

4.3 Užsiregistruokite

4.4 Pridėti padomenį (nariams -> Padomeniai)

4.5 Pasirinkite DNS klientą, kurį norite įdiegti „Raspberry“(nariams -> Dinaminis DNS -> Dinaminiai DNS ištekliai -> Dinaminiai DNS klientai)

Aš pasirinkau wget_script update.sh iš Adomo Deano (puslapio apačioje)

Yra vietos rezervavimo ženklų _YOURAPIKEYHERE_ ir _YOURDOMAINHERE_. Norėdami juos gauti, eikite į (Nariams -> Dinaminis DNS)

Žemiau esančiame puslapyje rasite scenarijų pavyzdžių su savo APIKEY ir DOMAIN (pridėta 4.4). Aš paėmiau šias vertes iš „Wget Script“ir pakeičiau _YOURAPIKEYHERE_ ir _YOURDOMAINHERE_ atnaujinime.sh

4.6 Tada paleiskite update.sh avietėje. „Nslookup“gali prireikti dnsutils. Įdiekite tada:

pi@raspberrypi: ~ $ sudo apt-get dnsutils

4.7 Tada sukonfigūruokite maršrutizatorių, kad jis nukreiptų išorinio pasaulio užklausas į 8081 prievadą į aviečių IP

4.8 Rezervuokite IP savo aviečių MAC DHCP nustatyme, kad Rpi visada turėtų tą patį IP

4.9 Tada įveskite įrenginio, neprijungto prie vietinio tinklo, naršyklę:

jūsų domenas: 8081

Įveskite savo kredencialus, kuriuos apibrėžėte programoje motion.conf.

Išbandykite, kaip veikia vaizdo įrašas.

4.10, norint atnaujinti DDNS automatiškai sąrankos cron užduotį. Žr. „Quick_cron_example on“(nariams -> Dinaminis DNS)

5 žingsnis: patarimai

5.1 Būkite atidūs diegdami python paketus ant aviečių. Aš praleidau dieną derindamas tai - problema buvo ta, kad scenarijus iš konsolės veikė gerai, bet skambinant iš judesio įvykio atšaukimo - ne. Dar blogiau buvo tai, kad pastaruoju atveju scenarijaus pėdsakų nebuvo.

Priežastis buvo ta, kad vadovaudamasis vadovu, įdiegiau paketus „pi“vartotojui (kuris pagal numatytuosius nustatymus yra kataloge /home /pi ir apribotas kitiems vartotojams), tačiau norint paleisti scenarijų kaip „motion“paslaugos antrąjį paketą, paketai turi būti prieinamas ir „judesio“vartotojui. Taigi galiausiai tai ištaisiau įdiegdamas paketus kaip

sudo pip3 …

Tai nėra tinkamas būdas, kuris vis dar veikia. Diegimas be „sudo“kaip „pip3“-sistema dėl kokių nors priežasčių man davė klaidų.

Atitinkamai scenarijus taip pat vadinamas sudo (žr. Motion.conf).

Šio trikčių šalinimo metu aš padariau daug nereikalingų pakeitimų ir nesu tikras, kas yra būtina, o dabar tingiu juos pamažu atkurti ir pamatyti, kada jis nustos veikti. Visų pirma suteiktos judesio administratoriaus teisės:

pi@raspberrypi: ~ $ grupės judesys

motion: motion adm sudo audio video users netdev pi

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

pi VISI = (VISI) NEPASSWD: VISI

judesys ALL = (ALL) NOPASSWD: ALL

Taip pat buvo keičiami failų savininkai ir leidimai, panašūs į įkėlimą į „Google“diską. Tikriausiai tai gali jums padėti, jei turite panašią problemą.

5.2 „Google“nuotraukų API leidžia pridėti failus tik prie bendrinamų albumų, kad visi, turintys nuorodą, galėtų ją pasiekti. Nebendrinkite jo naudodami nuorodą ir ištrinkite senus filmus arba perkelkite juos į šiukšliadėžę arba iš albumo. Pastaruoju atveju jie lieka sąskaitoje.

5.3 „Google“nuotraukų asistentas aptinka veidus, o tai yra labai naudinga, jei fotoaparato kokybė yra gera. Kaip premiją jis sukuria išgalvotas žiniasklaidos kompiliacijas ir-g.webp

5.4 Bandžiau naudoti 4G LTE USB modemą prieigai prie interneto ir štai mano rezultatai. 5.4.1 „Huawei E3372h-153“veikia su avietėmis be jokių problemų ir papildomos programinės įrangos. Yra https://howtoraspberrypi.com/create-a-wi-fi-hotspot-in-less-than-10-minutes-with-pi-raspberry/ tikrai lengvas vadovas, kaip tai padaryti naudojant „RaspAP“. 5.4.3 Dinaminis DNS neveikė mano mobiliojo ryšio 4G tinkle. Yra paaiškinimas, kodėl

5.5 Panaudojus šią sistemą porą savaičių paaiškėjo, kad nors vaizdo įrašus patogiau peržiūrėti ir įkelti, „Google“nuotraukos geriau veikia su vaizdais. Pvz., Tai leidžia daiktus/veidus grupuoti tik analizuojant vaizdus ir tik tada ieškoti veidų/daiktų iš vaizdo įrašuose esančių vaizdų, bet ne priešingai. Taigi aš išbandysiu vaizdus, įkeliančius gana vaizdo įrašus.

Rekomenduojamas: