tensorflow图形识别_人脸识别你也可以
发现知乎编辑器支持二级标题了上个月公司繁琐的事情实在是太多了,基本上每天都加班,想来已经很久没有更新文章了,今日利用清明放假的时间,是时候总结一下上篇一文中介绍的【mac环境tensorflow的安装及更新,含人脸识别】中遗留的内容【人脸识别】了人脸识别主要分为四大块:人脸定位(face detection)、 人脸校准(face alignment)、 人脸确认(face verificatio
发现知乎编辑器支持二级标题了
上个月公司繁琐的事情实在是太多了,基本上每天都加班,想来已经很久没有更新文章了,今日利用清明放假的时间,是时候总结一下上篇一文中介绍的【mac环境tensorflow的安装及更新,含人脸识别】中遗留的内容【人脸识别】了
人脸识别主要分为四大块:人脸定位(face detection)、 人脸校准(face alignment)、 人脸确认(face verification)、人脸鉴别(face identification),往大的说以往的人脸识别主要是包括人脸图像采集、人脸识别预处理、身份确认、身份查找等技术和系统。现在人脸识别已经慢慢延伸到了ADAS中的驾驶员检测、行人跟踪、甚至到了动态物体的跟踪,这方面的内容及其复杂,由于初学,现在本神也达不到那个层次,得不断的修炼
为了控制篇幅,今日写一篇文章来简单完成人间识别的基本功能,识别一张照片中的人脸的,觉得有用的话,可以点击关注,本专栏长期更新
人脸识别你也可以
通过简单的实现,我们来完成对【夕夕照片】的人脸识别能力,效果图在文章最后,首先先介绍一下要用到OpenCV库
OpenCV
OpenCV 是最流行的计算机视觉库,原本用 C 和 C++ 开发,现在也支持 Python。
它使用机器学习算法在图像中搜索人的面部。对于人脸这么复杂的东西,并没有一个简单的检测能对是否存在人脸下结论,而需要成千上万的特征匹配。算法把人脸识别任务分解成数千个小任务,每个都不难处理。这些任务也被称为分类器。
对于类似于人脸的对象,你或许需要不少于 6000 个分类器,每一个都需要成功匹配(当然,有容错率),才能检测出人脸。但这有一个问题:对于人脸识别,算法从左上角开始计算一个个数据块,不停问“这是张脸吗”。每个数据块有超过 6000 个检测,加起来的计算量会达到数百万级别,计算机很可能会让你等得花儿都谢了。
OpenCV 使用 cascades 来避免这种情况。Cascade 是什么?
一条瀑布或者连续瀑布。
好比连续瀑布,OpenCV cascade 把人脸检测问题分解为好几步。对于每个数据块,它都进行一个粗略、快速的检测。若通过,会再进行一个更仔细的检测,以此不断类推。该算法有 30 到 50 个这样的阶段,或者说 cascade。
只有通过全部阶段,算法才会判断检测到人脸。
这样做的好处是:
大多数图形都会在头几步就产生否定反馈,算法因而不需要在它上面测试所有 6000 个特征,大大节省了时间。相对于“正常流程”耗费数个小时,这可以实时实现人脸检测。
准备工作
(1)创建一个虚拟环境
出于习惯,本神创建一个python的virtualenv环境来完成
$ virtualenv --system-site-packages -p python3 missxixi # for Python 3.n
接着激活我们的环境
miss xixi的意思就是很想很想我的夕夕了。
(2)安装OpenCV库
OK,创建完成以后,我们来安装上面介绍的OpenCV库
(1)安装cv2:pip install opencv-python
安装完成以后会在本路径下会有一个haarcascade_frontalface_default.xml的文件,后面编写代码的时候会使用到,它是一个人脸识别haar特征级联分类器,我这里的路径是,
/
如果没有的话也可以在点击下载这个文件
(3)准备要人脸识别的图片夕儿
图片尽量清晰,最好不要脸上有遮挡物,否则可能识别不出来
在当前目录创建【xier】文件夹,文件夹里面准备一张图片lovexixi.jpg
编写代码
软件环境:
python3+openCV+Mac
新建文件【lovexixi.py】
(1).定义我们要识别图片的文件
filename = "xierlovexixi.jpg"
(2)导入opencv库,并加载默认配置文件
import cv2
face_cascade = cv2.CascadeClassifier("/users/sun/chenxi/users/tensorflow/missxixi/lib/python3.7/site-packages/cv2/data/haarcascade_frontalface_default.xml")
(3)开始识别,传递参数是scaleFactor和minNeighbors,分别表示人脸检测过程中每次迭代时图像的压缩率以及每个人脸矩形保留近邻数目的最小值,下面的代码会将检测结果返回人脸矩形数组,意思如果有5个人头,那么循环识别5次,并且对识别的结果矩形数组cvtColor来设置矩阵的标志
img = cv2.imread(filename)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#传递参数是scaleFactor和minNeighbors,分别表示人脸检测过程中每次迭代时图像的压缩率以及每个人脸矩形保留近邻数目的最小值
#检测结果返回人脸矩形数组
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x, y, w, h) in faces:
img = cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
cv2.namedWindow("Human Face Result!")
cv2.imshow("Human Face Result!", img)
cv2.imwrite("images/Face.jpg", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
执行代码
在终端输入:python lovexixi.py,然后就可以看到效果了,通过如下对我,我们完成了人脸识别功能
原图为:
人脸识别以后的图片为:
说明: 这里为什么只识别了两个人头呢? 这点本神也非常奇怪,for循环里面,应该会循环四次才是,我在window下面是可以识别四个人头脸,mac下非常奇怪,希望知道的人可以告诉一下,可以参考我这里的源代码,我觉得应该是缩进的问题
提供完整代码参考:
# -*- coding: utf-8 -*-
"""
Author:晴雨sunst& 爱夕夕的sunst
Date: 2019-04-05 17:30
CopyRight:https://www.zhihu.com/people/qydq
"""
import cv2
import numpy as np
filename = "xier/lovexixi.jpg"
def missxier(filename):
# haarcascade_frontalface_default.xml存储在Lib安装的位置
# face_cascade = cv2.CascadeClassifier("D:/library/anaconda3/envs/tensorflow1/Lib/site-packages/cv2/data/haarcascade_frontalface_default.xml")
# classfier = cv2.CascadeClassifier("H:OpenCVopencvbuildetchaarcascadeshaarcascade_frontalface_alt2.xml")
# face_cascade = cv2.CascadeClassifier("/users/sun/chenxi/users/tensorflow/missxixi/lib/python3.7/site-packages/cv2/data/haarcascade_frontalface_default.xml")
face_cascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
img = cv2.imread(filename)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#传递参数是scaleFactor和minNeighbors,分别表示人脸检测过程中每次迭代时图像的压缩率以及每个人脸矩形保留近邻数目的最小值
#检测结果返回人脸矩形数组
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x, y, w, h) in faces:
img = cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
cv2.namedWindow("Human Face Result!")
cv2.imshow("Human Face Result!", img)
cv2.imwrite("images/Face.jpg", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
missxier(filename)
以下是可能用到库:
(2)安装人脸识别的库:pip install dlib == 18.17.100
(3)安装机器学习的库:pip install sklearn
(4)安装scipy库:pip install scipy
(5)安装numpy库:pip install numpy
(6)安装Pillow图像库:pip install Pillow
(7)安装matplotlib绘图库:pip install matplotlib
参考:
- Python的开源人脸识别库:离线识别率高达99.38%(附源码)
- 可能出错原因是因为用反斜杠表示文件路径
- opencv3+python如何使用的参考
- 人脸识别-奥巴马
本专栏长期更新,可以点击关注
晴雨 2019-04-05 21:27
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)