手机销量被超越 华为智能手表又如何?
扫描二维码
随时随地手机看文章
在上一期基于DragonBoard 410c开发板实现人脸识别文章中,已经教大家如何利用Python实现人脸识别的第一个部分——人脸检测功能,今天在前面人脸检测的基础上,进一步教大家如何使用createFisherFaceRecognizer在dragonbaord 410c开发板上来进行人脸识别,今天将重点介绍该方法的原理和调用方法,处理中只是以识别前面人脸检测方法检测出来的人脸和数据库中存入的人脸进行匹配,最终识别人脸对象。
首先我们需要准备人脸数据,这里我对使用上一期文章中的获取人脸的方法进行了封装,写成了getFace.py文件,通过执行该文件在Dragonboard 410c上采集了三个人的人脸,每个人的人脸采集5次不同角度数据,分别保存到了usrImg文件夹下的001、002、003文件夹中,对应的命名为1.jpg,2.jpg,3.jpg,4.jpg,5.jpg,这些数据作为训练数据,然后基于这些数据调用FaceRecognizer提供的方法来实现对测试人脸的预测。
准备好数据后,就可以利用这些数据进行简单的人脸识别了,根据上述数据,使用Python编写程序,将数据导入到系统中,然后构建对应的训练数据集合和标签,其中相同的图片对应相同的标签数据,具体的对应方式如下:
人脸图片 标签
./usrImg/001/1.jpg 0
./usrImg/001/2.jpg 0
./usrImg/001/3.jpg 0
./usrImg/001/4.jpg 0
./usrImg/001/5.jpg 0
./usrImg/002/1.jpg 1
./usrImg/002/2.jpg 1
./usrImg/002/3.jpg 1
./usrImg/002/4.jpg 1
./usrImg/002/5.jpg 1
./usrImg/003/1.jpg 2
./usrImg/003/2.jpg 2
./usrImg/003/3.jpg 2
./usrImg/003/4.jpg 2
./usrImg/003/5.jpg 2
在读取中,通过以下代码来读取到limg和lables两个列表中:
dir = ['./usrImg/001/','./usrImg/002/','./usrImg/003/']
name = ['1.jpg','2.jpg','3.jpg','4.jpg','5.jpg']
lables = []
limg = []
n = 0
for x in dir:
for y in name:
obj = cv2.imread(x+y,0)
obj2=cv2.resize(obj,(400,500))
limg.append(obj2)
lables.append(n)
n = n+1
然后就可以调用FaceRecognizer中提供的方法来进行人脸训练了,具体代码如下:
model = cv2.createFisherFaceRecognizer();
model.train(limg,np.array(lables))
完成训练后,读取测试人脸,这里可以用上一期人脸识别文章中的代码读取获取人脸,接着就可以进行人脸测试了,具体代码如下:
img1 = cv2.imread(‘test.jpg’,0)
test=cv2.resize(img1,(400,500))
result = model.predict(test)
print result
完成后,将代码进行保存,运行脚本,就可以得到人脸检测结果,将会输出被检测人脸匹配的标签和相似度,结果如下:
以上就是整个人脸识别实现的过程,后续blog中将进一步完善如何利用摄像头直接检测人脸和识别出对应的人,并且显示姓名。