详解如何用OpenCV + Python 实现人脸识别


Posted in Python onOctober 20, 2017

下午的时候,配好了OpenCV的Python环境,OpenCV的Python环境搭建。于是迫不及待的想体验一下opencv的人脸识别,如下文。

必备知识

Haar-like

通俗的来讲,就是作为人脸特征即可。

Haar特征值反映了图像的灰度变化情况。例如:脸部的一些特征能由矩形特征简单的描述,如:眼睛要比脸颊颜色要深,鼻梁两侧比鼻梁颜色要深,嘴巴比周围颜色要深等。

opencv api

要想使用opencv,就必须先知道其能干什么,怎么做。于是API的重要性便体现出来了。就本例而言,使用到的函数很少,也就普通的读取图片,灰度转换,显示图像,简单的编辑图像罢了。

如下:

读取图片

只需要给出待操作的图片的路径即可。

import cv2
image = cv2.imread(imagepath)

灰度转换

灰度转换的作用就是:转换成灰度的图片的计算强度得以降低。

import cv2
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)

画图

opencv 的强大之处的一个体现就是其可以对图片进行任意编辑,处理。

下面的这个函数最后一个参数指定的就是画笔的大小。

import cv2
cv2.rectangle(image,(x,y),(x+w,y+w),(0,255,0),2)

显示图像

编辑完的图像要么直接的被显示出来,要么就保存到物理的存储介质。

import cv2
cv2.imshow("Image Title",image)

获取人脸识别训练数据

看似复杂,其实就是对于人脸特征的一些描述,这样opencv在读取完数据后很据训练中的样品数据,就可以感知读取到的图片上的特征,进而对图片进行人脸识别。

import cv2
face_cascade = cv2.CascadeClassifier(r'./haarcascade_frontalface_default.xml')

里卖弄的这个xml文件,就是opencv在GitHub上共享出来的具有普适的训练好的数据。我们可以直接的拿来使用。

训练数据参考地址:

https://github.com/opencv/opencv/tree/master/data/haarcascades

探测人脸

说白了,就是根据训练的数据来对新图片进行识别的过程。

import cv2

# 探测图片中的人脸

faces = face_cascade.detectMultiScale(
  gray,
  scaleFactor = 1.15,
  minNeighbors = 5,
  minSize = (5,5),
  flags = cv2.cv.CV_HAAR_SCALE_IMAGE
)

我们可以随意的指定里面参数的值,来达到不同精度下的识别。返回值就是opencv对图片的探测结果的体现。

处理人脸探测的结果

结束了刚才的人脸探测,我们就可以拿到返回值来做进一步的处理了。但这也不是说会多么的复杂,无非添加点特征值罢了。

import cv2

print "发现{0}个人脸!".format(len(faces))

for(x,y,w,h) in faces:
  cv2.rectangle(image,(x,y),(x+w,y+w),(0,255,0),2)

实例

有了刚才的基础,我们就可以完成一个简单的人脸识别的小例子了。

图片素材

下面的这张图片将作为我们的检测依据。

详解如何用OpenCV + Python 实现人脸识别

人脸检测代码

# coding:utf-8

import sys

 

reload(sys)

sys.setdefaultencoding('utf8')

#  __author__ = '郭 璞'

#  __date__ = '2016/9/5'

#  __Desc__ = 人脸检测小例子,以圆圈圈出人脸

import cv2

# 待检测的图片路径

imagepath = r'./heat.jpg'

 

# 获取训练好的人脸的参数数据,这里直接从GitHub上使用默认值

face_cascade = cv2.CascadeClassifier(r'./haarcascade_frontalface_default.xml')

 

# 读取图片

image = cv2.imread(imagepath)

gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)

 

# 探测图片中的人脸

faces = face_cascade.detectMultiScale(

  gray,

  scaleFactor = 1.15,

  minNeighbors = 5,

  minSize = (5,5),

  flags = cv2.cv.CV_HAAR_SCALE_IMAGE

)

 

print "发现{0}个人脸!".format(len(faces))

 

for(x,y,w,h) in faces:

  # cv2.rectangle(image,(x,y),(x+w,y+w),(0,255,0),2)

  cv2.circle(image,((x+x+w)/2,(y+y+h)/2),w/2,(0,255,0),2)

 

cv2.imshow("Find Faces!",image)

cv2.waitKey(0)

人脸检测结果

输出图片:

详解如何用OpenCV + Python 实现人脸识别

输出结果:

D:\Software\Python2\python.exe E:/Code/Python/DataStructor/opencv/Demo.py
发现3个人脸!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python 容器总结整理
Apr 04 Python
Python利用multiprocessing实现最简单的分布式作业调度系统实例
Nov 14 Python
python的exec、eval使用分析
Dec 11 Python
Sanic框架安装与简单入门示例
Jul 16 Python
Windows系统下PhantomJS的安装和基本用法
Oct 21 Python
Python中的取模运算方法
Nov 10 Python
python实现推箱子游戏
Mar 25 Python
python字典的常用方法总结
Jul 31 Python
修改 CentOS 6.x 上默认Python的方法
Sep 06 Python
解决Django no such table: django_session的问题
Apr 07 Python
Python3之外部文件调用Django程序操作model等文件实现方式
Apr 07 Python
python游戏开发之pygame实现接球小游戏
Apr 22 Python
python中的计时器timeit的使用方法
Oct 20 #Python
浅谈Python peewee 使用经验
Oct 20 #Python
Python 获得13位unix时间戳的方法
Oct 20 #Python
python使用 HTMLTestRunner.py生成测试报告
Oct 20 #Python
Python WXPY实现微信监控报警功能的代码
Oct 20 #Python
python爬虫 正则表达式使用技巧及爬取个人博客的实例讲解
Oct 20 #Python
放弃 Python 转向 Go语言有人给出了 9 大理由
Oct 20 #Python
You might like
通过PHP的内置函数,通过DES算法对数据加密和解密
2012/06/21 PHP
30个php操作redis常用方法代码例子
2014/07/05 PHP
如何使用Gitblog和Markdown建自己的博客
2015/07/31 PHP
thinkPHP数据查询常用方法总结【select,find,getField,query】
2017/03/15 PHP
yii 2.0中表单小部件的使用方法示例
2017/05/23 PHP
javascript中巧用“闭包”实现程序的暂停执行功能
2007/04/04 Javascript
ExtJs设置GridPanel表格文本垂直居中示例
2013/07/15 Javascript
滚动条响应鼠标滑轮事件实现上下滚动的js代码
2014/06/30 Javascript
JavaScript事件委托技术实例分析
2015/02/06 Javascript
js实现进度条的方法
2015/02/13 Javascript
javascript 闭包详解
2015/02/15 Javascript
基于javascript实现图片滑动效果
2016/05/07 Javascript
深入分析node.js的异步API和其局限性
2016/09/05 Javascript
深入剖析Express cookie-parser中间件实现示例
2018/02/01 Javascript
Vue + Elementui实现多标签页共存的方法
2019/06/12 Javascript
js实现秒表计时器
2019/12/16 Javascript
vue实现图片懒加载的方法分析
2020/02/05 Javascript
node创建Vue项目步骤详解
2020/03/06 Javascript
用js编写留言板
2020/03/17 Javascript
Pyramid添加Middleware的方法实例
2013/11/27 Python
Python彩色化Linux的命令行终端界面的代码实例分享
2016/07/02 Python
python3中的eval和exec的区别与联系
2019/10/10 Python
Django框架获取form表单数据方式总结
2020/04/22 Python
Python远程linux执行命令实现
2020/11/11 Python
原生canvas制作画图小工具的踩坑和爬坑
2020/06/09 HTML / CSS
YSL Beauty加拿大官方商城:圣罗兰美妆加拿大
2017/05/15 全球购物
俄罗斯连接商品和买家的在线平台:goods.ru
2020/11/30 全球购物
自荐书范文范例
2014/02/13 职场文书
保证书范文大全
2014/04/28 职场文书
普通话宣传标语
2014/06/26 职场文书
国际贸易本科毕业生求职信
2014/09/26 职场文书
师德先进个人事迹材料
2014/12/19 职场文书
幼儿园辞职信
2015/05/13 职场文书
2015年安全生产月工作总结
2015/07/27 职场文书
MySQL表字段时间设置默认值
2021/05/13 MySQL
《艾尔登法环》发布最新「战技」宣传片
2022/04/03 其他游戏