Съдържание:

Raspberry Pi Linux Motion Интеграция с Google Снимки: 5 стъпки
Raspberry Pi Linux Motion Интеграция с Google Снимки: 5 стъпки

Видео: Raspberry Pi Linux Motion Интеграция с Google Снимки: 5 стъпки

Видео: Raspberry Pi Linux Motion Интеграция с Google Снимки: 5 стъпки
Видео: Leap Motion SDK 2024, Ноември
Anonim
Raspberry Pi Linux Motion Интеграция с Google Снимки
Raspberry Pi Linux Motion Интеграция с Google Снимки

Идеята е да качите снимки и видеоклипове, направени с камера с активирано движение, свързана към Raspberry Pi, за да качите файлове в облак. Софтуерът „Motion“поддържа качване в Google Диск чрез PyDrive. В тази статия „Motion“се използва за качване в Google Photos.

Хардуер:

Малина Pi 3B+

USB уеб камера Logitech C920

Изборът на хардуер не беше определен, просто взех това, което беше под ръка.

Предпоставки:

За удобство Raspberry pi трябва да е във вашата локална мрежа - да го контролирате без монитор/клавиатура и да качвате/изтегляте файлове. За целта трябва да имате ssh агент на вашия компютър (например шпакловка).

Много благодаря на ssandbac за страхотен урок. Ако имате нужда от повече информация как да настроите среда, вижте тази статия. Заех инсталация на движение и стъпки за конфигуриране от нея и добавих някои промени. По -специално, вместо да изпраща имейли на файлове и сигнали, този пример използва качване в споделен албум на снимки на Google и получаване на известия като „добавени снимки“в лентата за известия.

Ето стъпките:

Стъпка 1: Инсталирайте Linux Motion на Raspberry

По -специално в този пример е използвано движение v4.0.

1.1 Актуализиране на pi

pi@raspberrypi: ~ $ sudo apt-get update

pi@raspberrypi: ~ $ sudo apt-get ъпгрейд

1.2 Изтеглете движение

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

1.3 Сега редактирайте този файл със следните промени

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

# Стартирайте в демонов (фонов) режим и освободете терминала (по подразбиране: изключен)

демон на

# Използвайте файл, за да запишете дневници, ако не е дефиниран stderr и се използва syslog. (по подразбиране: не е дефинирано)

logfile /var/log/motion/motion.log

# Ширина на изображението (пиксели). Валиден диапазон: Зависи от камерата, по подразбиране: 352

ширина 1920

# Височина на изображението (пиксели). Валиден диапазон: Зависи от камерата, по подразбиране: 288

височина 1080

# Максимален брой кадри, които трябва да бъдат заснети в секунда.

честота на кадрите 30

# Определя броя на предварително заснетите (буферирани) снимки от преди движение

pre_capture 5

# Брой кадри за заснемане след движение вече не се открива

post_capture 5

# Извеждане на „нормални“снимки при откриване на движение (по подразбиране: включено)

output_pictures изключен

# Качеството (в проценти), което да се използва от jpeg компресията

качество 100

# Използвайте ffmpeg за кодиране на филми в реално време

ffmpeg_output_movies изключено

# или диапазон 1 - 100, където 1 означава най -лошото качество, а 100 е най -доброто.

ffmpeg_variable_bitrate 100

# Когато създавате видеоклипове, кадрите трябва да се дублират по ред

ffmpeg_duplicate_frames false

# Bool за активиране или деактивиране на extpipe (по подразбиране: изключено)

use_extpipe е включен

extpipe ffmpeg -y -f rawvideo -pix_fmt yuv420p -video_size %wx %h -framerate %fps -i тръба: 0 -vcodec libx264 -preset ultrafast -f mp4 %f.mp4

target_dir/var/lib/motion

# Команда, която да се изпълни, когато файл с филм

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

Оставете последния с точка и запетая засега (коментиран), за да коментирате, след като се уверите, че видеозаписът и качването работят.

1.4 След това сменете

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

pi@raspberrypi: ~ $ start_motion_daemon = да

Стъпка 2: Настройка на Google Photos API за Python

Настройка на Google Photos API за Python
Настройка на Google Photos API за Python
Настройка на Google Photos API за Python
Настройка на Google Photos API за Python

2.1 Препоръчително е да създадете нов акаунт за тази цел, за да споделите албум с основния си, за да получавате известия, когато се добавят нови файлове, плюс повече място за съхранение. Активирайте Google Photos API за акаунта, който ще използвате за качване.

След това трябва да имате файл credentials.json.

2.2 Настройка на Python среда

По принцип настройката на околната среда се изисква само на малината. Но това изисква разрешение за oauth, което е по -удобно да се извърши на компютър. За да направите това на малинка, трябва да свържете монитор/клавиатура към нея или да настроите някой потребителски интерфейс за отдалечен работен плот. Току -що инсталирах една и съща среда и на малинка, и на компютър. Така че стъпките 2.2.1..2.2.3 са направени на компютър, 2.2.1, 2.2.2, 2.2.5, 2.2.6 на Rpi

2.2.1 инсталирайте Python 3

2.2.2 Инсталирайте google api пакети според ръководството*(вижте 5.1)

На компютър

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

На малина

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

2.2.3 Вижте качването на скрипт в google photos.. Той е поставен на моя github. Поставете го в същата директория с credentials.json.

2.2.4 Направете снимка и тествайте качването

python3 photos.py image.jpg

Инсталирайте липсващи зависимости, ако има такива, и опитайте отново. В резултат на това трябва да получите token.pickle в директорията на скрипта, а също и нов споделен албум, създаден във вашия уеб интерфейс на Google Photos с image.jpg. С получаването на token.pickle вече не се нуждаете от credentials.json за photos.py в същата директория.

2.2.5 Споделете албума с акаунта за това, което искате да получавате известия за нови медии. Добавете този акаунт към телефона си.

2.2.6 Поставете photos.py и token.pickle в/var/lib/motion върху малината. Потребителят на „pi“не може да пише в директорията на „motion’s“, така че първо да го качите в /home /pi

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

След това влезте в малинка и преместете файловете под sudo

ssh pi@IP

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

2.2.7 Проверете как работи качването на малинка. Направете снимка с fswebcam и се опитайте да я качите

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

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

В албума „helloworld“и известие в лентата на телефона трябва да има image.jpg.

Стъпка 3: Тествайте

3.1 Стартирайте услугата Motion

pi@raspberrypi: ~ $ sudo service start start

Можете да промените командата на „стоп“или „рестартиране“

3.2 Активирайте регистрационните файлове за движение

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

3.2 Вижте изхода на камерата на друго устройство, свързано към същата локална мрежа. Въведете в браузъра:

IP: 8081

3.3 Гледането на регистрационните файлове изчакайте, докато движението бъде открито и файлът NAME.mp4 е записан в/var/lib/motion. След това стартирайте ръчно качване на скрипт

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

Проверете следите на python. Изчакайте, докато event_end се появи в motion.log. След това отидете в албума „helloworld“във вашите снимки в Google и проверете дали има качено видео.

3.4 Ако качването е успешно, разкоментирайте в /etc/motion.conf реда:

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

# Команда, която да се изпълни, когато файлът с филм е готов

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

pi@raspberrypi: ~ $ синхронизиране

pi@raspberrypi: ~ $ sudo рестартиране на движение на услугата

3.5 Разглеждане на дневниците за движение и в албума проверете дали видеоклипът е качен автоматично.

3.6 По желание споделете албума с основния си акаунт, за да получавате известия, когато се добавят новият видеоклип или снимка.

Стъпка 4: По избор: Конфигурирайте уеб достъпа до поточна камера в реално време

По избор: Конфигурирайте уеб достъпа до поточна камера в реално време
По избор: Конфигурирайте уеб достъпа до поточна камера в реално време
По избор: Конфигурирайте уеб достъпа до поточна камера в реално време
По избор: Конфигурирайте уеб достъпа до поточна камера в реално време
По избор: Конфигурирайте уеб достъпа до поточна камера в реално време
По избор: Конфигурирайте уеб достъпа до поточна камера в реално време

Тази стъпка се основава на урока Parreno на Michel. Просто избрах FreeDNS вместо NoIP, както се препоръчва тук.

4.1 Конфигурирайте разрешен достъп до сървър за движение на поточно видео:

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

# Задайте метода за удостоверяване (по подразбиране: 0)

# 0 = забранено

# 1 = Основно удостоверяване

# 2 = MD5 дайджест (по -безопасното удостоверяване)

метод на поток_аут 2

# Удостоверяване за потока. Потребителско име за синтаксис: парола

# По подразбиране: не е дефинирано (забранено)

webcontrol_authentication потребителско име: парола

# Максимална скорост на кадрите за поточни потоци (по подразбиране: 1)

stream_maxrate 30

# Ограничете поточните връзки само до localhost (по подразбиране: включено)

stream_localhost изключен

Ако няма да използвате интерфейса за уеб управление от външна мрежа, оставете го деактивиран (по подразбиране)

# Ограничете контролните връзки само до localhost (по подразбиране: включено)

webcontrol_localhost е включен

Също така, тъй като малинката е онлайн, препоръчвам да смените паролата за малината по подразбиране

pi@raspberrypi: ~ $ passwd

Въпреки че ssh порт 22 не е пренасочен към малина, все пак.

4.2 Отидете на сайта на FreeDNS

4.3 Регистрирайте се

4.4 Добавяне на поддомейн (за членове -> поддомейни)

4.5 Изберете DNS клиент, който да инсталирате на Raspberry (За членове -> Dynamic DNS -> Synamic DNS Resources -> Dynamic DNS Clients)

Избрах wget_script update.sh от Адам Дийн (в долната част на страницата)

Има заместители _YOURAPIKEYHERE_ и _YOURDOMAINHERE_. За да ги получите, отидете на (For Members -> Dynamic DNS)

И на страницата по -долу ще намерите примери за скриптове с вашия APIKEY и DOMAIN (този, добавен в 4.4). Взех тези стойности от Wget Script и замених _YOURAPIKEYHERE_ и _YOURDOMAINHERE_ в update.sh

4.6 След това стартирайте update.sh на малинка. Може да изисква dnsutils за nslookup. След това го инсталирайте:

pi@raspberrypi: ~ $ sudo apt-get dnsutils

4.7 След това конфигурирайте вашия рутер да пренасочва заявки за външен свят към порт 8081 към ip на малината

4.8 Запазете ip за MAC на вашата малинка в настройката DHCP, така че Rpi винаги да има един и същ ip

4.9 След това въведете в браузъра на устройство, което не е свързано към локалната мрежа:

вашиядомен: 8081

Въведете вашите идентификационни данни, които сте дефинирали в motion.conf.

Тествайте как работи видеото.

4.10 с цел актуализиране на DDNS автоматично настройване на cron задача. Вижте quick_cron_example on (For Members -> Dynamic DNS)

Стъпка 5: Съвети

5.1 Бъдете внимателни при инсталирането на пакети на python на малинка. Прекарах един ден в отстраняване на грешки в това - проблемът беше, че от конзолата скриптът работи добре, но извикването от обратно извикване на събитие при движение не. Това, което го влоши, беше, че следите от сценария бяха недостъпни във втория случай.

Причината беше, че следвайки ръководството, инсталирах пакетите за потребителя „pi“(който по подразбиране е в директорията /home /pi и е ограничен за други потребители), но за да стартирам скрипта като дете на услугата „движение“, пакетите трябва да бъдат наличен и за потребител на „движение“. Така че най -накрая го поправих, като инсталирах пакетите като

sudo pip3 …

Това все още не е правилен начин. Инсталирането без sudo като pip3 -система ми даваше грешки по някаква причина.

Съответно скриптът се извиква и под sudo (вижте motion.conf).

По време на това отстраняване на неизправности направих много ненужни промени и не бях сигурен какви са необходимите, а сега твърде мързелив, за да ги върна постепенно и да видя кога ще спре да работи. По -специално, предоставени права на администратор на движение:

pi@raspberrypi: ~ $ групово движение

движение: движение adm sudo аудио видео потребители netdev pi

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

pi ALL = (ALL) NOPASSWD: ALL

движение ALL = (ALL) NOPASSWD: ALL

Също така се променяха собствениците на файлове и разрешенията, подобни на качването в Google Диск. Вероятно може да ви помогне в случай, че имате подобен проблем.

5.2 Google Photos API позволява да се добавят файлове само към споделени албуми, така че всеки с връзката да има достъп до него. Не го споделяйте чрез връзка и изтривайте стари филми или ги премествайте в кошчето или от албума. В последния случай те остават в сметката.

5.3 Google Photos Assistant разпознава лица, което е доста полезно, ако качеството на камерата е добро. Като бонус той прави фантастични медийни компилации и gifs и т.н.

5.4 Опитах се да използвам 4G LTE USB модем за достъп до интернет и ето моите резултати. 5.4.1 Huawei E3372h-153 работи с малина без проблеми и допълнителен софтуер 5.4.2 Също така е активирана гореща точка, така че Rasperry споделя интернет връзка чрез wifi. Има https://howtoraspberrypi.com/create-a-wi-fi-hotspot-in-less-than-10-minutes-with-pi-raspberry/ наистина лесно ръководство как да го направите с помощта на RaspAP. 5.4.3 Динамичният DNS не работи в 4G мрежата на моята кариера. Има обяснение защо

5.5 След като се използва тази система за няколко седмици се оказа, въпреки че видеоклиповете са по -удобни за гледане и качване, Google Photos работи по -добре с изображения. Например, позволява да се групират неща/лица само за анализиране на изображения и едва след това да се търсят лица/неща от изображенията във видеоклипове, но не и обратното. Така че ще тествам изображения, качващи по -скоро видеоклипове.

Препоръчано: