Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >利用python进行识别相似图片(二)

利用python进行识别相似图片(二)

作者头像
py3study
发布于 2020-01-03 02:34:21
发布于 2020-01-03 02:34:21
1.8K00
代码可运行
举报
文章被收录于专栏:python3python3
运行总次数:0
代码可运行

前言

和网上各种首先你要有一个女朋友的系列一样,想进行人脸判断,首先要有脸, 只要能靠确定人脸的位置,那么进行两张人脸是否相似的操作便迎刃而解了。

所以本篇文章着重讲述如何利用openCV定位人脸。

上一篇文章的地址:

利用python进行识别相似图片(一)

安装openCV

opencv官网

在进行下一步操作时,我们需要安装openCV,本来安装openCV的步骤跟平常安装其他模块一样,而然 由于python的历史原因(用过都懂……),弄得一点都不友好。

先说一下,python2.7的用户,可以直接在openCV的官网上直接下载,然后在openCV的build\python 的目录下,根据自己的情况,选择x86,x64下的cv2.pyd放到你python的安装目录的 \Lib\site-packages\下。

至于python3.4的用户,即有点特别。你可以在StackOverFlow找到这样这样的答案,但我们不要这么麻烦。

进入这个网站,下载openCV相关whl文件,例如 opencv_python-3.1.0-cp35-none-win_amd64.whl

然后再对应目录下使用pip install opencv_python-3.1.0-cp35-none-win_amd64.whl命令即可

安装完成后,可以在python的命令行下测试。

import cv2

如果没有报错的话,恭喜你安装成功。

不过无论是哪个版本的用户,在python上使用openCV都需要先安装numpy这个模块。

numpy

人脸识别的原理

opencv的人脸识别是基于了haar特征,关于什么叫haar特征,足以开另外一篇文章说明了,碍于篇幅,这里不做介绍。 opencv提供已经训练好的数据写成了xml文件,放在了opencv\sources\data\haarcascades的目录下。

如果只是安装了opencv_python-3.1.0-cp35-none-win_amd64.whl的,可以在我的github上,下载cvdata里面的内容 ,地址会在文章底部给出。

除了人脸识别的数据外,还有人眼,上半身,下半身……等人体特征的数据,观察xml文件的命名,不难见名知义。

接下来会介绍如何利用这个已经训练好的数据,如果仍对haar模型感兴趣,可以参考以下地址。

zouxy09的专栏

如何使用训练好的数据

先讲关于openCV基本的一些操作。全部具体代码,请查看我的github。

读入一张图片

cv2.imread(path)

如果你用type()把其返回值的类型是numpy.ndarray

而同样,numpy.asarray(Image)返回的亦是numpy.ndarray对象,为什么强调这两点?

  1. cv2.imread(path)不能读取中文路径,若路径中含有中文字符,其会返回None
  2. 在后面的操作中,包括是切割图片(人脸部分),再进行局部哈希,比较相似度, 等等都是用Image对象进行操作,如果再用Image.open()读入图片未免显得麻烦。

所以干脆统一用Image.open()打开图片,再用numpy.asarray(Image)转化即可。

需要注意有一个不同的地方是虽然其返回的也是三维数组,但在第三维,即某个坐标下的RGB值,两个矩阵的顺序是反的,但只要另外编写一个小函数将其反转即可。

载入xml数据

face_cascade = cv2.CascadeClassifier(xml_path)

将图片灰度化

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 if img.ndim == 3:
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
 else:
    gray = img 

# 如果img维度为3,说明不是灰度图,先转化为灰度图gray,如果不为3,也就是2,原图就是灰度图

img是之前读入的三维数组,虽然灰度图可以用Image对象的convert('L')完成,但由于不确定 opencv的处理方法是否和该方法一样,所以还是用opencv自己的方法进行处理比较好。

获取人脸坐标

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=3, 
minSize=(10,10),flags=cv2.CASCADE_SCALE_IMAGE)
  • scale_factor:被检测对象的尺度变化。尺度越大,越容易漏掉检测的对象,但检测速度加快;尺度越小,检测越细致准确,但检测速度变慢。
  • min_neighbors:数值越大,检测到对象的条件越苛刻;反之检测到对象的条件越宽松;
  • minSize:检测对象的大小

该方法返回的是一个列表,每个列表元素是长度为四的元组,分别脸部的左上角的x,y值,脸部区域的宽度和高度。

下一步操作

通过上述的方法,我们就已经获取到人脸的位置,下一步你可以通过ImageDraw`对象进行绘图,框出人脸的位置。

同样,你也可以使用Imagecrop方法把人脸部分提取出来,然后进行局部哈希, 通过上一篇文章提及的算法,比较两者的相似度。

两种操作分别在我的github中实现了,请参考我的github中face1.py,和face2.py两个python文件。

写一只具有识别能力的图片爬虫

在上一篇文章中,我说了会应用这些算法做成以只具有识别能力的图片爬虫,然现在我也确实是在做 但考虑到作为核心的图片识别和人脸识别的部分我已经写成文章分享出来,其余部分就是想写其他爬虫一样而已,所以我决定看看这两篇文章的反响后再决定是否继续该系列,把图片爬虫的制作过程和大家分享一下。

总结

鉴于个人实力有限,本文未能详细说明人脸识别的原理, 但总结了如何利用已经训练好的数据进行人脸识别,希望能帮到有需要的朋友。

如有不足之处,欢迎提出。

本文涉及内容的详细代码在下面的github地址。

我的github仓库

欢迎star,也欢迎给意见

本文参考文章

wphh的博客

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/09/28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
写一只具有识别能力的图片爬虫
在网上看到python做图像识别的相关文章后,真心感觉python的功能实在太强大,因此将这些文章总结一下,建立一下自己的知识体系。 当然了,图像识别这个话题作为计算机科学的一个分支,不可能就在本文简单几句就说清,所以本文只作基本算法的科普向。如有错误,请多包涵和多多指教。 本文参考文章和图片来源 wbj0110的文章 http://soledede.iteye.com/blog/1940910 赖勇浩的文章 http://blog.csdn.net/gzlaiyonghao/article/detai
机器学习AI算法工程
2018/03/13
2K0
写一只具有识别能力的图片爬虫
Python学习案例之图片人脸检测识别
随着科技的发展,人脸识别技术在许多领域得到的非常广泛的应用,手机支付、银行身份验证、手机人脸解锁等等。
小柒2012
2019/12/05
8860
干货 | 手把手教你运用Python实现简单的人脸识别
Python里,简单的人脸识别有很多种方法可以实现,依赖于python胶水语言的特性,我们通过调用包可以快速准确的达成这一目的。这里介绍的是准确性比较高的一种。
用户1621951
2019/06/06
1.4K0
干货 | 手把手教你运用Python实现简单的人脸识别
Python-OpenCV人脸检测(代码)
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012162613/article/details/43523507
李智
2019/05/26
1.9K0
基于OpenCv的人脸识别(Python完整代码)
采集人脸图片的方法多种多样,可以直接从网上下载数据集,可以从视频中提取图片,还可以从摄像头实时的采集图片。
全栈程序员站长
2022/06/26
6K0
基于OpenCv的人脸识别(Python完整代码)
10行代码实现python人脸识别
人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术。用摄像机或摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进行脸部识别的一系列相关技术,通常也叫做人像识别、面部识别。
星星在线
2020/05/22
5.1K1
手把手教你如何用 OpenCV + Python 实现人脸识别
下午的时候,配好了 OpenCV 的 Python 环境,OpenCV 的 Python 环境搭建。于是迫不及待的想体验一下 opencv 的人脸识别,如下文。 必备知识 Haar-like Haar-like 百科释义。通俗的来讲,就是作为人脸特征即可。 Haar 特征值反映了图像的灰度变化情况。例如:脸部的一些特征能由矩形特征简单的描述,如:眼睛要比脸颊颜色要深,鼻梁两侧比鼻梁颜色要深,嘴巴比周围颜色要深等。 opencv api 要想使用 opencv,就必须先知道其能干什么,怎么做。于是 AP
AI研习社
2018/03/28
2.4K0
手把手教你如何用 OpenCV + Python 实现人脸识别
python-opencv人脸识别与树莓派摄像头转头跟随()
代码发布在github中https://github.com/luyishisi/The_python_code.git文件夹是face-gensui
十四君
2019/11/28
1.6K0
图像处理智能化的探索[一]:人脸识别裁图
最近在对接公司一些新闻接口的时候,发现接口茫茫多:CMS接口、无线CMS接口、正文接口、列表接口……更令人捉急的是,由于新闻推送场景不同,每条新闻的配图尺寸也就不同,比如PC要求高清大图,而移动端就会根据屏幕尺寸要求各种尺寸的小图,一个接口也就要吐出好几个尺寸的图片供客户端使用。比如无线CMS的接口里就需要640330、150120、280*210……那么问题来了,难道每多一种尺寸就需要编辑裁一次图上传到CMS?
星回
2018/08/02
1.6K0
图像处理智能化的探索[一]:人脸识别裁图
基于OpenCV实现简单人脸面具、眼镜、胡须、鼻子特效(详细步骤 + 源码)
本文给大家分享一个基于OpenCV实现简单人脸面具、眼镜、胡须、鼻子特效的实例,并附实现步骤和源码。
Color Space
2022/04/06
2.5K0
基于OpenCV实现简单人脸面具、眼镜、胡须、鼻子特效(详细步骤 + 源码)
关于OpenCV for Python入门-自带人脸检测算法比较
本来学习OpenCV的目的就是为了做人脸识别、车辆识别、人群计数等等,识别人脸首先要进行人脸检测,OpenCV中内置了Haar Cascade人脸分类器,其中包括haarcascade_frontalface_alt、haarcascade_frontalface_alt_tree、haarcascade_frontalface_alt2、haarcascade_frontalface_default这四种,本文不求甚解,只是从比对上判断一下这几种内置分类器的可用性。
python与大数据分析
2022/04/02
6810
关于OpenCV for Python入门-自带人脸检测算法比较
数据魔术师小白零基础实现简单人脸识别
本文为零基础实现人脸识别的教程,读者不需要人工智能学习背景,不需要机器学习相关基础,只要能读懂简单的Pyhton代码,便可以轻松地在自己的电脑上实现人脸识别(两个文件,加注释共96行)。
用户1621951
2020/10/22
1.1K0
数据魔术师小白零基础实现简单人脸识别
C# 使用OpenCV在一张图片里寻找人脸
例程中用到一个库叫做emgucv,是opencv\的net封装 编译打包好的稳定版,在这:https://sourceforge.net/projects/emgucv/files/emgucv/ 如果要最新代码,在这里获取:https://github.com/emgucv/emgucv
zls365
2020/08/19
2.8K0
C# 使用OpenCV在一张图片里寻找人脸
简单人脸识别一之使用opencv+cnn网络实现人脸识别
最近在研究目标检测这个方向,看到网上有很多的人脸识别帖子,所以也想着上上手看看。当时是做了三个模型出来,第一个就是网上很通用普遍的opencv+简单三层cnn网络来实现的,说实话效果真的一般吧!具体的下面再细细陈述。第二个是把三层cnn网络换成了残差网络。因为自己刚好也是学习了残差网络。就想着生搬硬套过来,但效果说实话很迷,时好时坏,把我是整蒙逼了,后面也会提的。最后一个是用opencv+MTCNN+FaceNet来实现的,效果就比较好了,训练速度快,检测人脸的准确率也比前两个模型更好。我接下来会写三篇文章来一一介绍!
全栈程序员站长
2022/08/26
1.9K0
简单人脸识别一之使用opencv+cnn网络实现人脸识别
OpenCV人脸识别之三:识别自己的脸
本系列人脸识别文章用的是opencv2,最新版的opencv3.2的代码请参考文章: OpenCV之识别自己的脸——C++源码放送(请在上一篇文章末尾查看) 在之前《OpenCV人脸识别之一:数据收集和预处理》和《OpenCV人脸识别之二:模型训练》两篇博客中,已经把人脸识别的整个流程全部交代清楚了。包括今天这篇人脸识别方面的内容都已经在上述第二篇博客中的代码中有所体现。只是今天的内容会让结果更加的形象化。仅此而已。可以说,本篇的内容是前面诸多内容的一个整合。所以今天的内容也很简洁。 简单说下流程 1、打
用户1332428
2018/03/09
1.5K0
OpenCV人脸识别之三:识别自己的脸
人工智能视觉:基于OpenCV的人脸识别技术的深度解析
OpenCV 的全称是 Open Source Computer Vision Library,是一个跨平台的计算机视觉库。OpenCV 是由英特尔公司发起并参与开发,以 BSD 许可证授权发行,可以在商业和研究领域中免费使用。OpenCV 可用于开发实时的图像处理、计算机视觉以及模式识别程序。该程序库也可以使用英特尔公司的 IPP 进行加速处理。
爱喝兽奶的熊孩子
2024/05/24
3K0
人工智能视觉:基于OpenCV的人脸识别技术的深度解析
openCV人脸识别简单案例[通俗易懂]
我们使用机器学习的方法完成人脸检测,首先需要大量的正样本图像(面部图像)和负样本图像(不含面部的图像)来训练分类器。我们需要从其中提取特征。下图中的 Haar 特征会被使用,就像我们的卷积核,每一个特征是一 个值,这个值等于黑色矩形中的像素值之后减去白色矩形中的像素值之和。
全栈程序员站长
2022/09/01
8020
就是这么霸道,使用OpenCV10行代码实现人脸检测
虽然互联网上有很多关于 OpenCV 的 Haar Cascade 对象检测模块这方面的技术资料,但这篇文章的重点是通俗易懂地解释这些概念,希望这能帮助初学者以简单的方式理解 Python 的 OpenCV 库。
小白学视觉
2022/02/14
1.1K0
就是这么霸道,使用OpenCV10行代码实现人脸检测
手把手教你opencv做人脸识别(附源码+文档)
python3.9 pycharm2020 人狠话不多,直接上代码,注释在代码里面,不说废话。
全栈程序员站长
2022/06/27
1K0
手把手教你opencv做人脸识别(附源码+文档)
利用python、tensorflow、opencv实现人脸识别(包会)!
本人是机械专业在读硕士,在完成暑假实践的时候接触到了人脸识别,对这一实现很感兴趣,所以花了大概十天时间做出了自己的人脸识别。这篇文章应该是很详细的了所以帮你实现人脸识别应该没什么问题。
全栈程序员站长
2022/11/17
4K0
利用python、tensorflow、opencv实现人脸识别(包会)!
推荐阅读
相关推荐
写一只具有识别能力的图片爬虫
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验