python学习|python+opencv+百度智能云 人脸识别——视频人脸锁定

一.设计思路
1.导入模块

import sys import cv2

sys模块:该模块提供对解释器使用或维护的一些变量的访问,以及与解释器强烈交互的函数。
cv2模块:opencv接口模块
2.读取视频
def videocapture(): cap = cv2.VideoCapture(0)# 生成读取摄像头对象 width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))# 获取视频的宽度 height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))# 获取视频的高度 fps = cap.get(cv2.CAP_PROP_FPS)# 获取视频的帧率 fourcc = int(cap.get(cv2.CAP_PROP_FOURCC))# 视频的编码 # 定义视频对象输出 writer = cv2.VideoWriter("video_result.mp4", fourcc, fps, (width, height)) while cap.isOpened(): ret, frame = cap.read()# 读取摄像头画面 cv2.imshow('teswell', frame)# 显示画面 key = cv2.waitKey(24) writer.write(frame)# 视频保存 # 按Q退出 if key == ord('q'): break cap.release()# 释放摄像头 cv2.destroyAllWindows()# 释放所有显示图像窗口

如果本地没视频的话,用这个函数调用自己的摄像头,并录制一段视频,保存下来,如果有本地视频,后面主函数中可以把这个函数注释掉,用本地视频
3.人脸检测
def CatchUsbVideo(window_name, camera_idx): cv2.namedWindow(window_name)# 视频来源,可以来自一段已存好的视频,也可以直接来自USB摄像头 cap = cv2.VideoCapture("video.mp4")# 告诉OpenCV使用人脸识别分类器 #classfier = cv2.CascadeClassifier(r"./haarcascade_frontalface_alt2.xml") classfier = cv2.CascadeClassifier(r"F:\OpenCV\opencv\sources\data\haarcascades\haarcascade_frontalface_default.xml")# 识别出人脸后要画的边框的颜色,RGB格式 color = (0, 255, 0)while cap.isOpened(): ok, frame = cap.read()# 读取一帧数据 if not ok: break# 将当前帧转换成灰度图像 grey = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)# 人脸检测,1.2和2分别为图片缩放比例和需要检测的有效点数 faceRects = classfier.detectMultiScale(grey, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32)) if len(faceRects) > 0:# 大于0则检测到人脸 for faceRect in faceRects:# 单独框出每一张人脸 x, y, w, h = faceRect cv2.rectangle(frame, (x - 10, y - 10), (x + w + 10, y + h + 10), color, 2)# 显示图像 cv2.imshow(window_name, frame) c = cv2.waitKey(10) if c & 0xFF == ord('q'): break# 释放摄像头并销毁所有窗口 cap.release() cv2.destroyAllWindows()

这里需要注意,haarcascade_frontalface_alt2.xml文件的路径,在自己的安装路径里,在下图这个位置,记得替换为自己的路径
python学习|python+opencv+百度智能云 人脸识别——视频人脸锁定
文章图片
设置完人脸识别分类器,将视频一帧一帧转为图片,并进行灰度处理,调用函数进行人脸检测,框选,执行完将图片显示出来,最后释放摄像头
4.程序测试
if __name__ == '__main__': #videocapture() try: if len(sys.argv) != 1: print("Usage:%s camera_id\r\n" % (sys.argv[0])) else: CatchUsbVideo("识别人脸区域",0) except Exception as Error: print(Error)

主函数,调用上面所写函数进行测试
二.运行结果
python学习|python+opencv+百度智能云 人脸识别——视频人脸锁定
文章图片
结果还算满意
唯一问题是,最后显示名称因为是中文,会出现如图乱码,暂时不知道解决方案
三.总结
【python学习|python+opencv+百度智能云 人脸识别——视频人脸锁定】本设计需要注意的是:
1.是否需要调用本地摄像头,如果不用,本地应该有需要检测的视频(我试了下,gif也可以)
2.haarcascade_frontalface_alt2.xml文件路径要设置好

    推荐阅读