用python实现智能监控
- 实现效果
- 程序编写(总程序)
- 应用场景
实现效果
当运行程序后,打开摄像头(自配、外接摄像头),重复对摄像头拍摄的场景进行人脸识别。人脸识别通过Python库中openCV / cv2 库进行摄像头调用,通过python(官网)里已经训练好的人脸抓取数据库。
当识别到人脸后,程序自动将有人脸片段剪辑成连续视频,生成视频后将其保存至特定文件夹,可在任何时间查看。
(流程图)
程序编写
先同过www.python.org与cmd安装cv2库(先要装pip和wheel)
(cv2正确安装cmd指示)
确认安装后进行主程序编写。(主程序已上传)
- 导入/初始化
导入cv2库与人脸识别数据库。直接在编辑器上导入库,导入数据库网站。初始化摄像头与各库,初始化输出。
import cv2
#导入cv2
face_cascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
cap = cv2.VideoCapture(0)
width = int(cap.get(3))
heiht = int(cap.get(4))
out = cv2.VideoWriter("recording2.mp4", cv2.VideoWriter_fourcc("D", "I", "V", "X"),
10, (width, heiht))
#初始化cv2
- 定义人脸识别,剪辑
将有人脸的画面作明显框选标注(设置框的x,y坐标)当有人脸画面明显框选标注的话面出现时,进行视频剪辑(重复识别剪辑直到程序结束)
while True:
ret, img = cap.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
#灰度
for (x, y, w, h) in faces:
cv2.rectangle(img, (x,y), (x+w, y+h), (0, 255, 255), 2)
#设置脸部框选的x,y坐标
out.write(img)
- 导出
导出视频至特定文件夹,设置关闭程序
cv2.imshow("Face Detection2", img)
#导出视频
k = cv2.waitKey(30) & 0xff
if k == 27:
break
#设置关闭程序
cap.release()
out.release()
cv2.destroyAllWindows()
总程序
import cv2
face_cascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
cap = cv2.VideoCapture(0)
width = int(cap.get(3))
heiht = int(cap.get(4))
out = cv2.VideoWriter("recording2.mp4", cv2.VideoWriter_fourcc("D", "I", "V", "X"),
10, (width, heiht))
while True:
ret, img = cap.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x, y, w, h) in faces:
cv2.rectangle(img, (x,y), (x+w, y+h), (0, 255, 255), 2)
out.write(img)
cv2.imshow("Face Detection2", img)
k = cv2.waitKey(30) & 0xff
if k == 27:
break
cap.release()
out.release()
cv2.destroyAllWindows()
引用场景
在生活中,可将此程序烧入外接摄像头中,对生活安全作实时监控。即使外出,回家后仍可通过系统储存的有人脸(关键信息)的监控视频。
本程序完成点
- 人脸检测
- 输出 “重要信息” 视频
- 客户自主训练(未完成)
- 复杂视角检测失败(未解决)
此程序还在编写,主要解决外接摄像头大角度俯视、仰视、斜视等人脸检测失败等问题。
后如有时间还会编写用户自主训练摄像头识别其它 “重要信息”
后可能会有关于自己训练程序的文章~ 六年级凉了本人,请支持~