【使用OpenCV进行视频人脸检测】------机器学习(附完整代码和数据集)

上篇文章介绍了OpenCV进行照片人脸检测,今天学习的是OpenCV进行视频人脸检测,所有的参考博文、文献、视频、代码都会在文末附上链接或文件压缩包。

本文的目录如下:

一、Opencv 进行视频人脸检测

1、代码

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import cv2
 
# 人脸检测函数:
# useCamera参数:True表示使用摄像头,False表示读取当前目录下视频文件
def face_detection(useCamera=False):
    # 1.调用摄像头或者使用读取视频
    cv2.namedWindow("CaptureFace")
    if useCamera == True:
        cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)
    else:
        cap = cv2.VideoCapture('./video2.mp4')
 
    # 2.人脸识别器分类器
    classfier = cv2.CascadeClassifier('./opencv/sources/data/haarcascades/haarcascade_frontalface_alt2.xml')
    color = (0, 255, 0)
 
    while cap.isOpened():
        flag, frame = cap.read()
        frame = cv2.flip(frame, 1)  # 镜像操作
 
        if not flag:
            break
 
        # 3.灰度转换
        grey = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
 
        # 4.人脸检测,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
 
                # 5.画图
                cv2.rectangle(frame, (x - 10, y - 10), (x + w + 10, y + h + 10), color, 3)
        cv2.imshow("CaptureFace", frame)
        if cv2.waitKey(10) & 0xFF == ord('q'):
            break
 
    cap.release()
    cv2.destroyAllWindows()
 
face_detection()  # 使用摄像头
face_detection(useCamera=False)  # 使用视频

2、代码解释

detectMultiScale()函数

核心部分用到的同样是detectMultiScale(),具体参数解释见上篇博客OpenCV进行照片人脸检测

cv2.rectangle()函数

这里主要记录一下cv2.rectangle()函数。
cv2.rectangle 这个函数的作用是在图像上绘制一个简单的矩形。
opencv 官网上给出的 cv2.rectangle 函数定义 如下:
cv2.rectangle(img, pt1, pt2, color[, thickness[, lineType[, shift]]]) → None
第一个参数 img 指定一张图片,在这张图片的基础上进行绘制;
第二、三个参数 pt1 和 pt2 分别代表矩形的左上角和右下角两个点,而且 x 坐标轴是水平方向的,y 坐标轴是垂直方向的。
第四个参数 color 参数一般用 RGB 值指定,表示矩形边框的颜色。RGB 对应的颜色可以使用 https://www.sioe.cn/yingyong/yanse-rgb-16/ 查看。opencv中读入图片数据是按照b,g,r的顺序,所以(0,0,255)代表红色,(0,255,0)代表绿色。可以看到下面的识别框为绿色。
第五个参数 thickness 参数表示矩形边框的厚度,即线条的粗细值,为正值时代表线条的粗细(以像素为单位),为负值时边框实心,如 CV_FILLED,则表示填充整个矩形。
第六个参数 lineType 表示线型。如果指定为 CV_AA,则是使用高斯滤波器画反锯齿线。
第七个参数 shift 参数表示点坐标中的小数位数。

3、效果分析

随着视频播放,人物位置的改变,随机从视频中截取了两张图片,都能够检测到人脸。
在这里插入图片描述
在这里插入图片描述

参考博文

基于opencv的人脸检测(图片、视频、摄像头)
opencv cv2.rectangle 参数含义
使用的视频: https://haokan.baidu.com/v?pd=wisenatural&vid=8158766618890451729

本文先写到这里,欢迎大家批评指正!

猜你喜欢

转载自blog.csdn.net/weixin_47296493/article/details/129903675
今日推荐