Mundarija:
2025 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2025-01-13 06:58
Fayllarni bulutga yuklash uchun Raspberry Pi -ga ulangan harakatlanuvchi kamera yordamida olingan fotosuratlar va videolarni yuklash g'oyasi. "Motion" dasturi PyDrive orqali Google Drive -ga yuklashni qo'llab -quvvatlaydi. Ushbu maqolada "Motion" Google Photos -ga yuklash uchun ishlatiladi.
Uskuna:
Raspberry Pi 3B+
Logitech C920 USB veb -kamerasi
Uskunani tanlash aniqlanmagan, men qo'limdagini oldim.
Old shartlar:
Qulaylik uchun Raspberry pi sizning mahalliy tarmog'ingizda bo'lishi kerak - uni monitor/klaviaturasiz boshqarish va fayllarni yuklash/yuklab olish. Buning uchun kompyuteringizda ssh agenti bo'lishi kerak (masalan, macun).
Ajoyib darslik uchun ssandbacga katta rahmat. Agar sizga muhitni sozlash haqida ko'proq ma'lumot kerak bo'lsa, ushbu maqolani o'qing. Men harakatni o'rnatish va undan qadamlarni sozlash uchun qarz oldim va ba'zi o'zgarishlarni qo'shdim. Xususan, bu misol fayllar va ogohlantirishlarni elektron pochta orqali yuborish o'rniga, Google albomlarining umumiy albomini yuklash va xabarlar panelida "qo'shilgan rasmlar" kabi bildirishnomalarni olishdan foydalanadi.
Mana, qadamlar:
1 -qadam: Raspberry -ga Linux Motion -ni o'rnating
Ayniqsa, bu misolda v4.0 harakati ishlatilgan.
1.1 pi -ni yangilang
pi@raspberrypi: ~ $ sudo apt-get yangilanishi
pi@raspberrypi: ~ $ sudo apt-get upgrade
1.2 Yuklab olish harakati
pi@raspberrypi: ~ $ sudo apt-get install motion
1.3 Endi ushbu faylni quyidagi o'zgartirishlar bilan tahrir qiling
pi@raspberrypi: ~ $ sudo nano /etc/motion/motion.conf
# Daemon (fon) rejimida boshlang va terminalni chiqaring (standart: o'chirilgan)
demon yoqilgan
# Agar belgilangan bo'lmasa stderr va syslog ishlatilsa, jurnal xabarlarini saqlash uchun fayldan foydalaning. (standart: aniqlanmagan)
logfile /var/log/motion/motion.log
# Rasm kengligi (piksel). Yaroqli diapazon: Kameraga bog'liq, standart: 352
kengligi 1920
# Rasm balandligi (piksel). Yaroqli diapazon: Kameraga bog'liq, standart: 288
balandligi 1080
# Sekundiga olinadigan maksimal kadrlar soni.
kadrlar soni 30
# Harakatdan oldin olingan (buferlangan) rasmlar sonini belgilaydi
oldindan yozib olish 5
# Harakatdan keyin olinadigan kadrlar soni endi aniqlanmaydi
post_capture 5
# Harakat aniqlanganda "oddiy" rasmlarni chiqarish (standart: yoqilgan)
chiqish_rasmlari o'chirilgan
# Jpegni siqishda ishlatiladigan sifat (foizda)
sifat 100
# Filmlarni real vaqtda kodlash uchun ffmpeg -dan foydalaning
ffmpeg_output_movies o'chirilgan
# yoki 1 - 100 oralig'i, bu erda 1 - eng yomon sifat, 100 - eng yaxshisi.
ffmpeg_variable_bitrate 100
# Video yaratishda ramkalar tartibda takrorlanishi kerak
ffmpeg_duplicate_frames noto'g'ri
Extpipe -ni yoqish yoki o'chirish uchun # Bool (standart: o'chirilgan)
use_extpipe -ni yoqing
extpipe ffmpeg -y -f rawvideo -pix_fmt yuv420p -video_size %wx %h -framerate %fps -i trubkasi: 0 -vcodec libx264 -ultra tezkor -f mp4 %f.mp4
target_dir/var/lib/harakat
# Kino fayli bajarilganda bajariladigan buyruq
; on_movie_end sudo python3 /var/lib/motion/photos.py %f.mp4 &
Oxirgi nuqtani nuqta -vergul bilan qoldiring (sharhlangan), video yozish va yuklash ishlayotganiga ishonch hosil qiling.
1.4 Keyin o'zgartiring
pi@raspberrypi: ~ $ sudo nano/etc/default/motion
pi@raspberrypi: ~ $ start_motion_daemon = ha
2 -qadam: Python uchun Google Photos API -ni o'rnating
2.1 Yangi fayllar qo'shilganda va qo'shimcha saqlash joyida xabarlar olish uchun albomni asosiy albom bilan bo'lishish uchun yangi hisob yaratish tavsiya etiladi. Yuklash uchun foydalanmoqchi bo'lgan hisob uchun Google Photos API -ni yoqing.
Shundan so'ng credentials.json fayli bo'lishi kerak.
2.2 Python muhitini sozlash
Asosan, muhitni sozlash faqat malinada talab qilinadi. Ammo bu kompyuterda bajarish uchun qulayroq bo'lgan avtorizatsiyani talab qiladi. Buni malinada qilish uchun unga monitor/klaviaturani ulash yoki masofadan ish stoli interfeysini o'rnatish kerak. Men malina va kompyuterda bir xil muhitni o'rnatdim. Shunday qilib, 2.2.1..2.2.3 bosqichlari kompyuterda, 2.2.1, 2.2.2, 2.2.5, 2.2.6 da Rpi da bajarildi.
2.2.1 Python 3 ni o'rnating
2.2.2 Google api paketlarini qo'llanmaga muvofiq o'rnating*(5.1 ga qarang)
Kompyuterda
pip3 install-google-api-python-client google-auth-httplib2 google-auth-oauthlib-ni yangilang
Malinada
pi@raspberrypi: ~ $ sudo pip3 install-google-api-python-client google-auth-httplib2 google-auth-oauthlib-ni yangilang
2.2.3 Google rasmlariga skript yuklanishini tekshiring.. U mening gitubimga joylashtirilgan. Uni credentials.json bilan bir xil katalogga qo'ying.
2.2.4 Rasmga oling va yuklashni test qiling
python3 rasmlar.py image.jpg
Agar mavjud bo'lsa, yo'qolgan bog'liqliklar o'rnating va qaytadan urining. Natijada siz skript katalogida token.pickle -ni, shuningdek Google Photos veb -interfeysida image-j.webp
2.2.5 Albomni yangi ommaviy axborot vositalari haqida xabarlar olishni xohlagan hisobingiz bilan baham ko'ring. Bu hisobni telefoningizga qo'shing.
2.2.6 malina ustida photos.py va token.pickle ni/var/lib/motion ga qo'ying. "Pi" foydalanuvchisi "harakat" diriga yozolmaydi, shuning uchun avval /home /pi ga yuklang
scp photos.py token.pickle pi@IP:/home/pi
Keyin malinaga kiring va fayllarni sudo ostiga o'tkazing
ssh pi@IP
pi@raspberrypi: ~ $ sudo mv photos.py token.pickle/var/lib/motion
2.2.7 Malinaga yuklash qanday ishlashini tekshiring. Fswebcam yordamida rasm oling va uni yuklashga harakat qiling
pi@raspberrypi: ~ $ sudo fswebcam /var/lib/motion/image.jpg
pi@raspberrypi: ~ $ sudo python3 /var/lib/motion/photos.py /var/lib/motion/image.jpg
"Helloworld" albomida image-j.webp
3 -qadam: Sinov
3.1 Motion xizmatini ishga tushirish
pi@raspberrypi: ~ $ sudo xizmati harakatining boshlanishi
Siz buyruqni "to'xtatish" yoki "qayta boshlash" ga o'zgartirishingiz mumkin.
3.2 Harakat jurnallarini yoqish
pi@raspberrypi: ~ $ tail -f /var/log/motion/motion.log
3.2 Xuddi shu mahalliy tarmoqqa ulangan boshqa qurilmadagi kamera chiqishini ko'rish. Brauzerga kiring:
IP: 8081
3.3 Jurnallarga qarab, harakat aniqlanmaguncha va NAME.mp4 fayli/var/lib/motion formatida yozilishini kuting. Keyin skriptni qo'lda yuklashni boshlang
pi@raspberrypi: ~ $ sudo python3 /var/lib/motion/photos.py /var/lib/motion/NAME.mp4
Python izlarini tekshiring. Event_end harakati.log paydo bo'lguncha kuting. Keyin Google rasmlaringizdagi "helloworld" albomiga o'ting va yuklangan video borligini tekshiring.
3.4 Agar yuklash muvaffaqiyatli bo'lsa /etc/motion.conf satriga yozib qo'ying:
pi@raspberrypi: ~ $ sudo nano /etc/motion.conf
# Kino fayli tayyor bo'lganda bajariladigan buyruq
on_movie_end sudo python3 /var/lib/motion/photos.py %f.mp4 &
pi@raspberrypi: ~ $ sinxronlash
pi@raspberrypi: ~ $ sudo xizmatining harakatini qayta boshlash
3.5 Harakat jurnallariga qarab va albomda videoning avtomatik yuklanganligini tekshiring.
3.6 Majburiy emas, yangi video yoki rasm qo'shilganda xabarnoma olish uchun albomni asosiy hisob qaydnomangiz bilan baham ko'ring.
4 -qadam: Majburiy emas: Internetga kirishni real vaqtda oqim kamerasiga sozlang
Bu qadam Mishelning Parreno darsligiga asoslangan. Men bu erda tavsiya etilganidek NoIP o'rniga FreeDNS ni tanladim.
4.1 Video oqim harakati serveriga ruxsat berilgan kirishni sozlang:
pi@raspberrypi: ~ $ sudo nano /etc/motion/motion.conf
# Autentifikatsiya usulini o'rnating (standart: 0)
# 0 = o'chirilgan
# 1 = Asosiy autentifikatsiya
# 2 = MD5 hazm qilish (xavfsizroq autentifikatsiya)
oqim_auth_ usuli 2
# Oqim uchun autentifikatsiya. Sintaksis foydalanuvchi nomi: parol
# Standart: aniqlanmagan (O'chirilgan)
webcontrol_authentication foydalanuvchi nomi: parol
# Oqim oqimlari uchun maksimal tezlik (standart: 1)
oqim_maxrati 30
# Oqim ulanishlarini faqat localhost bilan cheklash (standart: yoqilgan)
stream_localhost o'chirilgan
Agar siz tashqi tarmoqdan veb -boshqaruv interfeysidan foydalanmoqchi bo'lmasangiz, uni o'chirib qo'ying (sukut bo'yicha).
# Boshqaruv ulanishlarini faqat localhost bilan cheklash (standart: yoqilgan)
webcontrol_localhost yoqilgan
Bundan tashqari, malina Internetga kirganligi sababli, men malinali standart parolni o'zgartirishni maslahat beraman
pi@raspberrypi: ~ $ passwd
22 -ssh porti malinaga qayta yo'naltirilmagan bo'lsa -da.
4.2 FreeDNS saytiga o'ting
4.3 Ro'yxatdan o'tish
4.4 Subdomain qo'shish (A'zolar uchun -> Subdomainlar)
4.5 Raspberry -ga o'rnatish uchun DNS mijozini tanlang (A'zolar uchun -> Dinamik DNS -> Dinamik DNS manbalari -> Dinamik DNS mijozlari)
Men Adam Din dan wget_script update.sh ni tanladim (sahifaning pastki qismida)
_YOURAPIKEYHERE_ va _YOURDOMAINHERE_ kabi joy egalari bor. Ularni olish uchun (A'zolar uchun -> Dinamik DNS) ga o'ting.
Quyidagi sahifada siz APIKEY va DOMAIN (4.4 ga qo'shilgan) bilan skriptlar misollarini topasiz. Men bu qiymatlarni Wget skriptidan olib, update.sh da _YOURAPIKEYHERE_ va _YOURDOMAINHERE_ ni almashtirdim.
4.6 Keyin malina ustida update.sh -ni ishga tushiring. Nslookup uchun dnsutils kerak bo'lishi mumkin. Keyin o'rnating:
pi@raspberrypi: ~ $ sudo apt-get dnsutils
4.7 Keyin yo'riqchingizni tashqi dunyo so'rovlarini 8081 portiga malina ipiga yo'naltirish uchun sozlang.
4.8 Malinali MAC uchun IPni DHCP sozlamasida saqlang, shunda Rpi har doim bir xil bo'ladi
4.9 Lokal tarmoqqa ulanmagan qurilmaga brauzerni kiriting:
Sizning domeningiz: 8081
Motion.conf -da aniqlagan hisob ma'lumotlarini kiriting.
Video qanday ishlashini tekshiring.
4.10 DDNS -ni yangilash uchun cron vazifasini avtomatik ravishda o'rnatadi. Quick_cron_example -ni ko'ring (A'zolar uchun -> Dinamik DNS)
5 -qadam: Maslahatlar
5.1 Malinaga python paketlarini o'rnatishda ehtiyot bo'ling. Men bir kunni disk raskadrovka qildim - muammo shundaki, konsoldan skript yaxshi ishlagan, lekin harakatdan qayta qo'ng'iroq qilish chaqirilmagan. Eng yomoni shundaki, ssenariydan izlar ikkinchi holatda mavjud emas edi.
Buning sababi shundaki, men ko'rsatmaga binoan "pi" foydalanuvchisi uchun paketlarni o'rnatdim (u sukut bo'yicha /home /pi katalogida va boshqa foydalanuvchilar uchun cheklangan), lekin "harakat" xizmatining bolasi sifatida skriptni ishlatish uchun paketlar bo'lishi kerak. "harakat" foydalanuvchisi uchun ham mavjud. Nihoyat, men uni paketlarni o'rnatishni o'rnatdim
sudo pip3…
Bu to'g'ri usul emas, u hali ham ishlaydi. Sudo -ni pip3 -system sifatida o'rnatish negadir menga xatolar berdi.
Shunga ko'ra, skript sudo ostida ham chaqiriladi (qarang motion.conf).
Nosozliklarni tuzatish paytida men juda ko'p keraksiz o'zgarishlarni qildim va nima kerakligini bilmay qoldim va endi ularni asta -sekin orqaga qaytarish va qachon ishlamay qolishini ko'rish juda dangasa. Ayniqsa, ma'muriy huquqlar berilgan:
pi@raspberrypi: ~ $ guruhlar harakati
harakat: harakat adm sudo audio video foydalanuvchilar netdev pi
pi@raspberrypi: ~ $ sudo cat /etc/sudoers.d/010_pi-nopasswd
pi ALL = (ALL) NOPASSWD: HAMMA
harakat ALL = (ALL) NOPASSWD: ALL
Bundan tashqari, fayllar egalari va Google Drive -ga yuklashga o'xshash ruxsatlar o'zgartirildi. Ehtimol, bu sizga o'xshash muammoga duch kelganda sizga yordam berishi mumkin.
5.2 Google Photos API fayllarni faqat umumiy albomlarga qo'shish imkonini beradi, shunda havolaga ega bo'lganlar unga kira oladi. Uni havola orqali baham ko'rmang va eski filmlarni o'chirmang, axlat qutisiga yoki albomga ko'chirmang. Ikkinchi holda, ular hisobda qoladi.
5.3 Google rasmlar yordamchisi yuzlarni aniqlaydi, bu kamera sifati yaxshi bo'lsa juda foydali. Bonus sifatida u ajoyib ommaviy axborot vositalarini kompilyatsiya va sovg'alar turiga aylantiradi.
5.4 Men Internetga kirish uchun 4G LTE USB-modemidan foydalanishga harakat qildim va bu mening natijalarim. 5.4.1 Huawei E3372h-153 malina bilan muammosiz va qo'shimcha dasturiy ta'minotsiz ishlaydi 5.4.2 Shuningdek, hotspot yoqilgan, shuning uchun Rasperry Wi-Fi orqali Internetga ulandi. Https://howtoraspberrypi.com/create-a-wi-fi-hotspot-in-less-than-10-minutes-with-pi-raspberry/ buni RaspAP yordamida qanday qilish kerakligi haqida juda oson ko'rsatma mavjud. 5.4.3 Dinamik DNS mening karimning 4G tarmog'ida ishlamadi. Buning sababini tushuntirish bor
5.5 Bir necha hafta davomida ushbu tizimdan foydalangandan so'ng, videolarni ko'rish va yuklash qulayroq bo'lsa -da, Google Photos tasvirlar bilan yaxshi ishlaydi. Masalan, bu narsalar/yuzlarni guruhlarga ajratishga imkon beradi, faqat tasvirlarni tahlil qiladi va shundan keyingina videodagi tasvirlardan yuzlarni/narsalarni qidiradi, lekin aksincha emas. Shunday qilib, men videolarni yuklaydigan rasmlarni sinab ko'raman.