详解如何用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使用logging结合decorator模式实现优化日志输出的方法
Apr 16 Python
web.py 十分钟创建简易博客实现代码
Apr 22 Python
python中numpy的矩阵、多维数组的用法
Feb 05 Python
Python处理命令行参数模块optpars用法实例分析
May 31 Python
在Python中输入一个以空格为间隔的数组方法
Nov 13 Python
Python输出\u编码将其转换成中文的实例
Dec 15 Python
python实现一个简单的ping工具方法
Jan 31 Python
python实现连连看辅助之图像识别延伸
Jul 17 Python
python实现用类读取文件数据并计算矩形面积
Jan 18 Python
python中slice参数过长的处理方法及实例
Dec 15 Python
利用Pycharm连接服务器的全过程记录
Jul 01 Python
Python Matplotlib绘制两个Y轴图像
Apr 13 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
星际争霸教主Flash的ID由来:你永远不会知道他之前的ID是www!
2019/01/18 星际争霸
jquery1.4 教程二 ajax方法的改进
2010/02/25 Javascript
Javascript实现滑块滑动改变值的实现代码
2013/04/12 Javascript
angularjs中的e2e测试实例
2014/12/06 Javascript
node.js中的fs.chown方法使用说明
2014/12/16 Javascript
JS实现网页标题随机显示名人名言的方法
2015/11/03 Javascript
JavaScript面试开发常用的知识点总结
2016/08/08 Javascript
Three.js学习之网格
2016/08/10 Javascript
Knockout结合Bootstrap创建动态UI实现产品列表管理
2016/09/14 Javascript
Vue2.0 vue-source jsonp 跨域请求
2017/08/04 Javascript
JavaScript模块详解
2017/12/18 Javascript
express+mockjs实现模拟后台数据发送功能
2018/01/07 Javascript
微信小程序map组件结合高德地图API实现wx.chooseLocation功能示例
2019/01/23 Javascript
element-ui 文件上传修改文件名的方法示例
2019/11/05 Javascript
vue中watch和computed的区别与使用方法
2020/08/23 Javascript
vue 插槽简介及使用示例
2020/11/19 Vue.js
python实现比较两段文本不同之处的方法
2015/05/30 Python
Python编程实现微信企业号文本消息推送功能示例
2017/08/21 Python
python实现Excel文件转换为TXT文件
2019/04/28 Python
基于pycharm实现批量修改变量名
2020/06/02 Python
Python自动巡检H3C交换机实现过程解析
2020/08/14 Python
pycharm 关闭search everywhere的解决操作
2021/01/15 Python
Python爬虫爬取微博热搜保存为 Markdown 文件的源码
2021/02/22 Python
软件测试企业面试试卷
2016/07/13 面试题
儿媳婚宴答谢词
2014/01/14 职场文书
前厅收银主管岗位职责
2014/02/04 职场文书
解除劳动合同协议书
2014/09/17 职场文书
店铺转让协议书(2014版)
2014/09/23 职场文书
骨干教师申报材料
2014/12/17 职场文书
公积金具结保证书
2015/05/11 职场文书
关于车尾的标语大全
2015/08/11 职场文书
赞美教师的句子
2019/09/02 职场文书
python opencv人脸识别考勤系统的完整源码
2021/04/26 Python
HTML5+CSS+JavaScript实现捉虫小游戏设计和实现
2021/10/16 HTML / CSS
canvas实现贪食蛇的实践
2022/02/15 Javascript
Python可视化神器pyecharts绘制地理图表
2022/07/07 Python