Python3.7.2+openCV实现本地视频文件中人脸检测

Python3.7.2+openCV简单实现本地视频文件中人脸检测

【说明】本文使用python版本为3.7.2;openCV使用opencv_python-4.0.1-cp37-cp37m-win_amd64.whl;训练文件使用haarcascade_frontalface_alt2.xml,在使用haarcascade_frontalface_default.xml时出现问题(原因未知,初步判断xml文件异常)haarcascade资源包下载

  • 运行效果

Python3.7.2+openCV实现本地视频文件中人脸检测_第1张图片Python3.7.2+openCV实现本地视频文件中人脸检测_第2张图片注:视频来源于网络,只做学习和代码测试使用

  • 代码实例

 # -*- coding: utf-8 -*-
#    __author__ = 'feikai'
#    __date__ = '2019/1/26'
#    __Desc__ = 视频人脸检测小例子


import cv2
# 视频来源,可以来自一段已存好的视频,也可以直接来自USB摄像头,
# 这里使用已存储的视频文件,作者将其放在代码同文件夹下
#获取待检测视频Grammarly.mp4,根据个人视频名称修改
cap = cv2.VideoCapture(
    r'./Grammarly.mp4'
)

# 告诉OpenCV使用人脸识别分类器在哪里,
# 建议使用haarcascade_frontalface_alt2.xml,作者将其放在代码同文件夹下
classfier = cv2.CascadeClassifier(
    r'./haarcascade_frontalface_alt2.xml'
)
# 识别出人脸后要画的边框的颜色,BRG格式,openCV中与普通RGB值不同(历史遗留习惯)
color = (0, 255, 0)
while cap.isOpened():
    ok, frame = cap.read()  # 读取一帧数据
   #如果读取失败,直接break
    if not ok:
        break
    # 读取成功后,将当前帧转换成灰度图像
    grey = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    # 人脸检测,使用detectMultiScale函数进行
    faceRects = classfier.detectMultiScale(
        grey,
        scaleFactor=1.25,
        minNeighbors=3,
        minSize=(35, 35) #设置最小检测范围,即是目标小于该值就无视
        # maxSize=(200,200)#设置最大检测范围
    )
    if len(faceRects) > 0:  # 当检测到多张脸时
        for faceRect in faceRects:  # 单独框出每一张人脸
            x, y, w, h = faceRect
            cv2.rectangle(frame, (x , y), (x + w, y + h), color, 2)

    # 显示图像
    cv2.imshow("Face Detection", frame)
    c = cv2.waitKey(5)		#数值越小播放越流畅,不可为浮点数
    if c & 0xFF == ord('q'):
        break
# 释放摄像头并销毁所有窗口
cap.release()
cv2.destroyAllWindows()

  • 资源及参考下载
    haarcascade资源包下载
    detectMultiScale函数说明

你可能感兴趣的:(openCV,视频检测)