在这篇文章中,我将向你展示如何编写一个检测猫脸的简单程序。在我的人脸检测帖子中,我演示了如何使用Python检测人脸。

当我用图像测试代码时,我发现其中有些图像中有动物,但是我们创建的人脸检测模型并不能识别动物的面部,所以我想知道是否有一种方法可以在图像中检测动物的脸,于是我在互联网上做了一点研究,发现这是可能的,而且在Kaggle上找到了很多免费的数据集,里面有几百张图片。

Kaggle是一个寻找免费数据集的好地方,他们也在组织数据科学竞赛,这是一个练习数据科学技能和向他人学习的好地方。不管怎样,回到我们的项目。

我很高兴能在一个程序中结合人类和猫的面部检测模型,这样我们的机器可以学会区分人类和猫。这将是一个有趣的工作项目,我们开始吧!!

第一件事是文书工作。

当你在机器学习项目中工作时,安装和导入库是必需的。我们将在这个项目中使用两个库,OpenCV和Pillow。

OpenCV是一个高度优化的库,专注于实时应用程序。Pillow是一个强大的图像处理库。

Pillow将作为“Pillow”安装,但是导入的时候使用PIL,它们是同一件事,别搞混了。

OpenCV(opensourcecomputervision Library)是一个开源的计算机视觉和机器学习软件库。OpenCV旨在为计算机视觉应用提供一个通用的基础设施,并加速机器感知在商业产品中的应用。作为一个BSD授权产品,OpenCV使企业很容易使用和修改代码。

安装过程非常简单和容易。在终端窗口中编写以下代码行:

pip install opencv-python pillow

安装完成后,我们可以将其导入程序。

import cv2 from PIL import Image

OpenCV已经包含了许多预先训练过的人脸、眼睛、微笑等分类器,这些XML文件存储在GitHub文件夹中。我们将使用猫面部检测和人脸检测模型。

以下是链接:

  • 猫脸:

    • https://raw.githubusercontent.com/opencv/opencv/master/data/haarcascades/haarcascade_frontalcatface_extended.xml

  • 人脸:

    • https://raw.githubusercontent.com/opencv/opencv/master/data/haarcascades/haarcascade_frontalface_default.xml

如果你有帐户,你可以从Github下载XML文件;如果没有,可以从上面的链接复制代码并粘贴到文本编辑器中并保存它们,我把它们叫做“catface_detector.xml”和“humanface_detector.xml”。

将文件保存到文件夹后,让我们将它们加载到程序中。

# Load the cascades catface_cascade = cv2.CascadeClassifier('catface_detector.xml') humanface_cascade = cv2.CascadeClassifier('humanface_detector.xml')

图像

在这一步中,你将选择要在测试代码中的图像。确保你有至少两张图片来检查你的程序的准确性。这些图像可以同时有人和猫,或者只是其中一个。如果你很难找到一个免费的图片集,可以使用我在Kaggle上找到的免费数据集(https://www.kaggle.com/tongpython/cat-and-dog)。请随时下载和使用这个项目。

以下是我将在我们的项目中使用的图像:

选择图像后,让我们重命名它们。确保图像文件位于你正在处理的同一文件夹中。在保存它们之后,现在我们将对图像做一些修饰。

图像处理

在这一步中,我们将对图像做一些小的修饰,以便更好地进行处理,我也发表了一篇关于常用图像处理技术的文章。做这些修整确实有助于我们的机器处理,并提供更好的结果。我们先调整图片的大小,接下来,我们将它们转换成灰度,我们的模型处理灰度图像的速度更快。

  • Python中的图像处理

    • 常用图像处理技术的分步指南

    • 网址:https://towardsdatascience.com/image-manipulation-in-python-cbb86a61cf0

为了使用这些图像编辑技术,我们将使用我们在文章开头导入的图像模块。

调整大小

newsize = (600, 600) #First image retouchesimgr1 = Image.open("test1.jpg") imgr1 = imgr.resize(newsize) imgr1.save("resized1.jpg")#Second image retouchesimgr2 = Image.open("test2.jpg") imgr2 = imgr.resize(newsize) imgr2.save("resized2.jpg")

灰度

imgr1 = imgr1.convert('L') imgr1.save('ready1.jpg') imgr2 = imgr2.convert('L') imgr2.save("ready2.jpg")

导入编辑的图像

最后,我们将编辑好的图像导入到我们的程序中,这样我们就可以运行猫脸和人脸检测模型了。我们正在使用Opencv库导入图像。

# Read the input image img1 = cv2.imread('ready1.jpg')
img2 = cv2.imread('ready2.jpg')

人脸检测

级联

是时候检测人脸了,我们将运行两行代码。

首先在图像中检测人脸,第二步是在图像中检测猫的脸。

如前所述,我们正在请求opencv分类器。

human_faces = humanface_cascade.detectMultiScale(img1,     scaleFactor=1.3, minNeighbors=5, minSize=(75, 75)) cat_faces = catface_cascade.detectMultiScale(img2, scaleFactor=1.3, minNeighbors=5, minSize=(75, 75))

绘制矩形

在这一步中,我们将围绕检测到的面部进行绘制矩形。这些矩形可以有不同的颜色,其线框的厚度也可以调整。

for (i, (x, y, w, h)) in enumerate(human_faces): cv2.rectangle(img1, (x, y), (x+w, y+h), (220, 90, 230), 3)         cv2.putText(img1, "Human Face - #{}".format(i + 1), (x, y - 10),    cv2.FONT_HERSHEY_SIMPLEX, 0.55, (220, 90, 230), 2)for (i, (x, y, w, h)) in enumerate(cat_faces): cv2.rectangle(img2, (x, y), (x+w, y+h), (0,255, 0), 3)    cv2.putText(img2, "Cat Faces - #{}".format(i + 1), (x, y - 10),    cv2.FONT_HERSHEY_SIMPLEX, 0.55, (0, 0, 255), 2)
  • (220,90,230)和(0255,0)是我们要绘制的矩形颜色,你可以和它们一起玩,看看颜色是怎么变化的。

  • (3) 是线条的粗细,你可以更改该值并查看其外观。

保存结果

最后,我们将保存检测到的人脸图像。要查看工作的最终结果,最好的方法是保存并检查,确保正确传递变量名。在运行这最后一段代码之前,如果一切正常的话,我建议你继续检查整个代码。

#Saving the images using imwrite methodcv2.imwrite("faces_detected1.png", img1)cv2.imwrite("faces_detected2.png", img2)

结果

这是我的工作成果。第一种是人脸检测,第二种是猫脸检测结果。如你所见,我们的机器知道哪一个是人类,哪一个是猫脸。我还测试了这个程序,将两个图像合并在一个图像中,我收到的结果可以在下面找到。

faces_detected1.png

faces_detected2.png

其他

与其逐个测试每个图像,不如让我们看看将两个图像合并为一个并运行代码时会发生什么。我们可以看到,我们的机器现在能够理解和区分猫和人的脸。

result

恭喜! !你已经创建了一个程序,可以在图像中检测猫和人的脸。现在,你已经知道如何教机器同时为你做两件事了。希望你喜欢这篇教程,并在今天学到一些新东西。

计算机视觉是一个伟大的领域,你可以做的事情是无限的。你可以在不同的图像上测试代码,看看它是如何工作的。它可能不是对所有的图像都有效,因为预测依赖于训练过的数据。

参考链接:https://towardsdatascience.com/building-a-cat-face-recognizer-in-python-92e30d77a661

☆ END ☆

如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 mthler」,每日朋友圈更新一篇高质量博文(无广告)。

扫描二维码添加小编↓

用Python+OpenCV+PIL构建猫脸识别器相关推荐

  1. 【爬虫实践之爬虫进阶】python爬取网页猫脸,使用opencv检测是否有猫脸,有则爬取

    使用python的opencv编写能够检测猫脸的模型可见,我前面的文章有较为详细的见解,链接如下: python使用opencv对猫脸进行检测,并且框出猫脸_小琼带你轻松学编程的博客-CSDN博客 p ...

  2. OpenCV检测篇——猫脸检测

    OpenCV检测篇(一)--猫脸检测 OpenCV检测篇一猫脸检测 OpenCV OpenCV的Python环境配置 猫脸检测 代码 效果 举一反三 下期预告 OpenCV OpenCV是时下最流行的 ...

  3. 【Python | opencv+PIL】常见操作(创建、添加帧、绘图、读取等)的效率对比及其优化

    一.背景 本人准备用python做图像和视频编辑的操作,却发现opencv和PIL的效率并不是很理想,并且同样的需求有多种不同的写法并有着不同的效率.见全网并无较完整的效率对比文档,遂决定自己丰衣足食 ...

  4. python opencv PIL 视频分割成图片 图片合成为视频 修改图片大小(抗锯齿)

    Python代码将原有的视频分割成图片,我的例子是一帧一帧的分割 用python+opencv完成视频的分割 import cv2 #导入opencv模块 print(2) #测试是否运行 vc=cv ...

  5. python黑色变白色_使用Python openCV PIL将黑色更改为白色,但不将白色更改为黑色...

    我试图用python中的opencv使用cv2或PIL将黑色像素改为白色.在 原图: 这是我的代码:import cv2 import numpy as np frame = cv2.imread(& ...

  6. python+opencv+PIL,在图片和视频中写入中文(汉字)

    原博客地址:https://blog.csdn.net/wyx100/article/details/80412101 效果 代码 #!/usr/bin/env python # -*- coding ...

  7. Python opencv PIL numpy base64互相转化

    PIL2numpy and numpy2PIL from PIL import Image import numpy image = Image.open('timg.jpeg')# image is ...

  8. 运用特征脸方法的基于Opencv的猫脸检测实现

    本文禁止转载.抄袭,请尊重作者权利. 使用特征脸方法的基于Opencv的猫脸检测实现 摘要 目前,在计算机视觉和模式识别领域,脸识别技术是一个很活跃的课题,人脸识别的方法已经十分丰富,而对于日常生活中 ...

  9. imshow显示用矩阵保存的多张图片_imshow显示用矩阵保存的多张图片_纯python抠图,用opencv+PIL来实现,简单有效...

    1 说明: ===== 1.1 抠图,我已经介绍过Remove.bg,依赖网络,需要API-key,一个账号只能50次使用,有限制. <Remove.bg:一款抠图神器介绍和python实现方法 ...

最新文章

  1. golang通过RSA算法生成token,go从配置文件中注入密钥文件,go从文件中读取密钥文件,go RSA算法下token生成与解析;go java token共用
  2. 中查出所有姓张的学生为啥查不出来_只有笔试成绩没有面试成绩是什么原因 教师资格面试成绩怎么查...
  3. js 将多个对象合并成一个对象
  4. async-http java_使用Java和async-http-client通过基本身份验证获取URL内容 - java
  5. websocket多客户端接收消息_WebSocket之消息接收发送
  6. struts2 + ajax 用户名登录验证(struts2+spring+ibatis)
  7. [转载] Python基础知识:构造函数中self用法
  8. HTML中的控制模块,嵌入式Web控制模块 网页控制单片机 Web IO 网页远程控制器 浏览器IO控制...
  9. 带通滤波器的matlab程序设计
  10. 软件测试面试题(2020.6.29)
  11. 虚幻引擎UE4加载GIS数据《数字孪生智慧城市》
  12. jQuery基础之正则表达式及表单验证
  13. HTML-零基础入门
  14. Pandas数据分析——从0.3到0.8学习指南
  15. 深度测评:RAKsmart美国站群服务器怎么样
  16. Maya创建重力动力模型教程!
  17. Python文章合集 | (入门到实战、游戏、Turtle、案例等)
  18. xshell6、Xshell7最新版使用
  19. 【神经网络】梯度消失与梯度爆炸问题
  20. libgdx中文社区网正式上线了-libgdx.net

热门文章

  1. 最简单的基于FFMPEG+SDL的音频播放器:拆分-解码器和播放器
  2. SQL Server 2008 R2 升级到 Service Pack 3后Report Builder启动不了
  3. php中编码转换,php编码转换_php编码转换函数
  4. Android7.0上Gallery2中长按缩略图后选择edit会闪退的问题修复
  5. exported android,Android activity exported属性理解
  6. 【技术分享】Android应用安全开发之浅谈加密算法的坑
  7. mysql给表改名_mysql重命名表
  8. 英国愤青 ----马未都
  9. 【动态规划】磁带问题
  10. Eclips的快捷键和基本操作