กล้องตรวจจับการเคลื่อนไหว Raspberry Pi 3 พร้อม Live Feed: 6 ขั้นตอน
กล้องตรวจจับการเคลื่อนไหว Raspberry Pi 3 พร้อม Live Feed: 6 ขั้นตอน
Anonim
กล้องตรวจจับการเคลื่อนไหว Raspberry Pi 3 พร้อม Live Feed
กล้องตรวจจับการเคลื่อนไหว Raspberry Pi 3 พร้อม Live Feed

บทนำ

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

โครงการนี้จัดเป็นหลายขั้นตอน:

  • บทนำ
  • การตั้งค่า Pi. ของคุณ
  • SSH เข้าสู่ Pi. ของคุณ
  • การส่งอีเมลที่อยู่ IP ของคุณตอนบูต
  • การติดตั้งและตั้งค่า Motion
  • การส่งอีเมลวิดีโอจากการตรวจจับการเคลื่อนไหว
  • การแก้ไขปัญหาและแหล่งที่มา

สิ่งที่คุณต้องการ:

  • A Raspberry Pi 3 รุ่น b ~~$35
  • การ์ด Micro SD ขนาด 8GB ~~$10
  • USB Webcam ~~$20 (โปรเจ็กต์นี้ใช้ Logitech HD Webcam c270)
  • สายไมโครยูเอสบี~~$5
  • ทั้ง:
  • ชุดแบตเตอรี่แบบชาร์จไฟได้ 5 โวลต์ (แบตเตอรี่สำรองโทรศัพท์) ทำให้โครงการของคุณแบบไร้สาย ~~ $20
  • หรือ
  • อะแดปเตอร์ติดผนัง usb ~~ $ 5
  • การเชื่อมต่อ WiFi

สิ่งที่คุณต้องการเข้าถึงสำหรับการตั้งค่า:

  • จอภาพ
  • เมาส์และคีย์บอร์ด
  • คอมพิวเตอร์ที่มีช่องเสียบการ์ด SD
  • ตัวแปลง Micro SD เป็นการ์ด SD (ควรมาพร้อมกับการ์ด micro SD ของคุณ)

ขั้นตอนที่ 1: การตั้งค่า Pi. ของคุณ

การตั้งค่า Pi. ของคุณ
การตั้งค่า Pi. ของคุณ

ตอนนี้มาตั้งค่า Pi. ของคุณ

ในการเริ่มต้น ตรวจสอบให้แน่ใจว่าคุณมีรายการที่จำเป็นทั้งหมดจากขั้นตอนที่แล้ว จากนั้น ทำตามขั้นตอนบนเว็บไซต์ Raspberry Pi ในการติดตั้ง Raspbian Jessie บนการ์ด Microsd ของคุณ ที่นี่

เมื่อคุณติดตั้ง Raspbian บน Pi แล้ว ก็ถึงเวลาตั้งค่าคุณสมบัติพื้นฐานบางอย่าง

WiFi

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

SSH

เครื่องมือหนึ่งที่มีประโยชน์สำหรับคุณเมื่อใช้ Pi คือตัวเลือกในการออกคำสั่งไปยัง Pi ในสิ่งที่เรียกว่าการตั้งค่าแบบไม่มีหัว ด้วยการใช้ Secure SHell หรือ SSH คุณสามารถควบคุม Pi ของคุณจากระยะไกลจากคอมพิวเตอร์ได้ ด้วยวิธีนี้ สิ่งที่คุณต้องมีในการแก้ไข Pi ของคุณคือแหล่งพลังงานเพื่อใช้งานต่อไป ไม่ต้องใช้จอภาพและคีย์บอร์ดอีกต่อไป!

ขั้นตอนที่ 2: SSH เข้าสู่ PI. ของคุณ

SSH เข้าสู่ PI. ของคุณ
SSH เข้าสู่ PI. ของคุณ
SSH เข้าสู่ PI. ของคุณ
SSH เข้าสู่ PI. ของคุณ

SSH ลงใน Raspberry Pi ของคุณนั้นง่ายและมีประโยชน์มาก เนื่องจากกระบวนการนี้ทำให้คุณสามารถออกคำสั่งไปยัง Pi จากคอมพิวเตอร์เครื่องใดก็ได้ที่ไม่มีอะไรมากไปกว่าการเชื่อมต่อ WiFi

หากต้องการ SSH ใน Pi ของคุณ คุณต้องทำตาม 3 ขั้นตอนง่ายๆ เหล่านี้

ก่อนอื่น คุณต้องเปิดใช้งาน SSH บน Pi ของคุณ ในการดำเนินการนี้ ให้เปิดหน้าต่างคำสั่งใน Pi ของคุณและพิมพ์:

sudo raspi-config

คำสั่งนี้อนุญาตให้คุณเข้าสู่เมนูการกำหนดค่า จากตรงนั้น คุณจะต้องใช้ลูกศร แท็บ และแป้น Enter เพื่อเข้าสู่ตัวเลือกการเชื่อมต่อก่อน จากนั้นจึงเปิดใช้งาน SSH เช่นเดียวกับกล้อง จากนั้นจึงออกและรีบูต pi

ถัดไป คุณจะต้องค้นหาที่อยู่ IP ของ Pi ในเทอร์มินัลคำสั่ง พิมพ์:

sudo ifconfig

และที่อยู่ IP ของคุณควรอยู่ในส่วน wlan0 ที่ปรากฏขึ้น ใต้ Link encap:ethernet ในภาพสาธิตด้านบน ที่อยู่ IP คือ 192.168.1.10

สุดท้าย คุณจะต้องเปิดแอปเทอร์มินัลในตัวบน Mac หรือค้นหาและปฏิบัติตามคำแนะนำสำหรับแอป ssh บุคคลที่สามสำหรับ windows ในแอป Terminal ให้พิมพ์:

ssh pi@ที่อยู่ IP ของคุณ

หากคุณไม่ได้เปลี่ยนรหัสผ่านขณะอยู่ใน Raspi-config รหัสผ่านที่จะป้อนเมื่อได้รับแจ้งจะเป็นรหัสผ่านเริ่มต้น: raspberry

จากนั้นคุณควรจะไปได้ดี!

ขั้นตอนที่ 3: ส่งอีเมลที่อยู่ IP ของคุณบน Boot

ส่งอีเมลที่อยู่ IP ของคุณบน Boot
ส่งอีเมลที่อยู่ IP ของคุณบน Boot

ในขั้นตอนนี้ เราจะเน้นไปที่การเข้าถึง Raspberry Pi ของคุณ ไม่ว่าคุณจะอยู่บนเครือข่ายใดก็ตาม ที่อยู่ IP ของ Pi จะเปลี่ยนไปขึ้นอยู่กับเครือข่าย และหากคุณไม่มีการตั้งค่าจอภาพ คุณจะต้อง ssh เข้าไปใน Pi เพื่อเรียกใช้โปรโตคอลการตรวจจับการเคลื่อนไหว เปลี่ยนการตั้งค่าการเคลื่อนไหว หรือเข้าถึงสิ่งอื่นบนอุปกรณ์ เพื่อแก้ปัญหานี้ เราจะเขียนสคริปต์หลามที่ส่งอีเมลถึงเราถึงที่อยู่ IP ปัจจุบันของ Pi เมื่อเริ่มต้น สคริปต์ python มีดังต่อไปนี้และถูกเก็บไว้ในไดเร็กทอรีที่ระบุว่า "background"

#เริ่มต้นในโฮมไดเร็กตอรี่

ซีดี ~

#สร้างโฟลเดอร์พื้นหลัง

พื้นหลัง mkdir

#สร้างสคริปต์หลาม

sudo nano emailip.py

#เขียนใน emailip.py

นำเข้าซ็อกเก็ต

s = socket.socket (socket. AF_INET, socket. SOCK_DGRAM)

s.connect(("8.8.8.8", 80))

พิมพ์ (s.getsockname()[0])x = s.getsockname()[0]s.close()

นำเข้า smtplib

จากอีเมล. MIMEMultipart นำเข้า MIMEMultipart

จากอีเมล MIMEText นำเข้า MIMEText

fromaddr = "ที่อยู่ของคุณ"

toaddr = "รับที่อยู่"

msg = MIME หลายส่วน ()

msg['From'] = fromaddr

msg['To'] = toaddr

msg['Subject'] = "ที่อยู่ IP"

body = xmsg.attach(MIMEtext(body, 'ธรรมดา'))

เซิร์ฟเวอร์ = smtplib. SMTP('smtp.gmail.com', 587)

เซิร์ฟเวอร์.starttls()

server.login (fromaddr, "รหัสผ่านของคุณ")

ข้อความ = msg.as_string()

server.sendmail (fromaddr, toaddr, ข้อความ)

เซิร์ฟเวอร์.quit()

# จากนั้นสิ่งนี้จะเกิดขึ้นเมื่อรีบูต

sudo nano /etc/rc.local

#ป้อนใน /etc/rc.local

ในขณะที่ ! /sbin/ifconfig wlan0 | grep -q 'inet addr:[0-9]';

นอนหลับ3

เสร็จแล้ว

_IP=$(ชื่อโฮสต์ -I) || จริง

ถ้า ["$_IP"]; แล้ว

printf "ที่อยู่ IP ของฉันคือ %s\n" "$_IP"

หลาม /home/pi/Background/emailip.py &

fi

ทางออก 0

#เสร็จแล้วจ้า

ขั้นตอนที่ 4: การติดตั้งและตั้งค่า Motion

การติดตั้งและการตั้งค่า Motion
การติดตั้งและการตั้งค่า Motion

#อัพเดทปี่

sudo apt-get update

sudo apt-get อัพเกรด

#ดาวน์โหลด

sudo apt-get ติดตั้งการเคลื่อนไหว

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

sudo nano /etc/motion/motion.conf

#เพื่อกำหนดมาตรฐานสำหรับบทช่วยสอนนี้ ให้เปลี่ยน

#################

ภูตบน

stream_localhost ปิด

webcontrol_localhost ปิด

ffmpeg_output_movies บน

target_dir /var/lib/motion

##################

#local ตัวเลือกการสตรีมเว็บเบราว์เซอร์

##################

stream_maxrate 100 #สิ่งนี้จะอนุญาตให้สตรีมแบบเรียลไทม์แต่ต้องการแบนด์วิดธ์และทรัพยากรมากขึ้น

อัตราเฟรม 60 #สิ่งนี้จะช่วยให้สามารถจับภาพได้ 60 เฟรมต่อวินาที #ยิ่งได้รับมาก การประมวลผลวิดีโอก็จะช้าลง

width 640 #สิ่งนี้จะเปลี่ยนความกว้างของภาพที่แสดง

ความสูง 480 #สิ่งนี้จะเปลี่ยนความสูงของภาพที่แสดง

##################

#ส่งอีเมลการตั้งค่าวิดีโอใน …/motion.conf

##################

#ลบ "; " ข้างหน้าบรรทัด เครื่องหมายอัฒภาคแสดงความคิดเห็นบรรทัดออก

on_event_start python /home/pi/background/motionalert.py %f

on_movie_end python /home/pi/background/motionvid.py %f

##################

#นักพรต

##################

#ตัวเลือกที่อธิบายไว้ในไฟล์

output_pictureslocation_motion_style

##################

#แล้วเปลี่ยน

sudo nano /etc/default/motion

#เพื่อพูด

start_motion_daemon=ใช่

#สุดท้าย เริ่ม B**** ขึ้น

sudo service โมชั่นสตาร์ท

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

ขั้นตอนที่ 5: ส่งอีเมลวิดีโอจากการเคลื่อนไหวเมื่อตรวจจับ

การส่งอีเมลวิดีโอจากการตรวจจับการเคลื่อนไหว
การส่งอีเมลวิดีโอจากการตรวจจับการเคลื่อนไหว

อีเมลเมื่อตรวจพบการเคลื่อนไหว:

#เริ่มต้นที่บ้าน

dircd ~

#สร้างสคริปต์หลามแจ้งเตือนการเคลื่อนไหว

sudo nano /home/pi/background/motionalert.py

#เขียน

นำเข้า smtplib

จากวันที่และเวลานำเข้า datetime

จากอีเมล. MIMEMultipart นำเข้า MIMEMultipart

จากอีเมล MIMEText นำเข้า MIMEText

fromaddr = "คุณ"

toaddr = "รับที่อยู่"

msg = MIME หลายส่วน ()

msg['From'] = fromaddr

msg['To'] = toaddr

msg['Subject'] = "ตรวจพบการเคลื่อนไหว"

body = 'ตรวจพบการเคลื่อนไหวแล้ว\nเวลา: %s' % str(datetime.now())

msg.attach(MIMETข้อความ(เนื้อหา 'ธรรมดา'))

เซิร์ฟเวอร์ = smtplib. SMTP('smtp.gmail.com', 587)

เซิร์ฟเวอร์.starttls()

server.login (fromaddr, "YOURPASSWORD")

ข้อความ = msg.as_string()

server.sendmail (fromaddr, toaddr, ข้อความ)

เซิร์ฟเวอร์.quit()

อีเมลวิดีโอของการเคลื่อนไหวเมื่อบันทึกวิดีโอ:

#เริ่มที่ homedircd ~

#create วิดีโอภาพเคลื่อนไหว python scriptsudo nano /home/pi/background/motionvid.py

นำเข้า smtplib

จากอีเมล. MIMEMultipart นำเข้า MIMEMultipart

จากอีเมล MIMEText นำเข้า MIMEText

จากอีเมล MIMEBase นำเข้า MIMEBase

จากตัวเข้ารหัสการนำเข้าอีเมล

fromaddr = "อีเมลของคุณ"

toaddr = "ที่อยู่อีเมลที่คุณส่งไป"

msg = MIME หลายส่วน ()

msg['From'] = fromaddr

msg['To'] = toaddr

msg['Subject'] = "เปิดใช้งาน Motion Cam แล้ว"

body = "วิดีโอที่ตรวจพบการเคลื่อนไหว"

msg.attach(MIMEข้อความ(เนื้อหา 'ธรรมดา'))

นำเข้าระบบปฏิบัติการ

rootpath = '/var/lib/motion'

filelist = [os.path.join(rootpath, f) สำหรับ f ใน os.listdir(rootpath)]

filelist = [f สำหรับ f ใน filelist ถ้า os.path.isfile(f)]

ใหม่ล่าสุด = สูงสุด (รายการไฟล์, คีย์=แลมบ์ดา x: os.stat(x).st_mtime)

ชื่อไฟล์ = ใหม่ล่าสุด

นำเข้าระบบปฏิบัติการ

rootpath = '/var/lib/motion'

filelist = [os.path.join(rootpath, f) สำหรับ f ใน os.listdir(rootpath)]

filelist = [f สำหรับ f ใน filelist ถ้า os.path.isfile(f)]

ใหม่ล่าสุด = สูงสุด (รายการไฟล์, คีย์=แลมบ์ดา x: os.stat(x).st_mtime)

ไฟล์แนบ = เปิด (ใหม่ล่าสุด "rb")

part = MIMEBase('application', 'octet-stream')

part.set_payload((สิ่งที่แนบมา).อ่าน())

encoders.encode_base64 (บางส่วน)

part.add_header('Content-Disposition', "สิ่งที่แนบมา; ชื่อไฟล์= %s" % ชื่อไฟล์)

msg.attach(บางส่วน)

เซิร์ฟเวอร์ = smtplib. SMTP('smtp.gmail.com', 587)

เซิร์ฟเวอร์.starttls()

server.login (fromaddr, "รหัสผ่านของคุณ")

ข้อความ = msg.as_string()

server.sendmail (fromaddr, toaddr, ข้อความ)

เซิร์ฟเวอร์.quit()

ขั้นตอนที่ 6: การแก้ไขปัญหาและแหล่งที่มา

การแก้ไขปัญหาและแหล่งที่มา
การแก้ไขปัญหาและแหล่งที่มา

การแก้ไขปัญหา:

เนื่องจากโครงการนี้มีหลายขั้นตอน จึงมีหลายจุดที่อาจมีข้อผิดพลาดได้ ด้านล่างนี้คือข้อผิดพลาดที่อาจเกิดขึ้นและวิธีแก้ไข

  • เมื่อตั้งค่า pi ให้ส่งอีเมลถึงคุณที่อยู่ IP ปัจจุบัน การแก้ไขไฟล์ rc.local ดังที่แสดงไว้ก่อนหน้านี้เป็นสิ่งสำคัญ เนื่องจากจะทำให้มีความล่าช้าเล็กน้อยก่อนที่โปรแกรมจะเปิดใช้งานหลังจากรีบูต มิฉะนั้น pi จะยังไม่เชื่อมต่อกับ wifi และอีเมลจะไม่ส่ง
  • เมื่อแก้ไขไฟล์ motion.conf อย่าลืมลบเครื่องหมายอัฒภาคหน้าพารามิเตอร์บางตัว อัฒภาคระงับการกระทำที่กำหนด มิฉะนั้น การเปลี่ยนแปลงจะไม่มีผล
  • ไฟล์ motion.conf มีการจัดระเบียบและมีรายละเอียดดีมาก อย่าลังเลที่จะเปลี่ยนการตั้งค่าตามที่คุณต้องการ แต่เข้าใจว่าการตั้งค่าเหล่านี้อาจส่งผลต่อความสำเร็จของระบบจับภาพการเคลื่อนไหว
  • หลังจากตั้งค่าตัวเลือกการแจ้งเตือนทางอีเมลและอีเมลวิดีโอ สิ่งสำคัญที่ควรทราบคืออีเมลของวิดีโอที่ตรวจพบการเคลื่อนไหวจะใช้เวลานานกว่าการส่งเล็กน้อยกว่าอีเมลแจ้งเตือนเริ่มต้นเล็กน้อย เนื่องจากวิดีโอจะสิ้นสุดภายในไม่กี่วินาทีหลังจากตรวจไม่พบการเคลื่อนไหวอีกต่อไป และเนื่องจากไฟล์แนบอีเมลอาจมีขนาดใหญ่พอที่จะใช้เวลารับสองสามนาที ในบางกรณี หากการเคลื่อนไหวคงอยู่เป็นเวลานานมาก อาจมีขนาดใหญ่เกินไปที่จะส่งเลย ด้วยเหตุนี้ คุณควรตรวจสอบสตรีมสดหลังจากได้รับอีเมลแจ้งเตือนเริ่มต้นเสมอ

ทำไมต้องเคลื่อนไหว:

เมื่อเริ่มดำเนินการในโครงการนี้ครั้งแรก เราได้พิจารณาแหล่งข้อมูลต่างๆ มากมาย อันดับแรก เราพิจารณาใช้ PiCam ซึ่งเป็นหน่วยกล้องที่สร้างขึ้นสำหรับ Raspberry Pi โดยเฉพาะ PiCam เป็นอุปกรณ์ที่มีความสามารถอย่างแน่นอนและมีแอพพลิเคชั่นมากมาย แต่ถูกจำกัดให้ใช้โปรแกรมที่ออกแบบมาโดยเฉพาะและมีราคาค่อนข้างแพงเมื่อเทียบกับเว็บแคมเอนกประสงค์ราคาถูก ดังนั้น เพื่อให้โครงการนี้เข้าถึงได้สำหรับผู้ชมจำนวนมากขึ้น เราจึงตัดสินใจใช้เว็บแคม USB ทั่วไป ประเด็นต่อไปคือซอฟต์แวร์ที่จะรวมเข้าด้วยกัน ตอนแรกเราพิจารณา OpenCV ซึ่งเป็นซอฟต์แวร์ฟรีที่ช่วยให้สามารถใช้ Computer Vision และโครงการเกี่ยวกับภาพได้หลายประเภท ประเด็นที่นี่คือ OpenCV เป็นไฟล์ขนาดใหญ่ที่ใช้หน่วยความจำจำนวนมากและตั้งค่าเป็นเวลานาน การตั้งค่ายังมีหลายขั้นตอน ซึ่งทำให้มีข้อผิดพลาดมากยิ่งขึ้น เราพบว่าสำหรับโครงการเฉพาะของเรา Motion นั้นง่ายต่อการติดตั้งและทำงาน แต่มีประสิทธิภาพมากกว่าในการดำเนินการ

แหล่งที่มา

แหล่งที่มาของรหัส:

www.techradar.com/how-to/computing/how-to-b…

pimylifeup.com/raspberry-pi-webcam-server/

www.pyimagesearch.com/2015/06/01/home-surve…

naelshiab.com/tutorial-send-email-python/

www.raspberrypi.org/documentation/linux/us…

learn.adafruit.com/adafruits-raspberry-pi-…

learn.adafruit.com/adafruits-raspberry-pi-…

pinout.xyz/pinout/i2c

เครดิตภาพ:

SSH หอยทาก:

โลโก้เมล:

เว็บแคม Logitech:

หน้าต่าง SSH: