调用Dlib库进行人脸关键点标记

时间:2022-05-07
本文章向大家介绍调用Dlib库进行人脸关键点标记,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

       昨天调试了人脸识别(classifier_webcam)这个程序,效果不错,响应速度也挺快。按照http://blog.csdn.net/u011531010/article/details/52270023博客内容进行调试即可。

       今天调试了python写的landmark,用的是dlib库里的68点文件,其中dat文件为训练好的68点标注,我们加入了视频的实时检测的功能,仿照classifier_webcam这个文件(openface中的)使用VideoCapture(0)这个(0为本机摄像头,1为USB外设)函数打开,然后读取frame。注意标注时使用了for 循环,for i range(0,67),将点一个个标注出来,经过使用print函数打印出shape.part(i).x  shape.part(i).y,可见其为坐标 用cvCircle函数进行画圈。结果显示尚可,但仍为反映速度较慢,明天使用cuda进行加速,但在这之前需要安装一些文件,拟采用http://www.mobibrw.com/2017/7153 博客中使用的方法。

关键代码:

ret, frame=video_capture.read()
dets =  detector(frame, 1)
for k, d in enumerate(dets):
shape = predictor(frame, d)
for idx  in range(0, 67):
#pos = (point[0,0],point[0,1])
pos = (shape.part(idx).x, shape.part(idx).y)
#print(shape.part(i).x,shape.part(i).y)
cv2.circle(frame, pos, 5, color = (225, 0, 0))
#cv2.putText(frame, str(idx), pos, color = (0, 255, 0))
cv2.imshow('N1', frame)

landmark效果应该如下:

       就先写到这儿了,明天再看。

-------------------------------------------------------------------------------------------------------------------------------------------

果然遇到了问题,不过这次问题解决起来还是挺顺利的,报错:"libcudart.so.8.0 cannot open shared object file: No such file or directory"

参考博客:http://blog.csdn.net/u014696921/article/details/60140264  即可完成。

对Openface训练的人脸识别(Face Recognition)模型进行测试,这个模型过程为:输入整个图片-人脸检测(调用dlib中frontal_face_detector库)-进行人脸对齐(仿射变换affine transform)-输入神经网络(CNN)+Triplet loss函数修正网络-- 输入128维特征,生成csv矩阵文件  最后使用SVM分类器进行分类生成pkl分类器,最后使用classifier.py调用形成的pkl进行识别分类。【实践过程参考http://blog.csdn.net/u011531010/article/details/52270023】

classifier_webcam实验结果:

阈值threshold越小,越容易匹配到一个人,但错误率也越高。

转头角度过大会失败,捂着眼睛(wcc)失败,不含捂嘴捂着眼睛的图片

捂嘴成功(zzy,训练集中包含捂嘴图片)

说明需要一些不同姿态的训练集尤其是对脸部遮挡的,因为每次训练的时候都会对脸部进行对其,脸以外的部分均被剔除了,在脸上做文章并进行训练才行,并且要加大训练集,实时动态的进行识别的时候准确率会比静态识别图片差一些。

不在一个电脑上实验,所以贴图有点困难。。。。