上一篇我们初步分析了下示例代码facedetector的程序参数解析部分。其中参数解析的过程如下:

其中第4步黄色标注的部分cascadeName,是我们人脸识别分类器的主要参数。
在openCV中,实现了著名的haar特征检测算法,而依托该算法分类器,我们可以实现人脸识别、定位。

该算法基于特征模板的滑动计算图像特征,从而区分物体的显著轮廓。

这些特征模板形似以下图像:

试想用这些黑白二值图像”蒙”在你的图像或部分图像上,然后你原来的图像被分成“黑”“白”两类区域,最后用黑色区域和白色区域的像素进行简单的加减运算,便能得到图像的基本特征。

例如,我们将模板窗口(3)“蒙”在鼻子部位,便能得到相契合的特征,将模板窗口(4)放在双眼部位,同样能得到与双眼部位契合的特征。

但是如何根据不同图像来确定特征模板窗口的大小,和它们应该放置的位置呢。比如上图,我们怎么知道将特定大小的“上黑下白”特征模板固定在图像的高度3/4上?

答案就是,我们让不知劳累的计算机,测试各种位置和大小。

这是一个巨大的工作量,首先我们如果确定具体特征模板窗口大小为24,24。那么我们就得将待检测图像分为若干个24,24大小区域,试图分别用不同特征模板检测*区域图像是否“匹配”某特征,那么单单一个窗口匹配次数是大于160000,这依然将是一个巨大的工作量。

但如果引入级联分类器——Cascade Classifiers,那么工作量就会极大的缩减。

拿人脸检测来讲,先用一些特征,确定该区域图像“有脸”以及“无脸“,丢掉”无脸“部分,然后再用其他特征检测,来进一步确定特征的是否存在,以及确定其特征位置。

这个过程使得我们匹配特征的过程产生一个“级联“的工作模式,每往下走一层,就会”丢掉“一些无关的区域,这样特征就越来越精确。

从上述过程当中我们可以看到,单独一个特征不能确定最终结果,而是多个特征的级联联合使得最终我们能够做出一个精确的判断。

我们把单个特征的检测叫做弱分类器(因为它不能单独确定最终结果),而把这些弱分类器级联成的最终分类器成为强分类器。可见最终的强分类器是在集成算法的基础上构建的。

好吧,言归正传,openCV实现了这个强分类器,用CascadeClassifier类封装该分类器。你可以实例化该类对象,并设计一个训练计划,来训练想要的特征检测器。

对与人脸检测来说,openCV已经帮我们训练好了分类器,该分类器的参数数据保存在一个xml文件中。

在实际使用过程中,这个文件的路径将作为重要的参数和被检测图像一起传给CascadeClassifier对象,接着对被检测图像中人脸进行定位。

而上一篇中,解析出的参数cascadeName,正是这个文件路径

我们接着上一篇,继续往下做,得到cascadeName后,构造CascadeClassifier对象”cascade”。
然后利用classifier对被检测图像进行人脸预测。

同样,我们简化源代码,此次只对单张图像进行检测。

    //根据分类器模板路径cascadeName构造级联分类器(CascadeClassifier)对象"cascade"cv::CascadeClassifier cascade(cascadeName);//读入被检测图像Mat image = imread("D:/试验/test/baby.png");//定义灰度图像,用于暂存原图像对应的灰度图。Mat gray;//将原被检测图像从真彩色图像转换为灰度图cvtColor(image, gray, cv::COLOR_BGR2GRAY);//定义一个向量(数组),用于存放所检测出的人脸位置(注意:可能并不只有一个人脸)vector<Rect> faces;//启动检测cascade.detectMultiScale(gray,faces);//用红色矩形绘制人脸位置结果for (int i = 0; i < faces.size(); i++){cv::rectangle(image, faces[i], Scalar(255, 0, 0));}//显示最终被“标记”的图像imshow("检测人脸", image);//等待用户输入任意键结束程序waitKey();

运行结果:

最后发下关于类CasadeClassifier的官方文档解释,本篇博文多是对该文档的总结https://docs.opencv.org/3.4/db/d28/tutorial_cascade_classifier.html

上一篇-----程序参数解析

下一篇-----微笑识别

人脸识别示例代码解析(二)——人脸识别解析相关推荐

  1. Java植物名录程序_【人工智能】动物、植物、车型、菜品、LOGO识别示例代码

    可以体验以下功能的微信小程序 图像识别部分接口Java-API调用示例代码 https://gitee.com/xshuai/ai/不是完整的web项目大家没必要下载运行.复制|下载相关代码即可 准备 ...

  2. Android百度AI植物识别教程,微信开发+百度AI学习:植物识别(示例代码)

    直接上代码 服务端代码如下 private static readonly Baidu.Aip.ImageClassify.ImageClassify client = new Baidu.Aip.I ...

  3. java 条码识别_条码识别示例代码

    package api.jisuapi.barcode; import api.util.HttpUtil; import net.sf.json.JSONArray; import net.sf.j ...

  4. java条码识别技术_条码识别示例代码

    package api.binstd.barcode; import api.util.HttpUtil; import net.sf.json.JSONArray; import net.sf.js ...

  5. 动物识别系统代码python_人工智能-动物识别专家系统算法Python + Pyqt 实现

    #-*- coding: utf-8 -*- #Form implementation generated from reading ui file '动物识别专家系统.ui'# #Created b ...

  6. 基于视频的实时人脸识别(含代码)

    文章目录 介绍 思路介绍 运行环境介绍 模型介绍 人脸关键点预测器 人脸识别模型 效果展示 识别过程 代码 建立本地人脸库 人脸识别 介绍 思路介绍 无论是基于视频或者调用摄像头来完成人脸识别,其实是 ...

  7. java文字手写识别_【手写文字识别】-JavaAPI示例代码

    手写文字识别-JavaAPI示例代码 不知不觉手写文字识别百度已经开始邀测了.需要的小伙伴去申请了哦.申请方式加入文字识别群找PM.或者工单提交申请.都要说明自己的APPID哦. 接口地址:https ...

  8. 人体模型 java代码_【人体分析-人体关键点识别】-Java示例代码

    接口说明:http://ai.baidu.com/forum/topic/show/497747 人体关键点识别,即对于输入的一张图片(可正常解码,且长宽比适宜),输出图片中的所有人体的14个关键点, ...

  9. php调用ua_精准快速的UA识别PHP代码

    精准快速的UA识别PHP代码 function user_agent($ua) { //开始解析操作系统 $os = null; if (preg_match('/Windows NT 6.0/i', ...

  10. Python解析二维码、条形码

    Python解析二维码.条形码 1 前言 2 二维码知识小科普 2.1 什么是二维码 2.2 二维码的结构 2.3 二维码的绘制过程 3 Python解析二维码 3.1 准备工作: 3.2 pyzba ...

最新文章

  1. C#拉姆达(=)表达式
  2. 全球及中国生物质能利用产业现状调研及十四五建设布局规划报告2021-2027年
  3. c++远征之模板篇——函数模板、类模板
  4. jqc3ff继电器引脚图_单片机控制继电器驱动电路图原理分析
  5. Docker学习总结(41)——Docker Compose 的两种安装方式总结
  6. OpenCV-人像—酷感冷艳滤镜
  7. 统计学学生学python吗_用Python学习统计学基础-4
  8. 打造人脉关系网,成就事业
  9. 打开IIS管理器命令cmd
  10. 安卓开发调用python脚本_android开发调用python脚本
  11. 悬浮窗一个怎么够?微信新版本满足你的一心多用
  12. 在网站优化中怎么做好关键词密度?
  13. ipc通信-共享内存
  14. 多态的表现形式有哪些?
  15. 长春工业大学计算机研究生专业课,长春工业大学(专业学位)计算机技术研究生考试科目和考研参考书目...
  16. 向5岁小朋友解释什么是微服务
  17. C++方式实现人民币小写转大写
  18. 归并排序的python实现:递归与非递归
  19. 【SAP-MM】收货发票的总账科目是在哪里定义的?
  20. win10休眠_电脑休眠后无法唤醒怎么办?win10电脑休眠后无法唤醒的解决办法

热门文章

  1. [CM311-1A]-全网最全 Android 用户管理及用户应用权限
  2. visual assist x vs2019番茄助手
  3. 谷歌开源“穷人版”摘要生成NLP模型:训练成本低,只要1000个样本就能打败人类...
  4. 2019年7月28日解决战网BLZBNTBNA00000005BLZBNTBNA00000006BLZBNTBTS0000005DBLZBNTBTS0000004A 007D0 008A4 00840
  5. T-SQL 小数点转换百分数
  6. ASP.NET 路由实现页面静态化(附在线Demo和Source)
  7. 动网论坛 php版,动网即将推出第二代PHP版本论坛系统
  8. 如何使用TrueCrypt加密
  9. 怎么选最快dns服务器,如何选择DNS服务器网速最快?DNS优选win7win10系统设置方法图文教程...
  10. RNAcentral:非编码RNA数据库