详解如何用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 27 Python
用Python遍历C盘dll文件的方法
May 06 Python
详解python调度框架APScheduler使用
Mar 28 Python
Django admin实现图书管理系统菜鸟级教程完整实例
Dec 12 Python
用matplotlib画等高线图详解
Dec 14 Python
Python实现获取前100组勾股数的方法示例
May 04 Python
Python3网络爬虫中的requests高级用法详解
Jun 18 Python
10分钟用python搭建一个超好用的CMDB系统
Jul 17 Python
Python自动化完成tb喵币任务的操作方法
Oct 30 Python
Python装饰器结合递归原理解析
Jul 02 Python
解决PyCharm不在run输出运行结果而不是再Console里输出的问题
Sep 21 Python
Python中使用aiohttp模拟服务器出现错误问题及解决方法
Oct 31 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作为Shell脚本语言使用
2006/10/09 PHP
从零开始学YII2框架(六)高级应用程序模板
2014/08/20 PHP
php微信高级接口调用方法(自定义菜单接口、客服接口、二维码)
2016/11/28 PHP
PHP面向对象五大原则之里氏替换原则(LSP)详解
2018/04/08 PHP
javascript事件模型代码
2007/07/01 Javascript
模仿JQuery.extend函数扩展自己对象的js代码
2009/12/09 Javascript
13个绚丽的Jquery 界面设计网站推荐
2010/09/28 Javascript
jQuery侧边栏随窗口滚动实现方法
2013/03/04 Javascript
原生javascript实现图片滚动、延时加载功能
2015/01/12 Javascript
Jquery插件实现点击获取验证码后60秒内禁止重新获取
2015/03/13 Javascript
jQuery使用addClass()方法给元素添加多个class样式
2015/03/26 Javascript
jQuery插件formValidator实现表单验证
2016/05/23 Javascript
深入了解javascript 数组的sort方法
2018/06/01 Javascript
vue修改对象的属性值后页面不重新渲染的实例
2018/08/09 Javascript
详解vuejs中执行npm run dev出现页面cannot GET/问题
2020/04/26 Javascript
原生js实现轮播图特效
2020/05/04 Javascript
如何构建一个Vue插件并生成npm包
2020/10/26 Javascript
使用Python编写简单网络爬虫抓取视频下载资源
2014/11/04 Python
Python的shutil模块中文件的复制操作函数详解
2016/07/05 Python
Python Queue模块详细介绍及实例
2016/12/27 Python
Django 浅谈根据配置生成SQL语句的问题
2018/05/29 Python
Windows下安装Scrapy
2018/10/17 Python
Python 文本文件内容批量抽取实例
2018/12/10 Python
python安装numpy和pandas的方法步骤
2019/05/27 Python
Python2 与Python3的版本区别实例分析
2020/03/30 Python
CSS3 @keyframes简单动画实现
2018/02/24 HTML / CSS
Canvas 像素处理之改变透明度的实现代码
2019/01/08 HTML / CSS
Myprotein瑞士官方网站:运动营养和健身网上商店
2019/09/25 全球购物
保险内勤岗位职责
2014/04/05 职场文书
物流管理专业自荐信
2014/06/23 职场文书
村干部群众路线教育活动对照检查材料
2014/10/01 职场文书
党的群众路线对照检查材料思想汇报(学校)
2014/10/04 职场文书
2014年社区个人工作总结
2014/12/02 职场文书
谢师宴学生致辞
2015/07/27 职场文书
2015年六年级班主任工作总结
2015/10/15 职场文书
只用50行Python代码爬取网络美女高清图片
2021/06/02 Python