OpenCV: 图片人脸识别-36大数据

OpenCV: 图片人脸识别-36大数据

作者:邓旭东HIT

现在正在做论文,数据处理过程中有一个变量是对用户头像进行数据编码。图片有上万张,如果人工编码,我得累死。大致头像数据样式如下:

OpenCV: 图片人脸识别-36大数据

才开始我想到图片是由像素颜色等组成的,分析图片的主色调,正好之前有一期公众号文章分享过类似的功能。但是只是这样编码头像这个变量,意义不大。后来才发现有OpenCV这个库,图片视频处理库,目前我只是需要处理人脸功能,今天就记录下来。

项目需要

  1. 识别有无人脸
  2. 如可能,最好标出人脸个数

准备

  1. 安装opencv-python库
  2. 下载训练好的人脸分类器

分类器下载地址

https:// github.com/opencv/openc v/tree/master/data/haarcascades

必备知识

一、Haar-like

Haar-like,简单的说就是作为人脸特征即可。

Haar-like反映了图像的灰度变化情况。例如:脸部的一些特征能由矩形特征简单的描述,如:眼睛要比脸颊颜色要深,鼻梁两侧比鼻梁颜色要深,嘴巴比周围颜色要深等。

二、读取图片

只需要给出待操作的图片的路径即可。

					import cv2
					image = cv2.imread(imagepath)
				

三、灰度转换

转换成灰度的图片,计算机运算起来会效率提高。具体我也不懂,会用就行。

					import cv2
					gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
				

四、载入人脸分类器

分类器其实就是对于人脸特征的一些描述,这样opencv在读取完数据后很据训练中的样品数据,就可以感知读取到的图片上的特征,进而对图片进行人脸识别

这部分对我来说完全是黑箱。但我只需要指导输入输出即可。人脸分类器数据网络上有,我已经下载下来了。直接使用下面代码导入分类器即可。

					import cv2
					classifier = 人脸分类器路径  #这里我用的haarcascade_frontalface_default.xml
					face_cascade = cv2.CascadeClassifier(classifier)
				

训练数据下载地址:  opencv/opencv

五、识别人脸

根据训练的数据来对新图片进行识别。

					import cv2
					#探测图片中的人脸
					faces = face_cascade.detectMultiScale(image)
				

返回值faces就是opencv对图片的探测结果的体现。

返回值faces需要进一步的处理了,获得如人脸数目,如果有人脸就圈中人脸

					import cv2
					print("发现{0}个人脸!".format(len(faces)))
				

六、画图,圈中人脸

如果有人脸,就会对图片操作。对人脸位置周围画方框,方框颜色(0,255,0),方框粗细为2.

					for(x,y,w,h) in faces:
					cv2.rectangle(image,(x,y),(x+w,y+w),(0,255,0),2)
				

七、显示图像

识别结果输出到屏幕上来。

					import cv2
					cv2.imshow("Image Title",image)
				

实战

有了上面的基本了解,大邓跑出了第一个人脸识别程序。感觉一眨眼就将一个头像中人脸别出来了,真是快啊。

素材

OpenCV: 图片人脸识别-36大数据

代码

					import cv2
					import os
					photopath = os.getcwd()+'/92_avatar.jpg'
					classifier = os.getcwd()+'/haarcascade_frontalface_default.xml'
					#读取图片
					image = cv2.imread(photopath)
					#灰度转换
					gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
					#获取人脸识别训练数据
					face_casacade = cv2.CascadeClassifier(classifier)
					#探测人脸
					faces = face_casacade.detectMultiScale(image)
					# 方框的颜色和粗细
					color = (0,0,255)
					strokeWeight = 1
					#弹出框名字
					windowName = "Object Detection"
					while True:  #为了防止
					#人脸个数
					print(len(faces))
					for x, y, width, height in faces:
					cv2.rectangle(image, (x, y), (x + width, y + height), color, strokeWeight)
					#展示人脸识别效果
					cv2.imshow(windowName, image)
					#点击弹出的图片,按escape键,结束循环
					if cv2.waitKey(20) == 27:
					break
					#循环结束后,退出程序。
					exit()
				

人脸识别结果

OpenCV: 图片人脸识别-36大数据

End.

转载请注明来自36大数据(36dsj.com): 36大数据 » OpenCV: 图片人脸识别

随意打赏

人脸识别 大数据图像识别大数据人脸识别算法人脸识别数据
提交建议
微信扫一扫,分享给好友吧。