Python实战案例,图像识别技术OpenCV,Python实现猫脸检测
前言:
利用Python+OpenCV实现猫脸检测。
让我们愉快地开始吧~~~
开发工具
Python版本:3.6.4
相关模块:
cv2模块;
以及一些Python自带的模块。
环境搭建
安装Python并添加到环境变量,pip安装需要的相关模块即可。
原理简介
简单地讲一讲Haar分类器,也就是Viola-Jones识别器。
详细的原理说明可参考相关文件中的两篇论文:
Rapid Object Detection using a Boosted Cascade of Simple Features;
Robust Real-Time Face Detection.
(1)Haar-like特征
Haar-like矩形特征是用于物体检测的数字图像特征,由两个或者多个相邻的黑白矩形组合而成,矩形的特征值是白色矩形的灰度值之和减去黑色矩形的灰度值之和。一般地,我们认为矩形特征对一些简单的图形结构(线段、边缘)等较为敏感:
具体到猫脸检测而言,我们认为把这样的矩形放到一个非猫脸区域后获得的特征值与放到一个猫脸区域后获得的特征值是不同的。
利用上述基于特征的检测算法,不仅能够编码特定区域的状态,而且效率高于基于像素的检测算法。
(2)积分图
下面我们来考虑一下如何计算矩形的特征值。对图像中的任意一点A(x, y),定义该点的积分图为其左上角的所有像素值之和,即:
因此,要计算矩形模板的特征值,也就是计算两个区域之间的像素和之差,只需要用特征区域端点的积分图来进行简单的加减运算就可以了:
(3)Haar分类器
Haar分类器是一个监督学习分类器,要进行目标检测,首先要对图像进行直方图均衡化和归一化处理,然后检测里面是否包含要检测的物体。
流程框架图为(Haar分类器本质上由Haar特征提取器、离散强分类器以及强分类级联器组成):
Haar分类器使用Adaboost算法,但是把它组织为了筛选式的级联分类器,在任意一级计算中,一旦获得输入内容不在检测类中的结论,便终止计算,只有通过所有级别的分类器,才可认为检测到了目标物体,以此来提高检测效率。
关于AdaBoost算法,我就不展开介绍了,有兴趣的同学可以自己查找相关资料进行学习。以后有时间我再对其进行详细的介绍。
(4)适用范围
适用于“基本刚性”的物体检测,如脸、汽车、人体和自行车等等。
(5)总结
Viola-Jones目标检测框架的核心思想是通过滑动窗口扫描图像(多尺度的扫描),然后将每个窗口的Haar特征值输入到筛选式的级联分类器中来判断该窗口内是否含有目标物体以实现目标检测。
具体实现
OpenCV中内置了基于Viola-Jones目标检测框架的Haar分类器,并提供了猫脸检测预训练好的模型。因此实现起来十分简单。
具体实现过程详见相关文件中的源代码。
效果演示
使用方式:
修改源代码中的图片名为自己需要检测的图片:
在cmd窗口运行DetectCatFace.py文件即可。
效果:
原图1:
检测结果1:
原图2:
检测结果2(并不能很好地区分狗狗和猫咪):
文章到这里就结束了,感谢你的观看,关注我每天分享Python案例系列,下篇文章分享分析个人音乐收藏。
为了感谢读者们,我想把我最近收藏的一些编程干货分享给大家,回馈每一个读者,希望能帮到你们。
干货主要有:
① 2000多本Python电子书(主流和经典的书籍应该都有了)
② Python标准库资料(最全中文版)
③ 项目源码(四五十个有趣且经典的练手项目及源码)
④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)
⑤ Python学习路线图(告别不入流的学习)
All done~完整源代码+干货详见个人简介或者私信获取相关文件。。