详解如何用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的Django框架中的select_related函数对QuerySet 查询的优化
Apr 01 Python
进一步探究Python中的正则表达式
Apr 28 Python
详解Python的Flask框架中的signals信号机制
Jun 13 Python
Python实现简易Web爬虫详解
Jan 03 Python
在python3.5中使用OpenCV的实例讲解
Apr 02 Python
Python Pandas找到缺失值的位置方法
Apr 12 Python
Python 获取ftp服务器文件时间的方法
Jul 02 Python
python如何提取英语pdf内容并翻译
Mar 03 Python
Python实现检测文件的MD5值来查找重复文件案例
Mar 12 Python
vue常用指令代码实例总结
Mar 16 Python
python 如何快速复制序列
Sep 07 Python
virtualenv隔离Python环境的问题解析
Jun 21 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中的生成XML文件的4种方法分享
2012/10/06 PHP
PHP实现腾讯与百度坐标转换
2017/08/05 PHP
Yii框架中使用PHPExcel的方法分析
2019/07/25 PHP
Javascript数组的排序 sort()方法和reverse()方法
2012/06/04 Javascript
JQEasy-ui在IE9以下版本中二次加载的问题分析及处理方法
2014/06/23 Javascript
用js编写的简单的计算器代码程序
2015/08/04 Javascript
js实现仿京东2级菜单效果(带延时功能)
2015/08/27 Javascript
基于Javascript实现二级联动菜单效果
2016/03/04 Javascript
onclick和onblur冲突问题的快速解决方法
2016/04/28 Javascript
Angular学习笔记之angular的$filter服务浅析
2016/11/12 Javascript
javascript实现获取图片大小及图片等比缩放的方法
2016/11/24 Javascript
微信小程序 request接口的封装实例代码
2017/04/26 Javascript
js自定义弹框插件的封装
2020/08/24 Javascript
通过jquery.cookie.js实现记住用户名、密码登录功能
2018/06/20 jQuery
Vue 组件注册实例详解
2019/02/23 Javascript
python计算圆周长、面积、球体体积并画出圆
2014/04/08 Python
探究Python多进程编程下线程之间变量的共享问题
2015/05/05 Python
Tensorflow 同时载入多个模型的实例讲解
2018/07/27 Python
python+pyqt5实现图片批量缩放工具
2019/03/18 Python
python实现AES加密和解密
2019/03/27 Python
树莓派+摄像头实现对移动物体的检测
2019/06/22 Python
为什么从Python 3.6开始字典有序并效率更高
2019/07/15 Python
Python Django切换MySQL数据库实例详解
2019/07/16 Python
python Django 创建应用过程图示详解
2019/07/29 Python
python 负数取模运算实例
2020/06/03 Python
Python使用paramiko连接远程服务器执行Shell命令的实现
2021/03/04 Python
HTML5实现的震撼3D焦点图动画的示例代码
2019/09/26 HTML / CSS
Java中的类包括什么内容?设计时要注意哪些方面
2012/05/23 面试题
教师师德教育的自我评价
2013/10/31 职场文书
初三政治教学反思
2014/01/30 职场文书
基督教婚礼主持词
2014/03/14 职场文书
迎国庆演讲稿
2014/09/05 职场文书
六一儿童节园长致辞
2015/07/31 职场文书
最新的离婚协议书范本!
2019/07/02 职场文书
Win10本地连接不见了怎么恢复? win10系统电脑本地连接不见了解决方法
2023/01/09 数码科技