Python实现猫脸识别 | 喵主子福利

点击关注我哦

一篇文章带你了解Python实现猫脸识别

本文将向您展示如何编写一个简单的猫脸检测程序。在程序中同时结合了人脸和猫脸的检测模型,让机器学会区分人和猫。这听起来就像是非常有趣的一个项目~

Library

在进行机器学习项目时,必须学会安装和导入库,这将使我们的工作事半功倍。在这个项目中将用到OpenCV和Pillow这两个库。OpenCV是一个高度优化的库,专注于实时应用程序。Pillow则是一个很棒的图像处理库。Pillow库常常使用“pip install pillow”进行安装,但是在我们实际import使用时,需要import PIL进行使用。这两个其实是同一种意思,不必感到困惑。

OpenCV(开源计算机视觉库)是一个开源计算机视觉和机器学习软件库。OpenCV的构建旨在为计算机视觉应用程序提供通用的基础结构,并加速在商业产品中使用机器感知。作为BSD许可的产品,OpenCV使企业可以轻松地使用和修改代码。

上述两个库的安装过程非常简单,在cmd窗口中写入以下代码行即可:

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')

图像数据集

在这一步中,我们需要选择代码测试所需要的图像。确保至少有两张图片来检测程序的准确性。这些图像可以同时有人和猫,或者只是其中一个。

下面是我将要进行测试的两张图片:

选择图像后,对它们进行重命名。当然要确保图像文件位于当前程序处理的文件夹。然后对图像做一些必要的预处理。

图像预处理

在这一步中我们将对图像进行一些处理,以便模型能够得到更准确的结果。首先调整图像的尺寸,让它们保持相同的大小。然后将它们转化为灰度图像,因为我们的模型对于灰度图像的检测速度更快,同时色彩对检测结果的影响微乎其微。

下面我们将用到文章开头安装的库对图像进行上述处理。

调整大小

newsize = (600, 600) 
#First image retouches
imgr1 = Image.open("test1.jpg") 
imgr1 = imgr.resize(newsize) 
imgr1.save("resized1.jpg")
#Second image retouches
imgr2 = 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)

注1:(220、90、230)和(0,255,0)是绘制的矩形的颜色。 可以更改一些这些值看看颜色如何变化;

注2:(3)是线条的粗细。同样也可以更改参数值并看看矩形的变化。

保存结果

最后,我们将保存带有检测到的面部的图像。这样就可以方便我们进行查看了。小编在这里提醒大家要确保变量名称的正确哦~代码如下所示:

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

结果

上面就是我们得到的结果。第一张图像检测到的是人脸,第二张图像检测到的是猫脸。在我们的努力下,机器学会了区分人脸和猫脸!

resize之后的喵星人好像胖了哈哈哈哈哈哈·~~

·  END  ·

HAPPY LIFE

  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
LVQ算法(Learning Vector Quantization)是一种监督学习算法,用于模式识别和分类任务。其基本思想是通过一组原型向量对输入样本进行分类,通过不断调整原型向量的位置来优化分类结果。 实现朝向识别Python代码主要包括以下步骤: 1. 数据准备:收集人朝向的样本数据集,包括不同角度和朝向的人图像。然后对图像进行预处理,如人检测和特征提取,以便用于LVQ算法的训练和测试。 2. LVQ模型构建:使用Python中的LVQ算法库,如LVQ-Pak或自行实现LVQ算法。在构建LVQ模型时,需要确定原型向量的初始化方法、学习率和迭代次数等超参数。 3. 模型训练:将预处理后的人朝向样本数据输入LVQ模型进行训练,不断调整原型向量的位置以优化分类效果。在训练过程中,可以使用交叉验证等技术对模型进行评估和调参。 4. 模型测试:利用另一部分人朝向样本数据对训练好的LVQ模型进行测试,评估模型的分类准确率和性能指标。 5. 模型应用:将训练好的LVQ模型应用于实际的人朝向识别任务中,例如通过摄像头捕获实时图像,并对图像中的人进行朝向识别。 通过以上步骤,可以使用Python实现LVQ算法实现朝向识别,并得到相对准确的识别结果。在实际应用中,还可以通过优化模型结构、特征提取和数据增强等方法进一步提升人朝向识别的准确率和性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值