欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

人脸检测识别opencv+python实现(Haar分类器)

程序员文章站 2023-11-07 08:15:40
PS. 由于本人工作上事情较多,有关于Haar分类器用于人脸检测的学习,已经初步学习并了解原理与过程。 但是暂时没有时间来整理所有知识点的博客。 下面将着重介绍一下几个步骤,然后推荐一些博客。 并附上用haar+级联分类器的方法,opencv+python的实现,用于人脸检测。 后期有空了再补上详细原理步骤!!!!!!一、haar分类器用于人脸检测的几个关键点:1. Haar-like 特征2. Haar-like特征的计算—积分......

PS. 由于本人工作上事情较多,有关于Haar分类器用于人脸检测的学习,已经初步学习并了解原理与过程。

       但是暂时没有时间来整理所有知识点的博客。

      下面将着重介绍一下几个步骤,然后推荐一些博客。

      并附上用haar+级联分类器的方法,opencv+python的实现,用于人脸检测。

       后期有空了再补上详细原理步骤!!!!!!

 

一、haar分类器用于人脸检测的几个关键点:

1. Haar-like 特征
2. Haar-like特征的计算—积分图
3. 计算Haar特征值
4. Haar特征值归一化(也可标准化)
5. Adaboost级联分类器 (人脸训练 + 检测)

二、几个比较好的博客介绍:

         人脸检测之Haar分类器

         集成学习adboost详解

         opencv关于haar人脸检测的官方文档

三、通俗的理解haar分类器用于人间检测的五大步骤

1、准备人脸、非人脸样本集;

2、计算特征值和积分图;

3、筛选出T个优秀的特征值(即最优弱分类器);

4、把这个T个最优弱分类器传给AdaBoost进行训练。

5、级联,也就是强分类器的强强联手。

四、opencv + python  的实现:

1、进入python安装过所有包的那个文件夹:

    比如我的是 D:\XXX\XXX\python3.6/site-packages

2、选择cv2 文件夹 进入,在选择data文件夹进入:里边有很多的可用的一些opencv已经弄好了的方法。

人脸检测识别opencv+python实现(Haar分类器)

 3、 我们把如下两个文件复制到项目里备用(他们是用haar检测人脸,是opencv官方已经训练好的模型,直接调用)                                  haarcascade_frontalface_default.xml, haarcascade_eye.xml

 4、 上代码:


"""
haar特征检测人脸(opencv)
"""

import cv2
import numpy as np
haar_front_face_xml = 'xml_file/haarcascade_frontalface_default.xml'
haar_eye_xml = 'xml_file/haarcascade_eye.xml'

# 1.静态图像中的人脸检测
def StaticDetect(filename):
     # 创建1个级联分类器 加载1个 .xml 分类器文件. 它既可以是Haar特征也可以是LBP特征的分类器.
     face_cascade = cv2.CascadeClassifier(haar_front_face_xml)
     # 加载图像
     img = cv2.imread(filename)
     # 转换为灰度图
     gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
     # 人脸检测:scaleFactor,minNegihbors,分别表示人脸检测过程中每次迭代时图像的压缩率以及
     # 每个人脸矩形保留近似数⽬的最⼩值
     # 返回人脸矩形数组
     faces = face_cascade.detectMultiScale(gray_img, 1.3, 5)
     for (x, y, w, h) in faces:
         # 在原图像上绘制矩形
         img = cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
     cv2.namedWindow('Face Detected!')
     cv2.imshow('Face Detected!', img)
     cv2.waitKey(0)
     cv2.destroyAllWindows()


# 视频中的人脸检测
def DynamicDetect():
     '''
     打开摄像头,读取帧,检测帧中的人脸,扫描检测到的人脸中的眼睛,对⼈脸绘制蓝蓝色的矩形框,对人眼绘制绿⾊的矩形框
     '''
     # 创建1个级联分类器 加载1个 .xml 分类器⽂件. 它既可以是Haar特征也可以是LBP特征的分类器.
     face_cascade = cv2.CascadeClassifier(haar_front_face_xml)
     eye_cascade = cv2.CascadeClassifier(haar_eye_xml)
     # 打开摄像头
     camera = cv2.VideoCapture(0)
     cv2.namedWindow('Dynamic')
     while True:
         # 读取1帧图像
         ret, frame = camera.read()
         # 判断图片读取成功?
         if ret:
             gray_img = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
         # 人脸检测
         faces = face_cascade.detectMultiScale(gray_img, 1.3, 5)
         for (x, y, w, h) in faces:
             # 在原图像上绘制矩形
             cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2)
             roi_gray = gray_img[y:y + h, x:x + w]
             # 眼睛检测
             eyes = eye_cascade.detectMultiScale(roi_gray, 1.03, 5, 0, (40, 40))
             for (ex, ey, ew, eh) in eyes:
                 cv2.rectangle(frame, (ex + x, ey + y), (x + ex + ew, y + ey + eh), (0, 255, 0),2)
         cv2.imshow('Dynamic', frame)
         # 如果按下q键则退出
         if cv2.waitKey(100) & 0xff == ord('q'):
             break
     camera.release()
     cv2.destroyAllWindows()


if __name__ == '__main__':
    filename = 'data/mayun.jpg'
    # StaticDetect(filename)
    DynamicDetect()

!!! 需要注意的是: xml文件 和 图片路径 要写对,不然会报错。

5、运行效果:

(1)静态图片检测人脸,详见主函数调用的 StaticDetect(filename)方法 

         原图  ----->

人脸检测识别opencv+python实现(Haar分类器)

结果图 (把大佬们的人脸,都检测出来了 - - ) -------->

人脸检测识别opencv+python实现(Haar分类器)

(2)视频中实时检测人脸:详见主函数调用的 DynamicDetect() 方法 

运行效果  (本人噢   检测人脸和眼睛  哈哈哈)  由于是晚上,光线不太好   ------->

人脸检测识别opencv+python实现(Haar分类器)

参考:

https://github.com/datawhalechina/team-learning/blob/master/03%20%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%A7%86%E8%A7%89/%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%A7%86%E8%A7%89%E5%9F%BA%E7%A1%80%EF%BC%9A%E5%9B%BE%E5%83%8F%E5%A4%84%E7%90%86%EF%BC%88%E4%B8%8B%EF%BC%89/Task03%20Haar%E7%89%B9%E5%BE%81%E6%8F%8F%E8%BF%B0%E7%AE%97%E5%AD%90.md

 

本文地址:https://blog.csdn.net/hzy459176895/article/details/107073992