手把手教你如何用 OpenCV + Python 实现人脸识别

往期精彩文章回顾:

 [Python入门]:Python简单实例100个(入门完整版)Python入门看这个一套搞定!!

【Python教程】30个Python常用极简代码,拿走就能用!

【Python入门教程】教你如何10分钟入门Python!(超详细)

下午的时候,配好了OpenCV的Python环境,OpenCV的Python环境搭建。于是迫不及待的想体验一下opencv的人脸识别,如下文。

必备知识

Haar-like

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个人脸!

详情见:案例参考

总结

回顾一下,这次的实验就是简单的对opencv的常用的api的使用,重点在于训练数据的使用和人脸探测的处理。

我整理了一份关于pytorch、python基础,图像处理opencv\自然语言处理、机器学习、数学基础等资源库,想学习人工智能或者转行到高薪资行业的,大学生都非常实用,无任何套路免费提供,,加我Q群【856833272 】也可以领取的内部资源,人工智能题库,大厂面试题 学习大纲 自学课程大纲还有200G人工智能资料大礼包免费送哦~扫码加V免费领取资料.

  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是使用OpenCVPython实现人脸表情识别的代码示例: ```python import cv2 # 加载分类器和表情标签 cascade_classifier = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') emotions = ['Angry', 'Disgusted', 'Fearful', 'Happy', 'Neutral', 'Sad', 'Surprised'] # 加载模型 model = cv2.dnn.readNetFromTensorflow('emotion_detection_model.pb') # 读取摄像头视频流 cap = cv2.VideoCapture(0) while True: # 逐帧读取视频 ret, frame = cap.read() # 灰度化处理 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 探测人脸 faces = cascade_classifier.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30)) # 对每张脸进行表情检测 for (x, y, w, h) in faces: face = gray[y:y+h, x:x+w] # 从灰度图像中提取人脸区域 face = cv2.resize(face, (48, 48)) # 将人脸区域缩放为48x48像素 face = face.reshape((1, 48, 48, 1)) face = face.astype('float32') / 255.0 # 使用模型进行表情预测 predictions = model.predict(face) emotion_label = emotions[predictions.argmax()] # 在人脸上标注表情标签 cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 0, 255), 2) cv2.putText(frame, emotion_label, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2) # 显示视频帧 cv2.imshow('Facial Expression Recognition', frame) # 按下"q"键退出程序 if cv2.waitKey(1) & 0xFF == ord('q'): break # 清理资源 cap.release() cv2.destroyAllWindows() ``` 这段代码实现了通过摄像头进行实时人脸表情识别。其中,使用了OpenCV的级联分类器(haarcascade_frontalface_default.xml)探测人脸,并使用了一个基于TensorFlow的模型进行表情识别。模型结构可以从OpenCV的GitHub仓库中下载(emotion_detection_model.pb)。在检测到人脸后,将其提取并缩放到48x48像素的大小,然后将其输入到模型中进行表情预测。最后,在人脸上标注预测出的表情标签。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值