python猫咪藏在哪个房间_Python实现猫脸识别 | 喵主子福利

2023-10-12 05:10

本文主要是介绍python猫咪藏在哪个房间_Python实现猫脸识别 | 喵主子福利,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

38171d18-f78f-4a4a-bb51-78a9983d760f.png

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

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

Library

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

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

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

pip install opencv-python pillow

安装完成后,我们可以将其导入到我们的程序中:

import cv2from 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 cascadescatface_cascade = cv2.CascadeClassifier('catface_detector.xml')humanface_cascade = cv2.CascadeClassifier('humanface_detector.xml')

图像数据集

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

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

eaf3855c-cea8-409a-9417-8f415c542b52.jpg

13804a04-6369-44ae-bb53-0e11a24b374e.jpg

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

图像预处理

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

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

调整大小

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 imageimg1 = 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 methodcv2.imwrite("faces_detected1.png", img1)cv2.imwrite("faces_detected2.png", img2)

结果

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

19768ea9-33f0-4c40-a606-4fc04cefdc4f.png

3c712371-d324-4299-b97f-749d861c86c5.png

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

· END ·

HAPPY LIFE

6c116137-4929-40c7-b5d4-e31d119d5b68.png

这篇关于python猫咪藏在哪个房间_Python实现猫脸识别 | 喵主子福利的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/193481

相关文章

Python实现开根号的五种方式

《Python实现开根号的五种方式》在日常数据处理、数学计算甚至算法题中,开根号是一个高频操作,但你知道吗?Python中实现开根号的方式远不止一种!本文总结了5种常用方法,感兴趣的小伙伴跟着小编一起... 目录一、为什么需要多种开根号方式?二、5种开根号方式详解方法1:数学库 math.sqrt() ——

Python lambda函数(匿名函数)、参数类型与递归全解析

《Pythonlambda函数(匿名函数)、参数类型与递归全解析》本文详解Python中lambda匿名函数、灵活参数类型和递归函数三大进阶特性,分别介绍其定义、应用场景及注意事项,助力编写简洁高效... 目录一、lambda 匿名函数:简洁的单行函数1. lambda 的定义与基本用法2. lambda

nginx配置错误日志的实现步骤

《nginx配置错误日志的实现步骤》配置nginx代理过程中,如果出现错误,需要看日志,可以把nginx日志配置出来,以便快速定位日志问题,下面就来介绍一下nginx配置错误日志的实现步骤,感兴趣的可... 目录前言nginx配置错误日志总结前言在配置nginx代理过程中,如果出现错误,需要看日志,可以把

Python 函数详解:从基础语法到高级使用技巧

《Python函数详解:从基础语法到高级使用技巧》本文基于实例代码,全面讲解Python函数的定义、参数传递、变量作用域及类型标注等知识点,帮助初学者快速掌握函数的使用技巧,感兴趣的朋友跟随小编一起... 目录一、函数的基本概念与作用二、函数的定义与调用1. 无参函数2. 带参函数3. 带返回值的函数4.

Qt中实现多线程导出数据功能的四种方式小结

《Qt中实现多线程导出数据功能的四种方式小结》在以往的项目开发中,在很多地方用到了多线程,本文将记录下在Qt开发中用到的多线程技术实现方法,以导出指定范围的数字到txt文件为例,展示多线程不同的实现方... 目录前言导出文件的示例工具类QThreadQObject的moveToThread方法实现多线程QC

Go语言使用sync.Mutex实现资源加锁

《Go语言使用sync.Mutex实现资源加锁》数据共享是一把双刃剑,Go语言为我们提供了sync.Mutex,一种最基础也是最常用的加锁方式,用于保证在任意时刻只有一个goroutine能访问共享... 目录一、什么是 Mutex二、为什么需要加锁三、实战案例:并发安全的计数器1. 未加锁示例(存在竞态)

基于Redisson实现分布式系统下的接口限流

《基于Redisson实现分布式系统下的接口限流》在高并发场景下,接口限流是保障系统稳定性的重要手段,本文将介绍利用Redisson结合Redis实现分布式环境下的接口限流,具有一定的参考价值,感兴趣... 目录分布式限流的核心挑战基于 Redisson 的分布式限流设计思路实现步骤引入依赖定义限流注解实现

Python跨文件实例化、跨文件调用及导入库示例代码

《Python跨文件实例化、跨文件调用及导入库示例代码》在Python开发过程中,经常会遇到需要在一个工程中调用另一个工程的Python文件的情况,:本文主要介绍Python跨文件实例化、跨文件调... 目录1. 核心对比表格(完整汇总)1.1 自定义模块跨文件调用汇总表1.2 第三方库使用汇总表1.3 导

SpringBoot实现虚拟线程的方案

《SpringBoot实现虚拟线程的方案》Java19引入虚拟线程,本文就来介绍一下SpringBoot实现虚拟线程的方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录什么是虚拟线程虚拟线程和普通线程的区别SpringBoot使用虚拟线程配置@Async性能对比H

基于Python实现进阶版PDF合并/拆分工具

《基于Python实现进阶版PDF合并/拆分工具》在数字化时代,PDF文件已成为日常工作和学习中不可或缺的一部分,本文将详细介绍一款简单易用的PDF工具,帮助用户轻松完成PDF文件的合并与拆分操作... 目录工具概述环境准备界面说明合并PDF文件拆分PDF文件高级技巧常见问题完整源代码总结在数字化时代,PD