1 基础

我们使用机器学习的方法完成人脸检测,首先需要大量的正样本图像(面部图像)和负样本图像(不含面部的图像)来训练分类器。我们需要从其中提取特征。下图中的 Haar 特征会被使用,就像我们的卷积核,每一个特征是一 个值,这个值等于黑色矩形中的像素值之后减去白色矩形中的像素值之和。

Haar特征值反映了图像的灰度变化情况。例如:脸部的一些特征能由矩形特征简单的描述,眼睛要比脸颊颜色要深,鼻梁两侧比鼻梁颜色要深,嘴巴比周围颜色要深等。

Haar特征可用于于图像任意位置,大小也可以任意改变,所以矩形特征值是矩形模版类别、矩形位置和矩形大小这三个因素的函数。故类别、大小和位置的变化,使得很小的检测窗口含有非常多的矩形特征。

得到图像的特征后,训练一个决策树构建的adaboost级联决策器来识别是否为人脸。

2.实现

OpenCV中自带已训练好的检测器,包括面部,眼睛,猫脸等,都保存在XML文件中,我们可以通过以下程序找到他们:

import cv2 as cv
print(cv.__file__)

找到的文件如下所示:

那我们就利用这些文件来识别人脸,眼睛等。检测流程如下:

  1. 读取图片,并转换成灰度图

  2. 实例化人脸和眼睛检测的分类器对象

    # 实例化级联分类器
    classifier =cv.CascadeClassifier( "haarcascade_frontalface_default.xml" )
    # 加载分类器
    classifier.load('haarcascade_frontalface_default.xml')
    
  3. 进行人脸和眼睛的检测

    rect = classifier.detectMultiScale(gray, scaleFactor, minNeighbors, minSize,maxsize)
    

    参数:

    • Gray: 要进行检测的人脸图像
    • scaleFactor: 前后两次扫描中,搜索窗口的比例系数
    • minneighbors:目标至少被检测到minNeighbors次才会被认为是目标
    • minsize和maxsize: 目标的最小尺寸和最大尺寸
  4. 将检测结果绘制出来就可以了。

主程序如下所示:

import cv2 as cv
import matplotlib.pyplot as plt
# 1.以灰度图的形式读取图片
img = cv.imread("16.jpg")
gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)# 2.实例化OpenCV人脸和眼睛识别的分类器
face_cas = cv.CascadeClassifier( "haarcascade_frontalface_default.xml" )
face_cas.load('haarcascade_frontalface_default.xml')eyes_cas = cv.CascadeClassifier("haarcascade_eye.xml")
eyes_cas.load("haarcascade_eye.xml")# 3.调用识别人脸
faceRects = face_cas.detectMultiScale( gray, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32))
for faceRect in faceRects: x, y, w, h = faceRect # 框出人脸 cv.rectangle(img, (x, y), (x + h, y + w),(0,255,0), 3) # 4.在识别出的人脸中进行眼睛的检测roi_color = img[y:y+h, x:x+w]roi_gray = gray[y:y+h, x:x+w]eyes = eyes_cas.detectMultiScale(roi_gray) for (ex,ey,ew,eh) in eyes:cv.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)
# 5. 检测结果的绘制
plt.figure(figsize=(8,6),dpi=100)
plt.imshow(img[:,:,::-1]),plt.title('检测结果')
plt.xticks([]), plt.yticks([])
plt.show()

结果:

我们也可在视频中对人脸进行检测:

import cv2 as cv
import matplotlib.pyplot as plt
# 1.读取视频
cap = cv.VideoCapture("movie.mp4")
# 2.在每一帧数据中进行人脸识别
while(cap.isOpened()):ret, frame = cap.read()if ret==True:gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)# 3.实例化OpenCV人脸识别的分类器 face_cas = cv.CascadeClassifier( "haarcascade_frontalface_default.xml" ) face_cas.load('haarcascade_frontalface_default.xml')# 4.调用识别人脸 faceRects = face_cas.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32)) for faceRect in faceRects: x, y, w, h = faceRect # 框出人脸 cv.rectangle(frame, (x, y), (x + h, y + w),(0,255,0), 3) cv.imshow("frame",frame)if cv.waitKey(1) & 0xFF == ord('q'):break
# 5. 释放资源
cap.release()
cv.destroyAllWindows()

总结

opencv中人脸识别的流程是:

  1. 读取图片,并转换成灰度图
  2. 实例化人脸和眼睛检测的分类器对象
# 实例化级联分类器
classifier =cv.CascadeClassifier( "haarcascade_frontalface_default.xml" )
# 加载分类器
classifier.load('haarcascade_frontalface_default.xml')
  1. 进行人脸和眼睛的检测
rect = classifier.detectMultiScale(gray, scaleFactor, minNeighbors, minSize,maxsize)
  1. 将检测结果绘制出来就可以了。

我们也可以在视频中进行人脸识别

openCV人脸识别简单案例相关推荐

  1. 图像识别——(java)opencv(人脸识别简单实现)

    人脸识别 package com.acts.opencv.demo;import javax.servlet.http.HttpServletRequest; import javax.servlet ...

  2. Python+Tensorflow+Opencv人脸识别(任意数量人脸)

    Python+Tensorflow+Opencv的人脸识别 简单的人脸识别 准备工作 开始--先获取必要的人脸图像 训练--分类吧 识别大脸 简单的人脸识别 一直想做机器学习的东东,最近由于工作的调整 ...

  3. OpenCV 人脸识别 源代码

    请直接查看原文 OpenCV 人脸识别 源代码 https://hotdog29.com/?p=553 在 2019年7月6日 上张贴 由 hotdog发表回复 opencv 人脸识别 在本教程中,您 ...

  4. 基于python opencv人脸识别的签到系统

    基于python opencv人脸识别的签到系统 前言 先看下效果 实现的功能 开始准备 页面的构建 功能实现 代码部分 总结 前言 一个基于opencv人脸识别和TensorFlow进行模型训练的人 ...

  5. opencv人脸识别(二)人脸检测

    前面一文我们介绍了电脑打开摄像头,没基础的小伙伴可以点下面链接去看看 opencv人脸识别(一)调用笔记本摄像头 本文我将介绍opencv人脸检测,我使用的是LBP特征级联分类器,这个模型是2016年 ...

  6. 【转】OpenCV人脸识别

    转自:https://blog.csdn.net/learning_tortosie/article/details/85121576 写在前面 这是Adrian Rosebrock博客的第二篇翻译, ...

  7. opencv 全志_移植opencv人脸识别到全志A10开发板上 +linux3.0内核

    移植opencv人脸识别 libz:    zlib-1.2.3 libjpeg:   jpegsrc.v6b libpng:   libpng-1.2.18 libyasm:   yasm-0.7. ...

  8. python人脸照片分类_Python OpenCV 人脸识别(一)

    前面介绍了Numpy模块,下面再介绍一个OpenCV模块,就基于这两个库看一下当下很火的人工智能是如何实现的,我们介绍几个:人脸识别(当下非常火的).音视频操作等等.今天先介绍一下静态图片的人脸识别, ...

  9. Python+OpenCV人脸识别签到考勤系统(新手入门)

    Python+OpenCV人脸识别签到考勤系统(新手入门) 前言 项目效果图 项目需要的环境 编译器 辅助开发QT-designer 项目配置 代码部分 核心代码 项目目录结构 后记 正式版改进 项目 ...

最新文章

  1. 一个撇脚的java压缩文件工具类
  2. 世界人口钟实时数据_中美面积人口数据对比,2020年8月,值得了解的细节
  3. apache-commons pool使用
  4. (笔记)涉及到的WinAPI函数
  5. rtk采点后如何导入cad_奥维地图和cad
  6. 常见算法的英文命名(排序、查找)
  7. OpenCV中feature2D学习——Shi-Tomasi角点检测
  8. OpenCASCADE开发环境搭建之OCCT库编译
  9. Exoplayer的详细使用UI篇
  10. Weka中数据挖掘与机器学习系列之Exploer界面(七)
  11. 特斯拉高管揭秘自动驾驶技术:48种神经网络上阵,最多可检测1000种物体
  12. 在数据为王的人工智能时代如何收集机器学习数据
  13. 链表的有序集合(java)
  14. 每日简报 5月16日简报新鲜事 每天一分钟 了解新鲜事
  15. Java爬取B站弹幕 —— Python云图Wordcloud生成弹幕词云
  16. 震惊:七成人对薪资不满,多劳并非能多得
  17. 深入浅出原核基因表达调控(乳糖操纵子、色氨酸操纵子)
  18. MapInfo数据表的基本操作与使用
  19. Maven下载安装-配置环境变量+setting.xml配置文件的修改
  20. SWUST OJ 953: 单链表的删除操作的实现

热门文章

  1. Week8 作业 C - 班长竞选 SCC Kosaraju HDU - 3639
  2. vista识别内存4g_Windows Vista中的语音识别-我在听
  3. 为什么说 Ubuntu 22.04 LTS 是史诗级的版本
  4. Android学习网站(1)
  5. 完全二叉树与满二叉树
  6. html5 canvas爆炸,html5 canvas彩色爆炸的小球动画特效
  7. 机器学习之Apriori算法
  8. Java面试题 java高级
  9. 2023年电工杯数学建模竞赛A题:电采暖负荷参与电力系统功率调节的技术经济分析具体建模过程以及代码结果
  10. 回归预测 | MATLAB实现MPR多元多项式回归