Raspberry Pi Linux Motion Pagsasama ng Google Photos: 5 Hakbang
Raspberry Pi Linux Motion Pagsasama ng Google Photos: 5 Hakbang
Anonim
Raspberry Pi Linux Motion Pagsasama ng Google Photos
Raspberry Pi Linux Motion Pagsasama ng Google Photos

Ang ideya ay mag-upload ng mga larawan at video na ginawa gamit ang galaw na aktibo ng cam na konektado sa Raspberry Pi upang mag-upload ng mga file sa isang ulap. Sinusuportahan ng software na 'Motion' ang pag-upload sa Google Drive sa pamamagitan ng PyDrive. Sa artikulong ito ang 'Motion' ay ginagamit upang mag-upload sa Google Photos.

Hardware:

Raspberry Pi 3B +

USB Webcam Logitech C920

Ang pagpili ng hardware ay hindi natutukoy, kinuha ko lang kung ano ang nasa kamay.

Mga Pangangailangan:

Para sa kaginhawaan ang Raspberry pi ay dapat nasa iyong lokal na network - upang makontrol ito nang walang monitor / keyboard at mag-upload / mag-download ng mga file. Para dito dapat kang magkaroon ng ssh agent sa iyong PC (hal. Masilya).

Maraming salamat sa ssandbac para sa isang mahusay na tutorial. Kung kailangan mo ng karagdagang impormasyon sa kung paano mag-setup ng kapaligiran tingnan ang artikulong ito. Nanghiram ako ng pag-install ng paggalaw at pag-configure ng mga hakbang mula rito at nagdagdag ng ilang mga pagbabago. Sa partikular, sa halip na mag-email ng mga file at alerto ang halimbawang ito ay gumagamit ng pag-upload sa mga larawan sa google na nakabahaging album at makakuha ng mga notification na uri ng "idinagdag na mga larawan" sa notification bar.

Narito ang mga hakbang:

Hakbang 1: I-install ang Linux Motion sa Raspberry

Partikular sa halimbawang ito ay ginamit ang paggalaw v4.0.

1.1 I-update ang pi

pi @ raspberrypi: ~ $ sudo apt-get update

pi @ raspberrypi: ~ $ sudo apt-get upgrade

1.2 Pag-download ng paggalaw

pi @ raspberrypi: ~ $ sudo apt-get galaw ng pag-install

1.3 Ngayon i-edit ang file na ito sa mga sumusunod na pagbabago

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

# Magsimula sa daemon (background) mode at palabasin ang terminal (default: off)

daemon sa

# Gumamit ng isang file upang makatipid ng mga mensahe ng log, kung hindi tinukoy na stderr at syslog ang ginamit. (default: hindi tinukoy)

logfile /var/log/motion/motion.log

# Lapad ng imahe (mga pixel). Valid na saklaw: Nakasalalay ang camera, default: 352

lapad 1920

# Taas ng imahe (mga pixel). Valid na saklaw: Nakasalalay ang camera, default: 288

taas 1080

# Maximum na bilang ng mga frame na makukuha bawat segundo.

balangkas 30

# Tinutukoy ang bilang ng mga pre-capture (buffered) na mga larawan mula sa bago ang paggalaw

pre_capture 5

# Bilang ng mga frame upang makuha pagkatapos ng paggalaw ay hindi na nakita

post_capture 5

# Mga output na 'normal' na larawan kapag nakita ang paggalaw (default: on)

output_pictures naka-off

# Ang kalidad (sa porsyento) na magagamit ng compression ng jpeg

kalidad 100

# Gumamit ng ffmpeg upang ma-encode ang mga pelikula sa realtime

naka-off ang ffmpeg_output_movies

# o ang saklaw na 1 - 100 kung saan ang 1 ay nangangahulugang pinakamasamang kalidad at ang 100 ang pinakamahusay.

ffmpeg_variable_bitrate 100

# Kapag lumilikha ng mga video, dapat ba na doble ang mga frame sa pagkakasunud-sunod

mali angmpmpeg_duplicate_frames

# Bool upang paganahin o huwag paganahin ang extpipe (default: off)

use_extpipe sa

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 / paggalaw

# Command na naisakatuparan kapag isang file ng pelikula

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

Iwanan ang huli sa isang kalahating titik sa ngayon (nagkomento) sa pagkabalisa matapos matiyak na gumagana ang pag-record ng video at pag-upload.

1.4 Pagkatapos baguhin

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

pi @ raspberrypi: ~ $ start_motion_daemon = oo

Hakbang 2: I-set up ang Google Photos API para sa Python

I-setup ang Google Photos API para sa Python
I-setup ang Google Photos API para sa Python
I-setup ang Google Photos API para sa Python
I-setup ang Google Photos API para sa Python

2.1 Inirerekumenda na lumikha ng isang bagong account para sa hangaring ito na magbahagi ng isang album sa iyong pangunahing upang makakuha ng mga abiso kapag idinagdag ang mga bagong file, kasama ang higit pang espasyo sa imbakan. Paganahin ang Google Photos API para sa account na iyong gagamitin para sa pag-upload.

Dapat ay mayroon kang mga kredensyal.json file pagkatapos nito.

2.2 Pag-setup ng kapaligiran sa Python

Talaga ang pag-set up ng kapaligiran ay kinakailangan lamang sa raspberry. Ngunit nangangailangan ito ng pahintulot sa oauth na mas maginhawa upang magawa sa PC. Upang gawin ito sa raspberry kailangan mong ikonekta ang monitor / keyboard dito o mag-setup ng ilang remote desktop UI. Nag-install lamang ako ng parehong kapaligiran sa raspberry at PC pareho. Kaya ang mga hakbang na 2.2.1..2.2.3 ay ginawa sa PC, 2.2.1, 2.2.2, 2.2.5, 2.2.6 sa Rpi

2.2.1 i-install ang Python 3

2.2.2 I-install ang mga pakete ng google api alinsunod sa manu-manong * (tingnan ang 5.1)

Sa PC

i-install ang pip3 - i-upgrade ang google-api-python-client google-auth -uonplib2 google-auth-oauthlib

Sa raspberry

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

2.2.3 Suriin ang pag-upload ng script sa mga larawan sa google.. Nakalagay ito sa aking github. Ilagay ito sa parehong direktoryo na may mga kredensyal. Json.

2.2.4 Kumuha ng ilang larawan at subukan ang pag-upload

python3 photos.py image.jpg

Mag-install ng mga nawawalang dependency kung mayroon at subukang muli. Bilang isang resulta dapat kang makakuha ng token.pickle sa direktoryo ng script at isang bagong nakabahaging album na nilikha sa iyong Google Photos web interface na may imahe.jpg. Habang nakakakuha ka ng token.pickle hindi mo na kailangan ng mga kredensyal.json para sa photos.py sa parehong direktoryo na.

2.2.5 Ibahagi ang album sa account sa kung ano ang nais mong makakuha ng mga abiso sa bagong media na idinagdag. Idagdag ang account na ito sa iyong telepono.

2.2.6 Maglagay ng mga larawan.py at token.pickle in / var / lib / paggalaw sa raspberry. Ang gumagamit ng 'pi' ay hindi maaaring sumulat sa mga 'motion's dir's kaya't mag-upload muna sa / home / pi

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

Pagkatapos mag-login sa raspberry at ilipat ang mga file sa ilalim ng sudo

ssh pi @ IP

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

2.2.7 Suriin kung paano gumagana ang pag-upload sa raspberry. Kumuha ng larawan kasama ng fswebcam at subukang i-upload ito

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

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

Mayroong imahe-j.webp

Hakbang 3: Pagsubok

3.1 Simulan ang serbisyo ng Paggalaw

pi @ raspberrypi: ~ $ sudo serbisyo ng pagsisimula ng paggalaw

Maaari mong baguhin ang utos na "ihinto", o "muling simulang"

3.2 Paganahin ang mga log ng paggalaw

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

3.2 Tingnan ang output ng camera sa isa pang aparato na konektado sa parehong lokal na network. Ipasok sa browser:

IP: 8081

3.3 Naghahanap sa mga log maghintay hanggang sa nakita ang kilos at ang file na NAME.mp4 ay nakasulat sa / var / lib / paggalaw. Pagkatapos ay ilunsad nang manu-mano ang pag-upload ng script

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

Suriin ang mga bakas ng sawa. Maghintay hanggang sa magpakita ang event_end sa paggalaw.log. Pagkatapos ay pumunta sa album na "helloworld" sa iyong mga larawan sa google at suriin kung mayroong isang na-upload na video.

3.4 Kung matagumpay na na-upload ang pag-upload sa /etc/motion.conf ang linya:

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

# Ipatupad ang utos kapag handa na ang isang file ng pelikula

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

pi @ raspberrypi: ~ $ sync

pi @ raspberrypi: ~ $ sudo serbisyo ng paggalaw ng restart

3.5 Pagtingin sa mga gumagalaw na tala at sa album suriin kung awtomatikong na-upload ang video.

3.6 Opsyonal na ibahagi ang album sa iyong pangunahing account upang makakuha ng abiso kapag naidagdag ang bagong video o larawan.

Hakbang 4: Opsyonal: I-configure ang Web Access sa Real Time Streaming Camera

Opsyonal: I-configure ang Pag-access sa Web sa Real Time Streaming Camera
Opsyonal: I-configure ang Pag-access sa Web sa Real Time Streaming Camera
Opsyonal: I-configure ang Pag-access sa Web sa Real Time Streaming Camera
Opsyonal: I-configure ang Pag-access sa Web sa Real Time Streaming Camera
Opsyonal: I-configure ang Pag-access sa Web sa Real Time Streaming Camera
Opsyonal: I-configure ang Pag-access sa Web sa Real Time Streaming Camera

Ang hakbang na ito ay batay sa tutorial ng Parreno ni Michel. Pinili ko lang ang FreeDNS sa halip na ang NoIP na inirekomenda dito.

4.1 I-configure ang awtorisadong pag-access sa video streaming server ng paggalaw:

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

# Itakda ang paraan ng pagpapatotoo (default: 0)

# 0 = hindi pinagana

# 1 = Pangunahing pagpapatotoo

# 2 = MD5 digest (ang mas ligtas na pagpapatotoo)

stream_auth_method 2

# Pagpapatotoo para sa stream. Syntax username: password

# Default: hindi tinukoy (Hindi pinagana)

webcontrol_authentication username: password

# Maximum framerate para sa stream stream (default: 1)

stream_maxrate 30

# Paghigpitan ang mga koneksyon sa stream sa localhost lamang (default: on)

naka-off ang stream_localhost

Kung hindi ka gagamit ng interface ng web control mula sa panlabas na network ay iwanan itong hindi pinagana (bilang default)

# Paghigpitan ang mga koneksyon sa kontrol sa localhost lamang (default: on)

webcontrol_localhost sa

Gayundin, dahil ang online ng raspberry, inirerekumenda kong baguhin ang default na password ng raspberry

pi @ raspberrypi: ~ $ passwd

Kahit na ang ssh port 22 ay hindi na-rerout sa raspberry, pa rin.

4.2 Pumunta sa site ng FreeDNS

4.3 Mag-sign up

4.4 Magdagdag ng subdomain (Para sa Mga Miyembro -> Subdomain)

4.5 Piliin ang DNS client na mai-install sa Raspberry (Para sa Mga Miyembro -> Dynamic DNS -> Mga Mapagkukunang Synamic DNS -> Mga Dynamic na DNS Client)

Pinili ko ang wget_script update.sh mula kay Adam Dean (sa ilalim ng pahina)

May mga placeholder _YourAPIKEYHERE_ at _YOURDOMAINHERE_. Upang mapunta sila sa (Para sa Mga Miyembro -> Dynamic na DNS)

At sa pahina sa ibaba makikita mo ang mga halimbawa ng mga script kasama ang iyong APIKEY at DOMAIN (na idinagdag sa 4.4). Kinuha ko ang mga halagang ito mula sa Wget Script at pinalitan ang _YOURAPIKEYHERE_ at _YOURDOMAINHERE_ sa update.sh

4.6 Pagkatapos ay patakbuhin ang pag-update.sh sa raspberry. Maaaring mangailangan ito ng mga dnsutil para sa nslookup. I-install ito pagkatapos:

pi @ raspberrypi: ~ $ sudo apt-get dnsutils

4.7 Pagkatapos ay i-configure ang iyong router upang muling suriin ang mga panlabas na kahilingan sa mundo sa 8081 port sa raspberry’s ip

4.8 Ipareserba ang ip para sa iyong MAC ng raspberry sa setting ng DHCP upang palaging magkakaroon ng parehong ip ang Rpi

4.9 Pagkatapos ay ipasok ang browser sa isang aparato na hindi nakakonekta sa lokal na network:

yourdomain: 8081

Ipasok ang iyong mga kredensyal na tinukoy mo sa motion.conf.

Subukan kung paano gumagana ang video.

4.10 upang mai-update ang awtomatikong pag-setup ng DDNS ng gawain sa cron. Tingnan ang quick_cron_example sa (Para sa Mga Miyembro -> Dynamic na DNS)

Hakbang 5: Mga Tip

5.1 Maging matulungin sa pag-install ng mga pakete ng sawa sa raspberry. Ginugol ko ang isang araw sa pag-debug nito - ang isyu ay mula sa console ang script ay mahusay na tumakbo, ngunit ang pagtawag mula sa paggalaw ng callback ng kaganapan ay hindi. Ang nagpalala nito ay ang mga bakas mula sa script ay hindi magagamit sa huling kaso.

Ang dahilan dito ay ang pagsunod sa gabay na na-install ko ang mga pakete para sa 'pi' na gumagamit (na sa pamamagitan ng default ay nasa / home / pi direktoryo at pinaghihigpitan para sa iba pang mga gumagamit) ngunit upang patakbuhin ang script bilang isang anak ng serbisyo na 'mosyon' dapat ang mga pakete magagamit para sa gumagamit na 'galaw' din. Kaya't sa wakas ayusin ko ito sa pag-install ng mga pakete bilang

sudo pip3…

Hindi ito isang wastong paraan na gumagana pa rin. Ang pag-install nang walang sudo bilang pip3 --system ay nagbibigay sa akin ng mga error sa ilang kadahilanan.

Kaukulang ang iskrip ay tinawag din sa ilalim ng sudo (tingnan ang paggalaw.conf).

Sa panahon ng throubleshooting na ito ay gumawa ako ng maraming mga hindi kinakailangang pagbabago at hindi sigurado kung ano ang kinakailangan at ngayon ay tinatamad na ibalik ang mga ito nang paulit-ulit at makita kapag huminto ito sa paggana. Partikular, binigyan ng mga karapatan ng administrator ng mosyon:

pi @ raspberrypi: ~ $ paggalaw ng mga pangkat

galaw: galaw adm sudo mga gumagamit ng audio video netdev pi

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

pi LAHAT = (LAHAT) NOPASSWD: LAHAT

galaw LAHAT = (LAHAT) NOPASSWD: LAHAT

Gayundin ang pagbabago ng mga may-ari ng file at mga pahintulot na katulad ng pag-upload sa Google Drive. Marahil maaari itong makatulong sa iyo sa isang kaso na mayroon kang isang katulad na isyu.

Hinahayaan ng 5.2 Google Photos API na magdagdag ng mga file sa mga nakabahaging album lamang upang ma-access ito ng sinumang may link. Huwag ibahagi ito sa pamamagitan ng pag-link at tanggalin ang mga lumang pelikula o ilipat ang mga ito sa basurahan o mula sa album. Sa huli ay mananatili sila sa account.

5.3 Nakita ng katulong ng mga larawan ng Google ang mga mukha, na lubos na kapaki-pakinabang kung ang kalidad ng camera ay mabuti. Bilang isang bonus gumagawa ito ng magarbong uri ng media ng mga compilations at-g.webp

5.4 Sinubukan kong gumamit ng 4G LTE USB modem para sa pag-access sa internet at narito ang aking mga resulta.5.4.1 Gumagana ang Huawei E3372h-153 sa raspberry nang walang mga isyu at labis na software na 5.4.2 Pinapagana din ang hotspot kaya't nagbahagi ang Rasperry ng koneksyon sa internet sa pamamagitan ng wifi. Mayroong https://howtoraspberrypi.com/create-a-wi-fi-hotspot-in-less-than-10-minutes-with-pi-raspberry/ isang talagang madaling gabay kung paano ito gawin gamit ang RaspAP. 5.4.3 Hindi gumana ang Dynamic DNS sa 4G network ng aking carrie. May paliwanag kung bakit

5.5 Matapos magamit ang sistemang ito sa loob ng ilang linggo, kahit na ang mga video ay mas maginhawa upang matingnan at mai-upload, ang Google Photos ay gumagana nang mas mahusay sa mga imahe. Hal, nagbibigay-daan ito sa mga bagay / mukha na nagpapangkat ng pag-aaral ng mga imahe lamang, at pagkatapos lamang maghanap ng mga mukha / bagay mula sa mga imahe sa mga video, ngunit hindi kabaligtaran. Kaya't susubukan ko ang mga imaheng nag-a-upload ng mga video.