IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> CV16 人脸检测:Haar级联 -> 正文阅读

[游戏开发]CV16 人脸检测:Haar级联


本章将讲述CV史上最经典的算法Haar级联🤤

  • 什么是Haar级联?
  • 图片和视频中的人脸检测
  • face_cascade.detectMultiScale()函数

2001年,Viola和Jones两位大牛发表了经典的《Rapid Object Detectionusing a Boosted Cascade of Simple Features》和《Robust Real-Time Face Detection》,在AdaBoost算法的基础上,使用Haar-like小波特征和积分图方法进行人脸检测。他们设计了针对人脸检测更有效的特征,并对AdaBoost训练出的强分类器进行级联。这可以说是CV史上里程碑式的一笔了,也因此当时提出的这个算法被称为Viola-Jones检测器。随后这两位大牛将这个检测器进行了扩展,最终形成了OpenCV现在的Haar分类器。

Haar级联简介

因为Haar级联是在机器学习AdaBoost、Boosting的基础上提出的,由于我还没有学过机器学习,所以这部分的内容日后再描述,我将根据自己的理解浅显地解释一下🧐

什么是Haar?

人脸五官有明显的区别。

例如:

  1. 眼睛要比脸颊颜色要深
  2. 鼻梁两侧比鼻梁颜色要深
  3. 嘴巴比周围颜色要深
  4. 眼睛区域往往比脸颊区域暗
  5. 鼻子区域比眼睛区域亮

so on…

而Haar就是一个人脸的模板,刚好可以契合人脸的图像特征

而这些特征,不会出现在其它物体上

什么是级联?

多组弱分类器,通过不断分类,最终筛选出检测目标

级联树

多级弱分类器与一个强分类器的效果相似,但级联类似于条件概率

级联的弱分类器的复杂度逐渐增加来提高算法的识别准确度

优劣对比

  • 优点:速度极快

  • 缺点:

    1. Haar 级联不具有旋转不变性,即不认为侧面照与正面照是相同的,所以需要最有效的正面图像的脸;
    2. 精确度低

获取Haar级联数据

D:/opencv/CV/Haar/cascades/haarcascade_frontalface_default.xml

xml文件路径

  • haarcascade_frontalface_default.xml:检测面部
  • haarcascade_eye.xml:检测左眼和右眼
  • haarcascade_smile.xml:检测面部是否存在嘴部
  • haarcascade_eye_tree_eyeglasses.xml:检测是否带墨镜🕶
  • haarcascade_frontalcatface.xml:检测猫脸
  • haarcascade_frontalcatface_extended.xml:检测猫脸延伸
  • haarcascade_frontalface_alt.xml:检测猫脸属性
  • haarcascade_frontalface_alt_tree.xml
  • haarcascade_frontalface_alt2.xml
  • haarcascade_fullbody.xml:检测全身
  • haarcascade_lefteye_2splits.xml:检测左眼
  • haarcascade_licence_plate_rus_16stages.xml:检测证件
  • haarcascade_lowerbody.xml:检测下半身
  • haarcascade_profileface.xml
  • haarcascade_righteye_2splits.xml:检测右眼
  • haarcascade_russian_plate_number.xml:检测俄罗斯字母车牌号
  • haarcascade_upperbody.xml:检测上半身

这些xml文件,其实就是机器学习中的模型

检测人脸

在静态图片上人脸检测

import cv2
import numpy as np

face_cascade = cv2.CascadeClassifier('D:/opencv/CV/Haar/cascades/haarcascade_frontalface_default.xml')
img = cv2.imread('face2.jpg')
img = cv2.resize(img,(720,720),interpolation=cv2.INTER_LANCZOS4)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray,1.08,5)
for(x,y,w,h) in faces:
    img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)

cv2.imshow('face',img)
cv2.waitKey()
cv2.destroyAllWindows()

检测美女的脸

CascadeClassifier检测的基本原理

xml中存放的是训练后的特征池,特征size大小根据训练时的参数而定,检测的时候可以简单理解为就是将每个固定大小的检测窗口与输入图像的同样大小区域比较,如果匹配那么就记录这个矩形区域的位置。

然后滑动窗口,检测图像的另一个区域。

Haar级联检测示例

重复操作。由于输入的图像中特征大小不定,比如在输入图像中眼睛是25x25的区域,而训练时的是50x50,那么只有当输入图像增大到一半的时候,才能匹配上,所以这里还有一个逐步增大图像,也就是制作图像金字塔的流程。而每次增大的比例由scaleFactor决定

face_cascade.detectMultiScale()函数

功能:检测目标,返回目标位置的四个顶点

输入参数

  1. img:输入图像,灰度图运算速度更快
  2. scaleFactor:每次循环增大的比例
  3. minNeighbors:表示构成检测目标的相邻矩形的最小个数(默认为3个),数值越大人脸被筛选的难度越大,同样也越精确
  4. minSize=(120,120):小于这个范围的矩形,就不被认定为检测目标

示例faces = face_cascade.detectMultiScale(gray,1.08,5,minSize=(120,120))

在视频上进行人脸检测

import cv2
import numpy as np

face_cascade = cv2.CascadeClassifier('D:/opencv/CV/Haar/cascades/haarcascade_frontalface_default.xml')
camera = cv2.VideoCapture(0)
while(cv2.waitKey(1)==-1):
    success,img = camera.read()
    if success:
        gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
        faces = face_cascade.detectMultiScale(gray,1.08,5,minSize=(120,120))
        for(x,y,w,h) in faces:
            img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
        cv2.imshow('face',img)

cv2.destroyAllWindows()

参考资料

(四十八)Haar级联检测器

haar分类器原理和opencv实现

使用OpenCV,Haar级联检测器进行面部、眼睛、嘴部检测

opencv人脸检测_cascade.detectMultiScale参数详解
OpenCV,Haar级联检测器进行面部、眼睛、嘴部检测

opencv人脸检测_cascade.detectMultiScale参数详解

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-04-06 16:21:40  更:2022-04-06 16:22:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/16 19:46:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码