OpenCV检测篇(一):猫脸检测

OpenCV

OpenCV是时下最流行的基于C++的开源计算机视觉库,它功能丰富,函数众多,从最基本的读写图片,到简单的图像处理(比如降噪滤波、边缘检测、图像变换、特征提取等),再到更加高级的行人检测、人脸识别、文本识别等,尽皆包含。在OpenCV提供的函数的基础上,我们可以很方便地开发自己的应用,实现自己的算法。总的来说,就是OpenCV非常强大。具体有多强大?那得用了才知道。

很多要做人脸识别,要用到SIFT特征的人都问过的一个问题是,为什么配置好opencv之后,却找不到人脸识别的头文件,找不到SIFT在哪?这是因为OpenCV3.0之后,把一些还在最新的,但不是很稳定的,还在测试阶段的东西放在了contrib模块里面。而且官方默认不带contrib模块。不幸的是,我们最想用的人脸识别和SIFT特征都在contrib里面。如果需要用的话,那就需要自己编译了。opencv在Visual Studio上的配置和编译contrib的方法可以参考我之前的博客。今天的内容仍然是用Python语言,最近用Python用着比较顺手。

OpenCV的Python环境配置

显然,跟众多基于C++的库一样, OpenCV也是有Python接口的。Python下配置OpenCV可以用下面两种方法:

  1. 官网下载并安装OpenCV之后,在目录\opencv\build\python\2.7\x64之下有一个cv2.pyd文件,把它拷贝到python安装目录下的\Lib\site-packages文件夹下面即可。需要注意的是版本要对应,比如这里就要对应64位的Python2.7。而且目前官方自带的只有Python2.7版本的包。如果想要其他版本怎么办?
  2. 那就要说到一个神奇的网站了:Unofficial Windows Binaries for Python Extension Packages,这里面包含了几乎所有的能用到的Python库的安装包,比如我们需要的OpenCV,这里可以找到下面这么多版本,可以适应不同的需求,还有编译的contrib版本的,简直是惊喜。

按照自己的环境下载相应的版本,然后还是用pip安装,命令如下:

pip install *.whl

请把星号换成对应的名字。

我这里用的是Python3.6包含contrib的64位的包。

猫脸检测

喵星人真的是要统治世界了。不然为什么OpenCV自带的检测器中除了人脸检测、行人检测这些意料之中就应该存在的检测器之外,还悄悄多出了猫脸检测器呢。

今天我们就来试一下这个猫脸检测到底 是什么样的?基于OpenCV的猫脸检测十分简单。用Python的话只有区区20行代码。其中20行代码中发挥主要作用的只有一个函数:

detectMultiScale()

此函数的作用是,在输入图像中检测不同尺寸的对象,返回包含对象的矩形框。它接收的参数:

1.image——输入图像

2.scaleFactor——表示每轮检测图像齿轮减少的比例

3.minNeighbors——指明对象要至少被检测到几次才能判定对象确实存在

4.minSize——检测对象的最小尺寸

5.maxSize——检测对象的最大尺寸

代码

按照惯例,注释齐全,无需多说。

# -*- coding=utf-8 -*-
import cv2
# 加载猫脸检测器
catPath = "haarcascade_frontalcatface.xml"
faceCascade = cv2.CascadeClassifier(catPath)
# 读取图片并灰度化
img = cv2.imread("cat1.jpg")  
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 猫脸检测
faces = faceCascade.detectMultiScale(
    gray,
    scaleFactor= 1.02,
    minNeighbors=3,
    minSize=(150, 150),
    flags=cv2.CASCADE_SCALE_IMAGE
)
# 框出猫脸并加上文字说明
for (x, y, w, h) in faces:
    cv2.rectangle(img, (x, y), (x+w, y+h), (0, 0, 255), 2)
    cv2.putText(img,'Cat',(x,y-7), 3, 1.2, (0, 255, 0), 2, cv2.LINE_AA)
# 显示图片并保存
cv2.imshow('Cat?', img)
cv2.imwrite("cat.jpg",img)
c = cv2.waitKey(0)

效果

运行Python脚本后效果如下:

举一反三

本文虽然只是在说猫脸检测,但是在OpenCV下,人脸检测、行人检测、人眼检测等都是同样的道理,同样的流程。只需要把最开始相应的检测器换掉,然后按照实际情况调节detectMultiScale()的参数即可。比如以下是人脸检测的效果:

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏梦里茶室

毫秒级检测!你见过带GPU的树莓派吗?

树莓派3B+英特尔神经计算棒进行高速目标检测 转载请注明作者梦里茶 ? 代码: 训练数据预处理: https://gist.github.com/ahan...

4.8K80
来自专栏ATYUN订阅号

自定义对象检测问题:使用TensorFlow追踪星球大战中的千年隼号宇宙飞船

大多数的大型科技公司(如IBM,谷歌,微软,亚马逊)都有易于使用的视觉识别API。一些规模较小的公司也提供类似的产品,如Clarifai。但没有公司能够提供对象...

49350
来自专栏量化投资与机器学习

机器学习应用区块链系列(一)——如何开发一套自己的智能合约系统

从今天开始 编辑部将带来机器学习应用区块链系列 由于是第一期,我们想解读一些国外已有的文献和研究。故带来了START-Summit-2017-Blockchai...

488100
来自专栏PPV课数据科学社区

手把手教你用1行代码实现人脸识别 -- Python Face_recognition

环境要求: Ubuntu17.10 Python 2.7.14 环境搭建: 1. 安装 Ubuntu17.10 > 安装步骤在这里 2. 安装 Python2....

45280
来自专栏北京马哥教育

手把手教你用 1 行命令实现人脸识别

? 人脸识别很难吗? -- Kangvcar 本文导航 ◈ 环境要求00% ◈ 环境搭建03% ◈ 实现人脸识别19% ◈ 示例一(1 行命令实现人脸识别):...

37460
来自专栏IT派

干掉照片中那些讨厌的家伙!Mask R-CNN助你一键“除”人!

【导读】:看过英剧《黑镜》吗?圣诞特别版《白色圣诞节》中有这样一个场景:其中一个未来科技有自由屏蔽人像的功能,可以让你屏蔽任何一个不想看见或不喜欢的人,然后留下...

13000
来自专栏华章科技

不会用Photoshop抠图?Python助你一键“除”人!

导读:看过英剧《黑镜》吗?圣诞特别版《白色圣诞节》中有这样一个场景:其中一个未来科技有自由屏蔽人像的功能,可以让你屏蔽任何一个不想看见或不喜欢的人,然后留下的是...

36210
来自专栏生信技能树

hpv病毒基因研究调研

2015年有一篇文献中提到了hpv的研究现状 As of May 30, 2015, 201 different HPV types had been comp...

35450
来自专栏喔家ArchiSelf

7行Python的人脸识别

随着去年alphago 的震撼表现,AI 再次成为科技公司的宠儿。AI涉及的领域众多,图像识别中的人脸识别是其中一个有趣的分支。百度的BFR,Face++的开放...

48330
来自专栏张善友的专栏

开源OCR引擎Tesseract

知名的开源OCR引擎Tesseract 3.0版本日前发布,可以在项目网站下载:http://code.google.com/p/tesseract-ocr, ...

1.3K100

扫码关注云+社区

领取腾讯云代金券