บทความนี้เป็นการทำ กล้องวงจรปิด ด้วย Raspberry Pi และ USB Webcam พร้อมตั้งค่าให้ส่งข้อความแจ้งเตือนไปยัง LINE Application เมื่อตรวจจับภาพเคลื่อนไหวได้ และสามารถดูภาพกล้องวงจรปิดแบบออนไลน์ได้ด้วยครับ
อุปกรณ์ที่ใช้
+ Raspberry Pi 3 B+
+ กล้องเว็บแคมแบบ USB
+ บัญชีผู้ใช้ LINE
ขั้นตอนการทำกล้องวงจรปิดจาก USB Webcam ด้วย Raspberry Pi
หลังจากที่เราทำ การติดตั้งระบบปฏิบัติการ Raspbian ให้กับ Raspberry Pi และ การติดตั้ง Web Server ให้กับ Raspberry Pi เรียบร้อยแล้ว จึงติดต่อ Raspberry Pi ผ่านโปรโตรคอล SSH ด้วยโปรแกรม PuTTY และทำการอัพเดทระบบปฏิบัติการ ด้วยคำสั่ง
sudo apt-get update
สร้างโฟล์เดอร์สำหรับเก็บไฟล์วีดีโอและรูปภาพ พร้อมกำหนดสิทธิของโฟลเดอร์ ด้วยคำสั่ง
sudo mkdir /var/www/html/motion
sudo chmod 775 /var/www/html/motion
ให้ทำการติดตั้ง USB Webcam ให้กับ Raspberry Pi และทดสอบการถ่ายภาพ และบันทึกวีดีโอจากเว็บแคม ด้วยคำสั่ง
sudo ffmpeg -f v4l2 -i /dev/video0 -vframes 1 /var/www/html/motion/test.jpg
sudo ffmpeg -f v4l2 -r 25 -s 640x480 -i /dev/video0 -t 00:00:05 /var/www/html/motion/test.avi
และติดตั้งแพ็คเกจ motion ด้วยคำสั่ง
sudo apt-get install motion -y
sudo chown -R pi:www-data /var/www/html
sudo usermod -a -G www-data motion
sudo chown motion:www-data /var/www/html/motion
จากนั้นทำการกำหนดค่าในไฟล์ /etc/motion/motion.conf
sudo nano /etc/motion/motion.conf
กด Ctrl+W เพื่อค้นหาข้อความ หรือกด Ctrl + Shift + _ แล้วพิมพ์ตัวเลขของแต่ละบรรทัด (Line) และทำการกำหนดค่า ดังนี้
daemon on #Line 11
width 800 #Line 100
height 600 #Line 103
framerate 25 #Line 107
post_capture 5 #Line 245
quality 80 #Line 279
target_dir /var/www/html/motion #Line 450
stream_localhost off #Line 504
webcontrol_localhost off #Line 537
webcontrol_authentication user:password #Line 544
on_movie_start python3 /home/pi/line_notice.py %f #Line 658 (อย่าลืมลบ ; ออก)
กด Ctrl+X และ กด y เพื่อบันทึก แล้วจึงกำหนดค่า start_motion_daemon ในไฟล์ /etc/default/motion
sudo nano /etc/default/motion
เปลี่ยนค่า start_motion_daemon เป็น yes แล้วทำการบันทึก
start_motion_daemon = yes
จากนั้นจึงทำการขอ Token จากเว็บไซต์ของ LINE เพื่อให้สามารถส่งข้อความแจ้งเตือนผ่าน LINE Notify ซึ่งอยู่เมนู My page และกดปุ่ม Generate Token แล้วจะปรากฎหน้าต่างสำหรับกรอกข้อมูล
https://notify-bot.line.me
กรอกชื่อที่ต้องการให้แสดงในการแจ้งเตือน (token name to be displayed)
เลือกคู่สนทนาที่ต้องการให้ส่งข้อความไปหา (chat to send notification)
เมื่อกรอกข้อมูลครบแล้ว จึงกดที่ปุ่ม Generate token เพื่อให้ระบบจะสร้าง Token และระบบจะส่งข้อความแจ้งเตือนไปยัง LINE ของคู่สนทนาที่เราเลือก เพื่อยืนยันว่าได้สร้าง Token แล้ว จากนั้นจึงสร้างไฟล์ไพธอนเพื่อใช้ส่งข้อความไปยัง LINE ด้วยคำสั่ง
sudo nano /home/pi/line_notice.py
มีข้อความภายในไฟล์ดังนี้
import requests
import urllib.parse
import sys, glob, os, re
from datetime import datetime
from datetime import timedelta
i = datetime.now()
domain = 'http://' + 'YOUR_DOMAIN_NAME'
url_arg = sys.argv[1]
vdourl = url_arg.replace('/var/www/html',domain)
file_name = url_arg.replace('.avi','')
match = re.findall(r'\d\d\d\d\d\d\d\d\d\d\d\d\d\d',url_arg)
if match:
s_name = file_name.split('-')
date_time_str = s_name[1]
date_time_obj = datetime.strptime(date_time_str, '%Y%m%d%H%M%S')
next_time = date_time_obj + timedelta(seconds=3)
next_time = next_time.strftime('%Y%m%d%H%M%S')
postimgurl = s_name[0]+'-'+str(next_time)+'-00.jpg'
else :
tmp_name = glob.glob(file_name+'*.jpg')
postimgurl = tmp_name[0]
line_token = 'YOUR_LINE_TOKEN'
url = 'https://notify-api.line.me/api/notify'
file = {'imageFile':open(postimgurl,'rb')}
data = ({
'message':'Movement has detected \r\n '+i.strftime('%H:%M:%S %Y/%m/%d')+'\r\n\r\n Real Time : ' + domain + ':8081 \r\n\r\n Motion Recorded : '+ vdourl +'\r\n\r\n Control : ' + domain + ':8080/0/ \r\n\r\n RPi CCTV'
})
line_headers = {"Authorization":"Bearer "+line_token}
session = requests.Session()
r = session.post(url, headers=line_headers, files=file, data=data)
print(r.text)
อย่าลืมทำการแก้ไข Token (line_token = ‘YOUR_LINE_TOKEN’) ตามที่ได้รับจากเว็บไซต์ LINE.me และ แก้ไข Domain (domain = ‘http://’ + ‘YOUR_DOMAIN_NAME’) เป็นชื่อโดเมนที่เราได้ลงทะเบียนกับ No-IP.com และกำหนดสิทธิ์ให้กับไฟล์ line_notice.py ด้วยคำสั่ง
sudo chmod 755 /home/pi/line_notice.py
แล้วจึงทดสอบการส่งข้อความไปยัง LINE Application ด้วยคำสั่ง
python3 /home/pi/line_notice.py /var/www/html/motion/test.avi
หากไม่มีข้อผิดพลาด จะปรากฎข้อความ {“status”:200,”message”:”ok”}
และข้อความจะถูกส่งไปยัง LINE application ของคู่สนทนา (chat to send notification) ที่ได้ทำการเลือกไว้ในขั้นตอนการขอ Token
หากได้รับข้อความ แสดงว่า Raspberry Pi สามารถส่งข้อความไปยัง LINE ได้แล้ว
จากนั้นจึงทำการรีสตาร์ทและเริ่มใช้งานแพ็คเกจ motion ด้วยการพิมพ์คำสั่ง
sudo service motion restart
sudo motion
ทดสอบการดูกล้องวงจรปิด
http://YOUR_DOMAIN_NAME:8080
เพียงเท่านี้ Raspberry Pi ก็จะกลายเป็นกล้องวงจรปิด และจะส่งข้อความแจ้งเตือนไปยัง LINE Application ทุกครั้งที่ตรวจจับภาพเคลื่อนไหวได้แล้วครับ