一、事件描述
事件目的是为了在实时监控中发现、追踪目标人物。在进行具体项目实验前利用百度智能平台进行测试。
版本信息:python3.7 、opencv-python 4.1
二、过程解析
总览
整体结构包括:1.视频读入、2.人脸检测、3.人脸对比、4目标标注
1.视频读入
cap=cv.VideoCapture(0)#0为调用本机摄像头,调用其他摄像头序号应该对应。如果读取视频,改为视频地址
while(1):
ret, frame = cap.read()
if not ret:
print("打开摄像头失败")
break
"""对每一帧的其他操作..."""
c=cv.waitKey(20)
if c==27:#esc键的键盘输入值为27,该段意为当按下esc键时退出
cap.release()
cv.destroyAllWindows()
break
2.人脸检测
人脸检测利用的是opencv包中已经训练好的分类器haarcascade_frontalface_default,该分类器是保存在opencv包目录下的.xml文件,调用过程如下:
def face_detect_demo(image):
"""脸部检测"""
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
face_detector = cv.CascadeClassifier(r"C:\ProgramData\Anaconda3\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml")#haarcascade_frontalface_default.xml
faces = face_detector.detectMultiScale(gray, 1.1, 2)
return(faces)
输入:待检测的图片(已通过cv2.imread读取为数组格式)
输出:检测到的人脸位置
调用示例:
待测图片(C:\Users\Administrator\Desktop\lyf.jpg)
src=cv2.imread('C:\\Users\\Administrator\\Desktop\\lyf.jpg')
id_face=face_detect_demo(src)
输出结果:
array([[ 43, 88, 334, 334]], dtype=int32)
结果解释:43,88 为检测到的人脸左上角位置,334,334是检测到的人脸范围(宽度和高度),因此可以构造出人脸的四个顶点位置为:
(43,88) | (43+334,88) |
---|---|
(43,88+334) | (43+334,88+334) |
显示结果
src=cv2.