详解如何用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 相关文章推荐
django批量导入xml数据
Oct 16 Python
Django rest framework工具包简单用法示例
Jul 20 Python
Python简单读写Xls格式文档的方法示例
Aug 17 Python
解决pycharm的Python console不能调试当前程序的问题
Jan 20 Python
Python字符串匹配之6种方法的使用详解
Apr 08 Python
Python matplotlib修改默认字体的操作
Mar 05 Python
python pyqtgraph 保存图片到本地的实例
Mar 14 Python
windows、linux下打包Python3程序详细方法
Mar 17 Python
python list等分并从等分的子集中随机选取一个数
Nov 16 Python
浅析Python模块之间的相互引用问题
Feb 26 Python
Python使用random模块实现掷骰子游戏的示例代码
Apr 29 Python
python爬取某网站原图作为壁纸
Jun 02 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中使用Select 查询语句的实例
2014/02/19 PHP
php使用wordwrap格式化文本段落的方法
2015/03/17 PHP
php使用cookie实现记住登录状态
2015/04/27 PHP
BOM与DOM的区别分析
2010/10/26 Javascript
文本框获得焦点和失去焦点的判断代码
2012/03/18 Javascript
基于JavaScript 数据类型之Boolean类型分析介绍
2013/04/19 Javascript
基于jquery实现控制经纬度显示地图与卫星
2013/05/20 Javascript
js实现3D图片逐张轮播幻灯片特效代码分享
2015/09/09 Javascript
JavaScript常用代码书写规范的超全面总结
2016/09/11 Javascript
轻松实现jQuery添加删除按钮Click事件
2017/03/13 Javascript
ES6中的箭头函数实例详解
2017/04/06 Javascript
Angular4 中常用的指令入门总结
2017/06/12 Javascript
iscroll实现下拉刷新功能
2017/07/18 Javascript
js使用formData实现批量上传
2020/03/27 Javascript
Bootstarp在pycharm中的安装及简单的使用方法
2019/04/19 Javascript
五分钟搞懂Vuex实用知识(小结)
2019/08/12 Javascript
python实现问号表达式(?)的方法
2013/11/27 Python
python获取Linux下文件版本信息、公司名和产品名的方法
2014/10/05 Python
Python 登录网站详解及实例
2017/04/11 Python
Python通过调用有道翻译api实现翻译功能示例
2018/07/19 Python
Pycharm设置去除显示的波浪线方法
2018/10/28 Python
使用python获取电脑的磁盘信息方法
2018/11/01 Python
python 实现12bit灰度图像映射到8bit显示的方法
2019/07/08 Python
在OpenCV里实现条码区域识别的方法示例
2019/12/04 Python
如何基于python把文字图片写入word文档
2020/07/31 Python
Python常用外部指令执行代码实例
2020/11/05 Python
详解python的变量缓存机制
2021/01/24 Python
基于HTML5 Canvas 实现商场监控实例详解
2017/11/20 HTML / CSS
全球第二大家装零售商:Lowe’s
2018/01/13 全球购物
可爱的童装和鞋子:Fabkids
2019/08/16 全球购物
新教师培训心得体会
2014/09/02 职场文书
个人作风建设自查报告
2014/10/22 职场文书
css中z-index: 0和z-index: auto的区别
2021/08/23 HTML / CSS
关于ObjectUtils.isEmpty() 和 null 的区别
2022/02/28 Java/Android
Python读写yaml文件
2022/03/20 Python
Win11 Dev 预览版25174.1000发布 (附更新修复内容汇总)
2022/08/05 数码科技