栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

OpenCV-人脸识别

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

OpenCV-人脸识别

文章目录
  • 人脸识别
    • detectMultiScale
    • 示例
    • 示例

人脸识别

使用Haar分类器进行面部检测

  • Haar特征分类器对象检测技术
    它是基于机器学习的,通过使用大量的正负样本图像训练得到一个cascade_function,最后再用它来做对象检测

    如果你想实现自己的面部检测分类器,需要大量的正样本图像(面部图像)和负样本图像(不含面部的图像)来训练分类器。可参考https://docs.opencv.org/2.4/doc/user_guide/ug_traincascade.html,这里不做介绍,现在我们利用OpenCV已经训练好的分类器,直接利用它来实现面部和眼部检测。

  • 主要步骤:

    1. 加载xml分类器,并将图像或者视频处理成灰度格式 cv.CascadeClassifier()
    2. 对灰度图像进行面部检测,返回若干个包含面部的矩形区域 Rect(x,y,w,h)face_detector.detectMultiScale()
    3. 创建一个包含面部的ROI,并在其中进行眼部检测
  • 重要方法分析:def detectMultiScale(self, image, scaleFactor=None, minNeighbors=None, minSize=None, maxSize=None)
    原理:检测输入图像在不同尺寸下可能含有的目标对象
    #minSize – Minimum possible object size. Objects smaller than that are ignored.
    #maxSize – Maximum possible object size. Objects larger than that are ignored.
    入参:
    1)image:输入的图像
    2)scaleFactor:比例因子,图像尺寸每次减少的比例,要大于1,这个需要自己手动调参以便获得想要的结果
    3)minNeighbors:最小附近像素值,在每个候选框边缘最小应该保留多少个附近像素
    4)minSize,maxSize:最小可能对象尺寸,所检测的结果小于该值会被忽略。最大可能对象尺寸,所检测的结果大于该值会被忽略
    返回:若干个包含对象的矩形区域

detectMultiScale 示例
def face_detection(image):
    """人脸识别和人眼识别"""
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)  # 在灰度图上进行识别
    # 人脸xml分类器
    face_detector = cv.CascadeClassifier(r"C:Users22164AppDataLocalProgramsPythonPython39Libsite-packages"
                                         r"cv2datahaarcascade_frontalface_alt_tree.xml")
    # 人眼xml分类器
    eyes_detector = cv.CascadeClassifier(r"C:Users22164AppDataLocalProgramsPythonPython39Libsite-packages"
                                         r"cv2datahaarcascade_eye.xml")
    faces = face_detector.detectMultiScale(gray, 1.01, 5)  # 检测目标对象(人脸)
    for x, y, w, h in faces:
        img = cv.rectangle(image, (x, y), (x + w, y + h), (0, 0, 255), 2)  # 红色矩形框框出人脸
        roi_gray = gray[y:y + h, x:x + w]
        roi_color = img[y:y + h, x:x + w]
        
        # 在人脸识别基础上进行人眼识别
        eyes = eyes_detector.detectMultiScale(roi_gray, 1.3, 5)  # 检测目标对象(人眼)
        for ex, ey, ew, eh in eyes:
            cv.rectangle(roi_color, (ex, ey), (ex + ew, ey + ey), (0, 255, 0), 2)  # 绿色矩形框框出人眼

    cv.imshow("result", image)

示例
def video_detection():
    """打开摄像头进行人脸和人眼检测"""
    capture = cv.VideoCapture(0)
    cv.namedWindow("result", cv.WINDOW_AUTOSIZE)
    while True:
        ret, frame = capture.read()
        frame = cv.flip(frame, 1)
        face_detection(frame)
        c = cv.waitKey(10)
        if c == 27:
            break
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/331335.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号