调用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,训练集中包含捂嘴图片)
说明需要一些不同姿态的训练集尤其是对脸部遮挡的,因为每次训练的时候都会对脸部进行对其,脸以外的部分均被剔除了,在脸上做文章并进行训练才行,并且要加大训练集,实时动态的进行识别的时候准确率会比静态识别图片差一些。
不在一个电脑上实验,所以贴图有点困难。。。。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Apache vhost配置
- win10使用WSL 2运行Docker Desktop,运行文件从C盘迁移到其他目录
- htaccess简介和16个小技巧
- Nginx禁止指定目录运行PHP脚本
- 机器学习数学笔记|偏度与峰度及其 python 实现
- ABP(ASP.NET Boilerplate Project)快速入门
- IdentityServer4 4.x版本 配置Scope的正确姿势
- 个人总结的部分数据验证规则
- 一句话实现php日期转中文汉字
- .Net Core微服务入门全纪录(八)——Docker Compose与容器网络
- PHP中少用但是很好用的方法
- 使用一维数据构造简单卷积神经网络
- .Net Core微服务入门全纪录(完结)——Ocelot与Swagger
- PHP使用GD库生成文件
- 反向传播算法从原理到实现