基于Python下的OpenCv人脸识别模拟

  • 1.Pycharm下OpenCv的安装
  • 2.人脸识别的原理
    • 目标实现
    • 基本原理
  • 3.代码实现:
    • 实现步骤
    • 参考示意图:

1.Pycharm下OpenCv的安装

  • CSDN上找到的博主的教程,感觉蛮不错,如果有疑问再留言私我。 OpenCv安装教程

2.人脸识别的原理

参考博主:本文多翻译自此。

目标实现

目标
在本Blog中

  • 我们将会用基于Haar Fearture-based Cascade Classifiers来进行人脸检测
  • 我们会对眼睛等其它部位进行扩展

基本原理

原理

  • Haar Fearture-based Cascade Classifiers是一种十分有效的物体检测方法。它是由Paul Viola and Michael Jones于2001年在他们的论文中提出的。(论文我还未看,看之后会给大家补充)他们利用了一种名为“Boosted Cascade”的级联方式,仅用一些简单的特征参考,就能实现快速的物体检测。

“Rapid Object Detection using a Boosted Cascade of Simple Features”

  • 这是一种机器学习的方法。其中的级联函数是通过利用许多包含人脸的positive的图片,与不包含人脸的一些negative的图片来进行训练得到的。经过训练后,可以用来在其它图片中进行物体的检测。

  • 这里,我们将用人脸检测作为例子进行讲解。最初,该算法需要很多包含人脸的positive的图片,与不包含人脸的一些negative的图片进行分类训练。之后,我们需要利用如下图所示的haar features从中提取出一些额外的特征。就像我们的卷积核( convolutional kernel) 一样,每个特征都是一个单一的数值,利用黑色矩形区域内像素之和减去白色矩形内像素之和而获得。图片如下所示:

Kernel可以把数据集从低维映射到高维,使得原来线性不可分的数据集变得线性可分。

  • 但在这些所有的我们需要计算的特征中,考虑到所有Kernel函数的位置和大小尺寸.我们需要做出很多次的计算,例如一个24x24的窗口都会有超过160000个特征进行计算,而每一个特征的计算都要参考上面的haar features的计算方法,因此计算量十分的大。为了解决这个问题,他们创造出一种
    integral images(该方式理论也在论文中,还未细看,之后会讲解)
    对图像进行积分的方式来解决该问题。它简化了像素之和的计算,使操作仅用四个像素来解决问题,从而使得运算超级快。
  • 但是在这些所有的特征中,大多数是没有什么关联的。例如下图,上面两个图显示了很好的两个特征,第一个特征似乎可以被用来辨别眼睛的区域,因为我们知道,眼睛区域是比脸颊部分更黑一点。第二部分可以用来辨别鼻子区域,鼻翼两侧的阴影会更黑。
  • 但是,这些相同的窗口特征若放到如脸颊或耳朵附近则无法体现出特征值之间的关联性,因此如何从160000+的特征值中选取有用的特征值也是一门学问。
    接下来我们将见到
    Adaboost,它被很好的用于解决了上述的问题
  • 对于上述问题,我们将在训练图像上分析每一个特征。而对于这其中的每一个特征,会找到一个最佳阈值来区分 the faces to positive and negative。当然,在进行图片分类时肯定会出现错误的分类,因此我们要选取一个最小的出错比例,意味着这些特征值可以最好的对图片进行分类(有人脸和无人脸)。而这个过程的处理是繁杂的,处理过程如下:起初每张图片都是等权重的,在每次分类后,那些被错误分类的图片的权重值将会上升。之后重复相同的过程,可以计算出新的出错比例和权重值。知道达到目标的准确率和出错比例时,该循环过程终止。此时可以得到需要的特征数。
  • 最终的分类器可以用这些若分类器的加权和来表示。之所以称其为弱分类器,是因为它本身不能对图像进行分类,而是要与其他一起相结合来形成一个强分类器。论文中提到,哪怕有两百个特征都能提供到95%的正确率。而他们最终大概有设置了6000个特征,比之前的160000少了很多,可以说是一个大的收获。
  • 当然,在实际的处理图片中还是有很多图片的大多数区域都是非脸部区域。因此,最好能有一个方法来使其识别一个窗口内的区域是否是一个有脸部图像,如果没有的话,可以将其一次性丢弃,不再对该区域进行处理。从而将注意力集中到有脸部区域的地方来。因此我们能有更多的时间来对面部区域进行分析。
  • 对于此,论文中介绍了一种
    Cascade of Classifiers的概念。及级联分类器的概念。它不是一次利用了6000种特征进行分析,而是对这些特征进行了分组。之后将其一组又一组的进行应用分析。例如,首先第一组有少量的特征,如果第一组验证该窗口为一个非脸部的区域,则对该窗口直接抛弃,不再考虑之后其余几组的特征。如果第一组验证通过,则接着进行之后的几组验证,直到所有的都验证完毕之后,我们可认定其是一个脸部。
  • 作者的人脸检测大概有6000多个特征,并将这些特征分成了38组,在最初的5组中分别有 1,5,10,25,25,50个特征。(上面的那个眼睛和鼻子的那两个用来衡量的特征实际上就是利用Adaboost得到的最佳的特征)。根据作者所说,每个子窗口平均评价6000多个特征中的10个特征。

3.代码实现:

该方法不仅能够进行人脸检测,也能对汽车,房子等各种物体进行检测。OpenCv提供了训练和检测的方式,如果你想要训练一种单独的物体检测方式,你可以详细的学习一下级联分类器。

这里我们将对人脸进行识别检测,因为OpenCv里已经有许多预先分类好的人脸分析,例如眼睛,嘴巴等等。那些XML文件都在Github上可以找到,因为Github在国内下载较慢,故大家可以在CSDN上进行下载,也可私聊我单独给发送。

实现步骤

  1. 首先需要加载所需的XML分类器,之后用灰度模式(可以简便运算)导入我们的图片或者视频即可。
  2. 如果找到人脸的情况下,则记录下人脸的所在区域,之后可以创造一个
    ROI region of interest,来着重分析脸部区域,方便找到眼睛所在位置。

下面展示一些 OpenCv代码

import cv2filepath = "img/zhouxingchi.jpg"
img = cv2.imread(filepath)
# 转换灰色
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 显示图像
# OpenCV人脸识别分类器
face_cascade = cv2.CascadeClassifier("opencv-master/data/haarcascades/haarcascade_frontalface_default.xml"
)
eye_cascade = cv2.CascadeClassifier('opencv-master/data/haarcascades/haarcascade_eye.xml')
color = (0, 255, 0)  # 定义绘制颜色
# 调用识别人脸
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32))for (x,y,w,h) in faces:  # 单独框出每一张人脸#w,h分别代表脸部区域的宽和高# 框出人脸img = cv2.rectangle(img, (x, y), (x + h, y + w), color, 2)# # 左眼# cv2.circle(img, (x + w // 4, y + h // 4 + 30), min(w // 8, h // 8),#            color)# #右眼# cv2.circle(img, (x + 3 * w // 4, y + h // 4 + 30), min(w // 8, h // 8),#            color)#嘴巴# cv2.rectangle(img, (x + 3 * w // 8, y + 3 * h // 4),#               (x + 5 * w // 8, y + 7 * h // 8), color)roi_gray=gray[y:y+h,x:x+w]roi_color=img[y:y+h,x:x+w]eyes = eye_cascade.detectMultiScale(roi_gray)for (ex,ey,ew,eh) in eyes:cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(255,0,0),2)
cv2.imshow("image", img)  # 显示图像
c = cv2.waitKey(100000)
cv2.destroyAllWindows()

参考示意图:

结果貌似不是那么理想,可以后续看看哪里能更改,着重在detectMultiScale上更改。这是我选了几组图片进行测试的结果。



看来蒙娜丽莎还是非常完美的了。

而卡卡罗特则完全没有被识别出来……

基于Python下的OpenCv人脸检测相关推荐

  1. Python下应用opencv 人脸检测

    使用OpenCV's Haar cascades作为人脸检测,因为他做好了库,我们只管使用. 代码简单,除去注释,总共有效代码只有10多行. 所谓库就是一个检测人脸的xml 文件,可以网上查找,下面是 ...

  2. 基于Haar分类器的OpenCV人脸检测实例

    一.人脸的Haar特征分类器是什么 人脸的Haar特征分类器就是一个XML文件,该文件中会描述人脸的Haar特征值.当然Haar特征的用途可不止可以用来描述人脸这一种,用来描述眼睛,嘴唇或是其它物体也 ...

  3. 基于python、虹软实现人脸检测,人脸识别

    2019独角兽企业重金招聘Python工程师标准>>> 虹软的人脸识别技术也是很强的,重要的是他免费提供了离线的sdk,还提供了实例,这个是目前几家研究人脸识别的大公司里面少有的.识 ...

  4. 基于(Python下的OpenCV)图像处理的喷墨墨滴形状规范检测

    通过图像处理,分析数码印花的喷头所喷出来的墨滴形状,与标准墨滴形状对比分析,来判断墨水及其喷头设备的状态,由两部分构成 PS:获取墨滴形状照片和标准墨滴形状照片都是手绘的,将就的看吧,主要功能已经实现 ...

  5. 基于Python,dlib实现人脸关键点检测

    @代码实现及安装过程 基于Python,dlib实现人脸关键点检测 dilb 在做人脸检测人脸识别方面用到比较多的.face_recognition就是基于dlib实现的. 这篇文章将使用Python ...

  6. .NetCore——基于OpenCV人脸检测

    .NetCore--基于OpenCV人脸检测 一.介绍 在.NetCore中,基于OpenCV实现对静态图片的人脸识别,检测人脸是否存在,且存在的数量.注: 不能自动学习人脸特征. 二.使用 首先引入 ...

  7. 基于Python下的Apriltag检测

    简 介: 在Windows下下载Aprilttags检测工具包,对于图片中的Apriltag检测进行了初步的实验. 关键词: Apriltag #mermaid-svg-ycUj7DuM4cfFAv9 ...

  8. 基于Python的百度AI人脸识别API接口(可用于OpenCV-Python人脸识别)

    基于Python的百度AI人脸识别API接口(可用于OpenCV-Python人脸识别) 资源: download.csdn.net/download/weixin_53403301/43644312 ...

  9. OpenCV与图像处理学习十七——OpenCV人脸检测(含代码)

    OpenCV与图像处理学习十七--OpenCV人脸检测(含代码) 一.人脸识别概要 1.1 人脸检测 1.2 人脸对齐(Face Alignment) 1.3 人脸特征提取(Face Feature ...

最新文章

  1. Linux下wine用法
  2. Linux下部署开源版“禅道”项目管理系统
  3. javaScript(1):基础部分
  4. 用我对HTML的点点理解来做个简单的百度首页
  5. 中毒,重装,杀毒……最近一段时间,很烦的一件事,不断重复……
  6. 【ECharts系列|01入门】 从入门到天黑【入门级教程实战】
  7. vue部署到服务器_利用Gulp实现代码自动化部署
  8. 统计进仓和出仓数量随时间变化的剩余数量流程图
  9. 【SpringMVC】SpringMVC : 注解 @EnableWebMvc
  10. 【优化算法】世界杯优化算法(WCOA)【含Matlab源码 1427期】
  11. 使用AJAX中的get请求中文乱码的问题
  12. 阿里小蜜:语音识别、语义分析、深度学习在手机淘宝的实战分享
  13. 关于港股通交易的规则
  14. 怎么获得华为手机的产品sn号码imei号
  15. 初识网络原理——网络原理的基本概念
  16. Cherry机械键盘、开发板、无线鼠标等100份好礼,回帖就送!
  17. win10一按右键就闪屏_六种方法教你如何解决win10笔记本屏幕闪烁问题?
  18. python:继承,重用代码
  19. Latest - 2021 - 08 Giuhub Access
  20. 【子网划分】求子网网络前缀、子网地址、每个子网可以分配给主机使用的最小地址和最大地址

热门文章

  1. 用户和计算机硬盘系统,技术宅教你一个固态硬盘硬盘装几十个电脑操作系统
  2. WiFi与惯导融合定位其一:通过安卓手机获取路由器数据(MAC、RSSI)
  3. 利用pytorch来深入理解CELoss、BCELoss和NLLLoss之间的关系
  4. IOException异常:使用exec()方法,必须捕捉此异常
  5. 马的哈密顿周游(分治)
  6. 计算机控制技术王超,王超-电气自动化与信息工程学院官网
  7. ImportNew 笔记
  8. 2021 年元旦福利,小伙伴们来领现金红包
  9. annaconda下载
  10. C语言strtod函数DEMO