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

作者:Hanson1 时间:2021-07-07 19:22:35 

下午的时候,配好了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个人脸!

来源:http://www.cnblogs.com/hanson1/p/7105265.html

标签:OpenCV,Python
0
投稿

猜你喜欢

  • Mysql数据库性能优化三(分表、增量备份、还原)

    2024-01-21 00:38:54
  • 零基础使用Python读写处理Excel表格的方法

    2021-01-02 13:33:07
  • PHP session反序列化漏洞深入探究

    2023-05-30 04:53:04
  • 详解Mysql查询条件中字符串尾部有空格也能匹配上的问题

    2024-01-13 11:06:50
  • PHP中include和require的使用详解

    2023-10-22 03:57:03
  • python 爬取华为应用市场评论

    2023-08-31 23:18:32
  • python技能之数据导出excel的实例代码

    2022-09-21 15:01:53
  • 解决tensorflow训练时内存持续增加并占满的问题

    2021-09-24 02:48:05
  • php的优点总结 php有哪些优点

    2023-11-14 16:03:25
  • javascript设置文本框光标的方法实例小结

    2024-04-25 13:06:35
  • Python使用configparser读取ini配置文件

    2023-11-02 04:48:22
  • js/jq仿window文件夹框选操作插件

    2024-04-16 09:50:23
  • 使用python将excel数据导入数据库过程详解

    2024-01-22 11:28:31
  • python实现按任意键继续执行程序

    2021-02-12 12:47:10
  • Python 分形算法代码详解

    2023-05-28 04:18:51
  • Python实现图片指定位置加图片水印(附Pyinstaller打包exe)

    2023-08-13 04:27:16
  • python实现银行实战系统

    2023-04-14 18:55:19
  • 关于阿里云oss获取sts凭证 app直传 python的实例

    2021-04-29 14:16:11
  • Matplotlib绘制雷达图和三维图的示例代码

    2022-09-04 03:31:33
  • sql语句中单引号嵌套问题(一定要避免直接嵌套)

    2024-01-16 14:48:52
  • asp之家 网络编程 m.aspxhome.com