สารบัญ:

การรวม Google Photos ของ Raspberry Pi Linux Motion: 5 ขั้นตอน
การรวม Google Photos ของ Raspberry Pi Linux Motion: 5 ขั้นตอน

วีดีโอ: การรวม Google Photos ของ Raspberry Pi Linux Motion: 5 ขั้นตอน

วีดีโอ: การรวม Google Photos ของ Raspberry Pi Linux Motion: 5 ขั้นตอน
วีดีโอ: Backing Up motionEye to Google Drive 2024, ธันวาคม
Anonim
Raspberry Pi Linux Motion Google Photos Integration
Raspberry Pi Linux Motion Google Photos Integration

แนวคิดคือการอัปโหลดรูปภาพและวิดีโอที่สร้างด้วยกล้องเปิดใช้งานการเคลื่อนไหวที่เชื่อมต่อกับ Raspberry Pi เพื่ออัปโหลดไฟล์ไปยังระบบคลาวด์ ซอฟต์แวร์ 'Motion' รองรับการอัปโหลดไปยัง Google Drive ผ่าน 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 upgrade

1.2 ดาวน์โหลดภาพเคลื่อนไหว

pi@raspberrypi:~ $ sudo apt-get ติดตั้งการเคลื่อนไหว

1.3 ตอนนี้แก้ไขไฟล์นี้โดยมีการเปลี่ยนแปลงดังต่อไปนี้

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

# เริ่มในโหมด daemon (พื้นหลัง) และปล่อยเทอร์มินัล (ค่าเริ่มต้น: ปิด)

ภูตบน

# ใช้ไฟล์เพื่อบันทึกข้อความบันทึก หากไม่ได้กำหนด stderr และ syslog จะถูกใช้ (ค่าเริ่มต้น: ไม่ได้กำหนดไว้)

logfile /var/log/motion/motion.log

# ความกว้างของภาพ (พิกเซล) ช่วงที่ถูกต้อง: ขึ้นอยู่กับกล้อง ค่าเริ่มต้น: 352

ความกว้าง 1920

# ความสูงของภาพ (พิกเซล) ช่วงที่ถูกต้อง: ขึ้นอยู่กับกล้อง ค่าเริ่มต้น: 288

ความสูง 1080

# จำนวนเฟรมสูงสุดที่จะจับภาพต่อวินาที

อัตราเฟรม 30

# ระบุจำนวนภาพที่ถ่ายไว้ล่วงหน้า (บัฟเฟอร์) ก่อนการเคลื่อนไหว

พรี_แคปเจอร์ 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 pipe: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=yes

ขั้นตอนที่ 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 ซึ่งสะดวกกว่าที่จะทำสำเร็จบนพีซี หากต้องการทำสิ่งนี้กับราสเบอร์รี่ คุณต้องเชื่อมต่อจอภาพ/แป้นพิมพ์กับมัน หรือตั้งค่า UI เดสก์ท็อประยะไกล ฉันเพิ่งติดตั้งสภาพแวดล้อมเดียวกันบนราสเบอร์รี่และพีซีทั้งคู่ ดังนั้นขั้นตอน 2.2…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 -- อัปเกรด 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-j.webp

2.2.5 แบ่งปันอัลบั้มกับบัญชีเกี่ยวกับสิ่งที่คุณต้องการรับการแจ้งเตือนเมื่อมีสื่อใหม่ที่เพิ่มเข้ามา เพิ่มบัญชีนี้ในโทรศัพท์ของคุณ

2.2.6 ใส่ photos.py และ token.pickle ใน /var/lib/motion บนราสเบอร์รี่ ผู้ใช้ 'pi' ไม่สามารถเขียนถึง 'motion's dir'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

มีจิตวิญญาณของ image-j.webp

ขั้นตอนที่ 3: ทดสอบ

3.1 บริการสตาร์ทโมชั่น

pi@raspberrypi:~ $ sudo service เริ่มเคลื่อนไหว

คุณสามารถเปลี่ยนคำสั่งเป็น "หยุด" หรือ "เริ่มต้นใหม่"

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

ตรวจสอบร่องรอยของหลาม รอจนกระทั่ง event_end ปรากฏขึ้นใน motion.log จากนั้นไปที่อัลบั้ม "helloworld" ใน Google Photos ของคุณและตรวจสอบว่ามีการอัปโหลดวิดีโอหรือไม่

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:~ $ sync

pi@raspberrypi:~ $ sudo service เริ่มการเคลื่อนไหวใหม่

3.5 การดูบันทึกการเคลื่อนไหวและในอัลบั้ม ให้ตรวจสอบว่าวิดีโออัปโหลดโดยอัตโนมัติหรือไม่

3.6 เลือกแบ่งปันอัลบั้มกับบัญชีหลักของคุณเพื่อรับการแจ้งเตือนเมื่อมีการเพิ่มวิดีโอหรือรูปภาพใหม่

ขั้นตอนที่ 4: ตัวเลือกเสริม: กำหนดค่าการเข้าถึงเว็บเป็น Real Time Streaming Camera

ทางเลือก: กำหนดค่าการเข้าถึงเว็บเป็น Real Time Streaming Camera
ทางเลือก: กำหนดค่าการเข้าถึงเว็บเป็น Real Time Streaming Camera
ทางเลือก: กำหนดค่าการเข้าถึงเว็บเป็นกล้องสตรีมมิ่งแบบเรียลไทม์
ทางเลือก: กำหนดค่าการเข้าถึงเว็บเป็นกล้องสตรีมมิ่งแบบเรียลไทม์
ทางเลือก: กำหนดค่าการเข้าถึงเว็บเป็นกล้องสตรีมมิ่งแบบเรียลไทม์
ทางเลือก: กำหนดค่าการเข้าถึงเว็บเป็นกล้องสตรีมมิ่งแบบเรียลไทม์

ขั้นตอนนี้อิงตามบทช่วยสอน Parreno ของ Michel ฉันเพิ่งเลือก FreeDNS แทน NoIP ตามที่แนะนำที่นี่

4.1 กำหนดค่าการเข้าถึงเซิร์ฟเวอร์การเคลื่อนไหวสตรีมมิ่งวิดีโอที่ได้รับอนุญาต:

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

# ตั้งค่าวิธีการรับรองความถูกต้อง (ค่าเริ่มต้น: 0)

# 0 = ปิดการใช้งาน

# 1 = การรับรองความถูกต้องพื้นฐาน

# 2 = MD5 ไดเจสต์ (การรับรองความถูกต้องที่ปลอดภัยยิ่งขึ้น)

stream_auth_method 2

# การรับรองความถูกต้องสำหรับสตรีม ชื่อผู้ใช้ไวยากรณ์:รหัสผ่าน

# ค่าเริ่มต้น: ไม่ได้กำหนด (ปิดการใช้งาน)

webcontrol_authentication username:รหัสผ่าน

# อัตราเฟรมสูงสุดสำหรับสตรีมสตรีม (ค่าเริ่มต้น: 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 -> ไคลเอนต์ DNS แบบไดนามิก)

ฉันเลือก wget_script update.sh จาก Adam Dean (ที่ด้านล่างของหน้า)

มีตัวยึดตำแหน่ง _YOURAPIKEYHERE_ และ _YOURDOMAINHERE_ ไปที่ (สำหรับสมาชิก -> 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 บน (สำหรับสมาชิก -> Dynamic DNS)

ขั้นตอนที่ 5: เคล็ดลับ

5.1 ระมัดระวังในการติดตั้งแพ็คเกจหลามบนราสเบอร์รี่ ฉันใช้เวลาหนึ่งวันในการแก้จุดบกพร่องนี้ – ปัญหาคือจากคอนโซล สคริปต์ทำงานได้ดี แต่การถูกเรียกจากการโทรกลับของเหตุการณ์การเคลื่อนไหวกลับไม่เป็นเช่นนั้น สิ่งที่ทำให้แย่ลงคือไม่มีร่องรอยจากสคริปต์ในกรณีหลัง

เหตุผลก็คือตามคำแนะนำที่ฉันติดตั้งแพ็คเกจสำหรับผู้ใช้ 'pi' (ซึ่งโดยค่าเริ่มต้นจะอยู่ในไดเร็กทอรี /home/pi และจำกัดสำหรับผู้ใช้รายอื่น) แต่การเรียกใช้สคริปต์ในฐานะบริการย่อยของ 'motion' แพ็คเกจจะต้องเป็น มีให้สำหรับผู้ใช้ 'การเคลื่อนไหว' เช่นกัน ในที่สุดฉันก็แก้ไขการติดตั้งแพ็คเกจเป็น

sudo pip3 …

นี่ไม่ใช่วิธีที่เหมาะสมที่ยังใช้ได้ การติดตั้งโดยไม่ใช้ sudo เป็น pip3 --system ทำให้ฉันเกิดข้อผิดพลาดด้วยเหตุผลบางประการ

ตามลำดับสคริปต์เรียกว่ายังภายใต้ 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 ฉันพยายามใช้โมเด็ม USB 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 Dynamic DNS ไม่ทำงานในเครือข่าย 4G ของแครี่ของฉัน มีคำอธิบายว่าทำไม

5.5 หลังจากใช้ระบบนี้มาสองสามสัปดาห์แล้ว แม้ว่าวิดีโอจะสะดวกกว่าในการดูและอัปโหลด แต่ Google Photos ก็ทำงานได้ดีกับรูปภาพ เช่น ช่วยให้สามารถจัดกลุ่มสิ่งของ/ใบหน้าเพื่อวิเคราะห์ภาพเท่านั้น จากนั้นจึงค้นหาใบหน้า/สิ่งของจากภาพในวิดีโอได้เท่านั้น แต่ไม่ตรงกันข้าม ดังนั้นฉันจะทดสอบรูปภาพที่อัปโหลดแทนที่จะเป็นวิดีโอ

แนะนำ: