一.基本信息
1.导言
输入:图片,视频,可以使用本地,网络,监控摄像头
处理:人脸检测,识别,肢体识别等
输出:
软件:检测到结果通过短信或者其他形式发送
硬件:可以做检测系统
2.应用
1.报警系统:当摄像头环境出现一个陌生人时,立即发送信息让用户知晓,达到保护用户的财产的目的。
2.门禁系统:可以用于家庭中,在检测到数据库中的人脸即可直接打开门,如果是陌生人可以发送信息让用户知晓,用户判断是否开门。
3.打卡系统:公司里每个人的出勤情况,在一定的时间段打卡增加打卡次数,达到考勤的效果
3.环境搭建
1.环境配置
python+pycharm+opencv
2.原理
滑动窗口机制,分类器机制等等
二.逻辑以及关键代码
1.逻辑分析
:
1.第三方模块:
Pillow 9.0.0
numpy 1.21.5
opencv-contrib-python 4.5.5.62
opencv-python 4.5.5.62
pip 21.3.1
setuptools 39.1.0
2.首先要识别图片,通过opencv特定的函数将图片的特征以及id拿出来,在加载LBPH识别器将面部身份信息训练整合到一一对应一起写入yml文件里,这样在识别的过程中调用这些文件来辨别是否是熟悉的人。
3.在检测时,先将导入的图片灰度化,在加载分类器进行检测,就是将整张图片的人脸先框起来得到人脸的图片,在进行评分,如果不可靠,就会增加评分,如果评分很大,就说明不可靠,当分数达到一定程度的时候,就会发出警报(警报器借用的短信宝的api,也可以其他的比如邮箱地址的),意思就是陌生人长期在摄像头下徘徊,用户就会受到警报短信。如果这个人评分比较小,即是白名单中的人,就会把名称打在框图上。
4.当摄像头设置在远处时,我们可以借助rtmp协议,我们可以让视频流可以在摄像头和主机电脑之间进行数据传输,目前市面上的摄像头基本都支持这种rtmp协议,API也会在说明书中给出,也可以运用官方的接口进行推流测试,这样就可以远程监控了。
关键代码
1.读取图片关键代码
import cv2 as cv
#读取图片
img = cv.imread('1.jpg')
#显示图片
cv.imshow('结果',img)
2.绘制矩形关键代码
import cv2 as cv
#读取图片
img = cv.imread('1.jpg')
#坐标
x,y,w,h= 100,100,100,100
#绘制矩形(在那张图片上画,起始点以及长宽,颜色(蓝,灰,红),宽度)
cv.rectangle(img,(x,y,x+h,y+w),color=(0,0,255),thickness=1)
#绘制圆形(图像,圆心,半径,颜色,宽度)
cv.circle(img,center=(x+w,y+h),radius=100,color=(255,0,0),thickness=3)
#显示
cv.imshow('结果',img)
3.人脸检测关键代码
def detectdemo():
gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
face_detect = cv.CascadeClassifier('D:/opencv/opencv/sources/data/haarcascades/haarcascade_frontalface_alt2.xml')
#(灰色转换,每次遍历缩放的倍数,检测几次都成功才检测成功,默认0,人脸最小尺寸,人脸最大尺寸)
face=detect.detectMultiScale(gray,1.01,50,0,(5,5),(300,300))
for x,y,w,h in face :
cv.rectangle