本帖最后由 ciker_li 于 2020-2-24 23:02 编辑
今天偶尔看到一篇opencv的例子,讲解怎么进行人脸识别。
灵感一闪,突然想到,这是不是正好可以检测人是否正在看电脑屏幕,从而判断是否在认真听讲。
说干就干,代码在此import numpy as np
import cv2
import winsound
import datetime
start = datetime.datetime.now() <font size="3"><b> #记录起始时间</b></font>
face_cascade = cv2.CascadeClassifier('D:/Python/Python37-32/Lib/site-packages/cv2/data/haarcascade_frontalface_default.xml') <b><font size="3"> #cv2自带的训练好的人脸识别模块</font></b>
cap = cv2.VideoCapture(0)
while True:
ret, img = cap.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
if len(faces) <= 0:
end = datetime.datetime.now()
if((end-start).seconds > 25): <b> <font size="3">#如果25秒没有检测到人脸就报警</font></b>
winsound.PlaySound('e:/vscode/work/warning.wav', winsound.SND_FILENAME) <font size="4"><b> #报警声音自己录制
</b></font>
else:
start = datetime.datetime.now()
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放摄像头资源
cap.release()
cv2.destroyAllWindows()
程序思路很简单,就是判断有没有检测到人脸,如果25秒内没有,就报警
存在问题:
1、opencv人脸识别的准确率不是很高,有时候带个眼镜,或者侧点脸就识别不出来了
2、没有隐藏进程,容易被杀掉
3、肯定还有很多缺点,懒得想了
这个程序就是炒个冷饭,估计快开学了,认真写好的话也没啥用了,
写得太好,万一被熊孩子查到,给个差评怎么办
有时间还是用C++编写好使
还有个问题困惑我好久了
代码
怎么能发这样看着高大上格式的代码,求指点! |