使用OpenCV识别图片中的猫咪原创手记

你知道OpenCV可以识别在图片中小猫的脸吗?而且是拿来就能用,不需要其它的库之类的。

之前我也不知道。

但是在KendrickTan曝出这个功能后,我需要亲自体验一下……去看看到OpenCV是如何在我没有察觉到的情况下,将这一个功能添加进了他的软件库(就像一只悄悄溜进空盒子的猫咪一样,等待别人发觉)。

下面,我将会展示如何使用OpenCV的猫咪检测器在图片中识别小猫的脸。同样的,该技术也可以用在视频流中。

使用OpenCV在图片中检测猫咪

如果你查找过OpenCV的代码仓库,尤其是在haarcascades目录里(OpenCV在这里保存处理它预先训练好的Haar分类器,以检测各种物体、身体部位等),你会看到这两个文件:

haarcascade_frontalcatface.xml

haarcascade_frontalcatface_extended.xml

这两个HaarCascade文件都将被用来在图片中检测小猫的脸。实际上,我使用了相同的cascades分类器来生成这篇博文顶端的图片。

在做了一些调查工作之后,我发现这些cascades分类器是由鼎鼎大名的JosephHowse训练和贡献给OpenCV仓库的,他写了很多很棒的教程和书籍,在计算机视觉领域有着很高的声望。

下面,我将会展示给你如何使用Howse的Haarcascades分类器来检测图片中的小猫。

猫咪检测代码

让我们开始使用OpenCV来检测图片中的猫咪。新建一个叫cat_detector.py的文件,并且输入如下的代码:

#importthenecessarypackages

importargparse

importcv2

#constructtheargumentparseandparsethearguments

ap=argparse.ArgumentParser()

ap.add_argument("-i","--image",required=True,

help="pathtotheinputimage")

ap.add_argument("-c","--cascade",

default="haarcascade_frontalcatface.xml",

help="pathtocatdetectorhaarcascade")

args=vars(ap.parse_args())

第2和第3行主要是导入了必要的python包。6-12行用于解析我们的命令行参数。我们仅要求一个必需的参数--image,它是我们要使用OpenCV检测猫咪的图片。

我们也可以(可选的)通过--cascade参数指定我们的Haarcascade分类器的路径。默认使用haarcascades_frontalcatface.xml,假定这个文件和你的cat_detector.py在同一目录下。

注意:我已经打包了猫咪的检测代码,还有在这个教程里的样本图片。你可以在博文原文的“下载”部分下载到。如果你是刚刚接触Python+OpenCV(或者Haarcascade),我建议你下载这个zip压缩包,这个会方便你跟着教程学习。

接下来,就是检测猫的时刻了:

#loadtheinputimageandconvertittograyscale

image=cv2.imread(args["image"])

gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)

#loadthecatdetectorHaarcascade,thendetectcatfaces

#intheinputimage

detector=cv2.CascadeClassifier(args["cascade"])

rects=detector.detectMultiScale(gray,scaleFactor=1.3,

minNeighbors=10,minSize=(75,75))

在15、16行,我们从硬盘上读取了图片,并且进行灰度化(这是一个在将图片传给Haarcascade分类器之前的常用的图片预处理步骤,尽管不是必须的)

20行,从硬盘加载Haarcasacade分类器,即猫咪检测器,并且实例化cv2.CascadeClassifier对象。

在21、22行通过调用detector的detectMultiScale方法使用OpenCV完成猫脸检测。我们给detectMultiScale方法传递了四个参数。包括:

图片gray,我们要在该图片中检测猫脸。

minNeighbors参数控制了检定框的最少数量,即在给定区域内被判断为猫脸的最少数量。这个参数可以很好的排除误报false-positive结果。

最后,minSize参数不言自明。这个值描述每个检定框的最小宽高尺寸(单位是像素),这个例子中就是75*75

detectMultiScale函数会返回rects,这是一个4元组列表。这些元组包含了每个检测到的猫脸的(x,y)坐标值,还有宽度、高度。

最后,让我们在图片上画下这些矩形来标识猫脸:

#loopoverthecatfacesanddrawarectanglesurroundingeach

for(i,(x,y,w,h))inenumerate(rects):

cv2.rectangle(image,(x,y),(x+w,y+h),(0,0,255),2)

cv2.putText(image,"Cat#{}".format(i+1),(x,y-10),

cv2.FONT_HERSHEY_SIMPLEX,0.55,(0,0,255),2)

#showthedetectedcatfaces

cv2.imshow("CatFaces",image)

cv2.waitKey(0)

给我们这些框(比如,rects)的数据,我们在25行依次遍历它。

在26行,我们在每张猫脸的周围画上一个矩形。27、28行展示了一个整数,即图片中猫咪的数量。

最后,31,32行在屏幕上展示了输出的图片。

猫咪检测结果

为了测试我们的OpenCV猫咪检测器,可以在原文的最后,下载教程的源码。

然后,在你解压缩之后,你将会得到如下的三个文件/目录:

cat_detector.py:我们的主程序

haarcascade_frontalcatface.xml:猫咪检测器Haarcascade

images:我们将会使用的检测图片目录。

到这一步,执行以下的命令:

$pythoncat_detector.py--imageimages/cat_01.jp

图1.在图片中检测猫脸,甚至是猫咪部分被遮挡了。

注意,我们已经可以检测猫脸了,即使它的其余部分是被遮挡的。

试下另外的一张图片:

图2.使用OpenCV检测猫脸的第二个例子,这次猫脸稍有不同。

这次的猫脸和第一次的明显不同,因为它正在发出“喵呜”叫声的当中。这种情况下,我们依旧能检测到正确的猫脸。

在下面这张图片的结果也是正确的:

图3.使用OpenCV和python检测猫脸

我们最后的一个样例就是在一张图中检测多张猫脸:

$pythoncat_detector.py--imageimages/cat_04.jpg图4.在同一张图片中使用OpenCV检测多只猫

注意,Haarcascade返回的检定框不一定是以你预期的顺序。这种情况下,中间的那只猫会被标记成第三只。你可以通过判断他们的(x,y)坐标来自己排序这些检定框。

在这个xml文件中的注释非常重要,JosephHower提到了这个猫脸检测器有可能会将人脸识别成猫脸。

这种情况下,他推荐使用两种检测器(人脸&猫脸),然后将出现在人脸识别结果中的结果剔除掉。

这个算法能够识别图片中的对象,无论它们的位置和比例。而且最令人感兴趣的或许是它能在现有的硬件条件下实现实时检测。

Haarcascades最大的问题就是如何确定detectMultiScale方法的参数正确。特别是scaleFactor和minNeighbors参数。你很容易陷入一张一张图片调参数的坑,这个就是该对象检测器很难被实用化的原因。

换句话说,如果scaleFactor参数过低,你会检测过多的金字塔图层。这虽然可以能帮助你检测到更多的对象。但是他会造成计算速度的降低,还会明显提高误报率。Haarcascades分类器就是这样。

上述的HOG+线性SVM框架的参数更容易调优。而且更好的误报率也更低,但是唯一不好的地方是无法实时运算。

图5.在PyImageSearchGurus课程中学习如何构建自定义的对象识别器。

如果你对学习如何训练自己的自定义对象识别器感兴趣,请务必要去了解下PyImageSearchGurus课程。

在这个课程中,我提供了15节课,覆盖了超过168页的教程,来教你如何从0开始构建自定义的对象识别器。你会掌握如何应用HOG+线性SVM框架来构建自己的对象识别器来识别路标、面孔、汽车(以及附近的其它东西)。

尽管Haarcascades相当有用,但是我们也经常用HOG+线性SVM替代。因为后者相对而言更容易使用,并且可以有效地降低误报率。

THE END
1.最全猫咪品种介绍,你都知道吗?波斯猫暹罗猫豹猫英国短毛猫苏格兰...美国短毛猫 波米拉猫(博美拉猫) 黑猫(祖先为安哥拉猫,波斯猫) 土耳其梵猫( 土耳其凡湖猫) 西伯利亚猫 橙眼白猫(祖先为安哥拉猫,波斯猫) 美国反耳猫(美国卷耳猫) 美国硬毛猫 马恩岛猫( 海曼岛猫、曼克斯猫) 曼切堪猫 布履阑珊猫 缅因库恩猫(缅因猫) ...https://dy.163.com/article/G6GC6BV40517NPVF.html
2.OpenCV检测眼睛猫脸行人车牌实战(附Python源码)二、猫脸检测 opencv还提供了两个训练好的检测猫脸的级联分类器,分别是haarcascade_frontcatface.xml和haarcascade_frontcatface_extended.xml,前者的判断标准比较高,较为精确,但可能有些猫脸识别不出来,后者的判断标准比较低,只要类似猫脸就会被认为是猫脸,使用猫脸分类器不仅可以判断猫脸的位置,还可以识别图像中有...https://developer.aliyun.com/article/1400298
3.宠物识别悦保科技-宠物AI识别技术,依据宠物猫狗的“面部+鼻纹”关键点信息,拍照识别建立宠物身份档案,适用宠物保险、城市宠物管理、宠物医疗、养犬登记、宠物食品、宠物用品等多种场景,基于脸部信息的猫狗生物识别技术具有高度宠物友好性和操作简便性,应用前景广泛。http://www.ybinsure.com/ocrpet
4.猫狗图片image.zip卷积神经网络算法识别猫狗图片.zip 【国外优秀毕设项目】 卷积神经网络(Convolutional Neural Networks, CNNs)是深度学习中的一种特殊类型的神经网络,主要用于处理具有类似网格结构的数据,如图像和视频。CNNs在多个行业中都有广泛的应用,以下是一些主要的应用领域: 1. **计算机视觉**: - 图像识别:CNNs在图像分类任务...https://www.iteye.com/resource/qq_36794290-12255187
5.2012年6月,谷歌成立“猫脸识别”项目,组建了10一个神经网络节点,让...2012年6月, 谷歌 成立“猫脸识别”项目,组建了10一个神经网络节点,让AI天天去看猫片。 但效果并不理想,粗糙的模型依然无法识别各品种的猫。 十年过去,AI不仅会认猫,还能生成一段故事完整的猫片。https://xueqiu.com/2923233990/282072854
6.心理诊疗室:那些隐藏在热点事件背后的心理动因有家暴行为的男性,一般分为两种:一种是偶尔为之,后果不严重,他们也会为自己的失控真心改正,学会建设性的沟通方式。这种人相当少。另一种就是更为普遍的家暴男,他们把家暴作为固定而日常的沟通方式。 美国临床心理学家雷诺尔·沃柯曾对400名遭受家暴的妻子研究,发现了家庭暴力具有周期性: ...https://story.hao.360.cn/topic/LNrZQkrnNHC7Qw
7.识别猫品种软件排行榜前十名偏玩手游盒子分享十大识别猫品种软件排行榜前十名手机应用,编辑为您推荐手机识别猫品种软件排行榜第一名到前5名到前十名的应用。找识别猫品种软件有哪些、识别猫品种软件哪个好用,上偏玩手游盒子https://m.pianwan.com/s/zj-7573598
8.“猫脸识别”专利公开能够精准识别每一只猫咪企查查APP显示,一项“猫脸识别方法、系统、电子装置及存储介质”发明专利获得授权,授权公开号为CN112926479A。 摘要显示,该专利可获取在预定地点采集的猫的正脸图像;对正脸图像进行猫脸关键点提取并进行仿射变换,得到固定点;将固定点输入预先训练的猫脸识别模型后,得到至少一个猫脸标签,不同猫的猫脸标签不同。通过猫...https://www.gamersky.com/tech/202205/1480427.shtml
9.掌握猫咪AI变脸模板:轻松打造个性化猫脸特效教程猫咪变脸模板是基于深度学技术的一种应用。通过训练大量的猫脸图片,可学到猫脸的特征,从而实现对猫脸的自动识别和替换。这类技术不仅可以实现猫脸与猫脸之间的变换还能将猫脸与人类或其他动物的脸部实行融合,产生特别的视觉效果。 ## 二、制作步骤 1. 素材准备:我们需要准备一张目标猫脸图片,以及一张用作替换的...http://www.slrbs.com/jrzg/aizhishi/450020.html
10.喵星人驾到!荷兰工程师自制猫脸识别门禁加罗在写给美国商业内幕网站的电子邮件中说,他家门上没有专供猫咪出入的猫洞,于是想到为这只猫制作猫脸识别装置,方便它进入。 加罗耗费数小时,在迷你电脑上加装相机模块、面部识别软件和动态监测感应器等,制成猫脸识别设备。当感应器检测到移动物体时,设备拍照发送给云端的面部识别软件,识别移动物体身份。如果设备判断...https://news.cctv.com/m/a/index.shtml?id=ARTIeP7ucYCvf5RjiIqFByqH180304
1.26种猫咪一次认全!主人,你确定不来看看我吗?26种猫咪一次认全!主人,你确定不来看看我吗? 摘要: 1.波斯猫它的名字就代表着贵族7.挪威森林猫性格内向,独立性强,聪颖敏捷机灵10.加菲猫性情独立,不爱吵闹,能慰藉主人心的短脚猫19.西伯利亚森林猫安静而有力,生存能力强,不畏严寒22.埃及猫法老王猫,敏感独立26. ......https://www.goudemaoning.com/article-103129-1.html
2.探秘猫界的多样性不同种类的猫咪介绍及精彩图片在世界上,共有36个正式承认的猫科动物种类。每一种都有其独特的外观和性格,这些特点使它们成为宠物爱好者心目中的理想伴侣。以下是六种最受欢迎的家猫品种及其独特之处。 英国短毛(British Shorthair) 英国短毛是一只体型中等、肌肉发达的大型猫,以其平静、友好的性格而著称。它拥有一个圆润的小脸和宽阔的额头,以及...https://www.stddjzkkll.cn/ren-wu/479454.html
3.探索猫咪世界了解最受欢迎的品种探索猫咪世界:了解最受欢迎的品种 猫是人类家中的一员,它们以其独立性、优雅和温柔赢得了人们的心。随着时间的推移,猫的品种不断多样化,形成了众多独特而迷人的品种。以下是对一些最受欢迎猫品种的介绍。 斑马脸波斯(Persian) 斑马脸波斯是一种典型的大型长毛猫,其特https://www.tepnz.com/zi-xun/546825.html
4.猫脸检测—12种猫分类数据集.zip获取猫脸关键点数据集资源《猫脸检测与12种猫分类数据集详解》 在人工智能领域,图像识别技术扮演着至关重要的角色,尤其在动物识别、人脸识别等应用中。本文将深入探讨一个专门用于猫脸检测的数据集——"猫脸检测—12种猫分类数据集.zip",它是一个专门为训练和评估机器学习模型设计的宝贵资源。 该数据集包含2160张猫的图片,这些图片被精心...https://download.csdn.net/download/weixin_44906759/85274024
5.Python实战之OpenCV实现猫脸检测python今天给大家带来的是关于Python的相关知识,文章围绕着OpenCV实现猫脸检测展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下https://www.jb51.net/article/215973.htm
6.猫奴の逆袭——一个技术宅猫奴和他的猫脸识别智能喂猫器!有没有一种东西,能让喵星人好好吃饭,而且吃得健康,还保证几只喵星人都能身体倍儿棒,吃嘛嘛香呢?既然没有,Muchi想,那我就自己发明一个。 经过一段时间的钻研和试验,Muchi组建了团队42ARK,成功发明了Bistro——一款附带猫脸识别系统的智能喂猫器。https://www.douban.com/note/378660517/
7.别再指着拉布拉多叫金毛犬“狗脸识别”帮你认清狗子品种大家是不是遇到过到朋友家看到家里的狗子很可爱,对着人家的拉布拉多就喊出了“这金毛真可爱”的尴尬场面。而伴随着手机性能和Ai技术的不断发展。现在,很多平台都已经推出了“狗脸识别”、“猫脸识别”甚至是拍照识。https://news.zol.com.cn/789/7898343.html
8.猫的识别神经网络神经网络猫狗分类猫的识别 神经网络 神经网络猫狗分类 一个CNN神经网络猫狗分类代码 前言 数据集获取 CNN Model 数据预处理(tf.data.Dataset) main() 如何使用保存的model 结语 前言 经过几天的学习和打磨程序,笔者逐渐熟悉了如何利用Tensorflow搭建机器学习模型,如何预处理数据集,以及在训练过程中,怎样实现随机地使神经元失活和...https://blog.51cto.com/u_16213575/9437995
9.FastBond2阶段2ESP32S3功能是真的强大,esp-idf也是真的复杂,整个项目基于已有的例程,却也遇到了重重困难,总算是逐一解决了。AI做猫脸识别速度挺快,识别率也挺不错的,不过当放入狗脸时,还是有蛮大几率误识别的,不得不说是个蛮大的缺憾。感谢电子森林举办的这次活动,让我完完整整地体验了一把在ESP32S3上AI开发之路。https://www.eetree.cn/project/2176
10.一身金钱袍,猫脸性残暴,爬树且游水,嗜肉不食草(打一动物名)刷刷题APP(shuashuati.com)是专业的大学生刷题搜题拍题答疑工具,刷刷题提供一身金钱袍,猫脸性残暴,爬树且游水,嗜肉不食草(打一动物名)的答案解析,刷刷题为用户提供专业的考试题库练习。一分钟将考试题Word文档/Excel文档/PDF文档转化为在线题库,制作自己的电子错题https://www.shuashuati.com/ti/e9560e6b92884de9ad0af3942499dd42.html?fm=bd425c1b335ad06a1d6d59db54a695300d
11.如何准确识别猫咪品种(宠物猫咪品种辨识详解)宠物美容头部大而圆,眼睛圆而大,英国短毛猫的体型较为圆胖。英国短毛猫的毛质较为浓密,颜色也相对单一,与美国短毛猫不同的是,多为蓝色或黑色。 波斯猫 眼睛大而圆,特征是脸圆,鼻子扁平、波斯猫属于长毛猫的一种,它们的外貌优雅。多为白色,棕色等单一颜色,灰色,波斯猫的毛发柔软且长。 https://www.pettb.cn/article-12769-1.html