一.设计思路
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+百度智能云 人脸识别——视频人脸锁定](http://img.readke.com/220705/22030130A-0.jpg)
文章图片
设置完人脸识别分类器,将视频一帧一帧转为图片,并进行灰度处理,调用函数进行人脸检测,框选,执行完将图片显示出来,最后释放摄像头
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+百度智能云 人脸识别——视频人脸锁定](http://img.readke.com/220705/2203015R1-1.jpg)
文章图片
结果还算满意
唯一问题是,最后显示名称因为是中文,会出现如图乱码,暂时不知道解决方案
三.总结
【python学习|python+opencv+百度智能云 人脸识别——视频人脸锁定】本设计需要注意的是:
1.是否需要调用本地摄像头,如果不用,本地应该有需要检测的视频(我试了下,gif也可以)
2.haarcascade_frontalface_alt2.xml文件路径要设置好
推荐阅读
- python学习|python+opencv+百度智能云 人脸识别——人数识别+标记
- python学习|python+opencv+百度智能云 人脸识别——人脸相似度对比
- python|10个非常有趣的Python库,可以玩上一整天
- python|Python数据可视化的3大步骤,你知道吗()
- 大数据|Python的打包神器—Nuitka
- python|Python+AI智能编辑人脸
- python
- python|docker-compose命令及yaml文件
- 计算机视觉|干货收藏!基于深度学习目标姿态估计的论文一览(2017-2020)