Openface 入门
Openface 简单入门
背景
Openface是一个开源的人脸识别框架,同类软件产品还有 seetaface ,DeepID等,当然,如果算上商业的产品,那就更多了。
Openface人脸比对结果的准确度可能不是很好,它是有待提升的。如果有能力的话, 可能通过源码进行优化。 一般来说,置信度小于1 的基本可以接受的,但是这个要看具体的使用场景,我们可以根据具体的业务设置这个置信度阈值。 如果Openface 准确度达不到我们的要求, 我们可以多试几次,或者提供更加高质量的训练库图片和比对图片,或者业务上进行控制和优化,比如前端提示图片无法识别,图片不清晰等等。
安装
官方推荐用docker来安装openface,这个参照官方文档,直接用docker安装即可。如果自己一步步去安装的话,估计很花时间,而且不一定能完成。
除了安装,我们至少需要做一些准备工作,这就是人脸训练; 然后, 我们才可以使用它进行人脸识别/比对等操作。
1 人脸训练
上传基础图片,比如客户经理的图片:
将同一个人的照片,以其名字命名,然后放入同一个目录,目录名字以人名进行命名。然后上传或挂载到bamos/openface 镜像容器的图像训练目录:/root/openface/data/mydata/train_img,
如
胡歌的图片目录是:/root/openface/data/mydata/train_img/huge/
杨洋的图片目录是:/root/openface/data/mydata/train_img/yangyang/
我的图片目录是:/root/openface/data/mydata/train_img/lk/
照片要求:
尽量清晰,正面照,单人照,有且只有一张完整的人脸,可以有表情,但是尽量简单,不要太夸张的表情。照片至少8张,20 张以上为佳。 照片数量越多,效果越好。照片背景不限,衣着不限,越丰富越好,但一定要是同一个人的照片。图像大小以20~500K 为佳。
图片预处理:
./util/align-dlib.py data/mydata/train_img/ align outerEyesAndNose data/mydata/aligned_images/ --size 64
特征提取:
./batch-represent/main.lua -outDir data/mydata/generated_charaters/ -data data/mydata/aligned_images/
训练图片:
./demos/classifier.py train data/mydata/generated_charaters/
2 使用它做人脸比对
上传照片:
先将单张照片放入到容器的/root/openface/data/mydata/others/ 目录,图片格式尽量统一,比如都使用jpg格式。
调用接口,结果验证:
./demos/classifier.py infer data/mydata/generated_charaters/classifier.pkl /root/openface/data/mydata/others/{hu,lk }*
这里的/root/openface/data/mydata/others/{hu,lk }* 是需要进行和现有图片库做分类比对的图片, 这里 {hu,lk }* 是一个正则表达式, 表示那个目录下, hu或lk 开头的所有文件。 我们可以指定一个具体的路径,比如:
/root/openface/data/mydata/others/zhangsan.jpg
输出:
=== /root/openface/data/mydata/others/hg4.jpg ===
Predict huge with 0.91 confidence.
=== /root/openface/data/mydata/others/lk (1).jpg ===
Predict lk with 0.93 confidence.
=== /root/openface/data/mydata/others/lk (2).jpg ===
Predict lk with 0.91 confidence.
如上所见,输出结果格式是这样的:
=== 正在进行比对的图片的全路径 ===
Predict 人名 with 置信度 confidence。
表示的意思是, 如
=== /root/openface/data/mydata/others/hg4.jpg ===
Predict huge with 0.91 confidence.
意为: /root/openface/data/mydata/others/hg4.jpg 这张图片是 huge(胡歌)的可能性是0.91。 一般来说, 置信度越小,说明判断正确的可能性越大, 结果小于1 表示基本可以相信。 大于1 表示基本不可信。
3 常见问题
Q: 人脸图片无法训练或无法比对, 出现cant find a face … 报错
A: 这个很可能是图片质量问题,图片要尽量清晰和完整,不能有太大变形,光照不能太暗, 光线要均匀等等。如果图片没拍摄好,我们需要删除重新拍摄,然后上传。
Q: 同一个人的照片,结果显示置信度大于1, 是怎么回事?
A: 这种情况是可能发生的,至少有两个方面原因,1是他的训练图片库的照片质量不高,2是他新上传的需要进行比对的图片质量不高。对此我们可以多试几次,或者提供更加高质量的训练库图片和比对图片,或者业务上进行控制和优化。
Q: 需要比对的图片是huge, 怎么被分到了yangyang 这个类别,而且置信度还挺好的,怎么解释?
A: 这个还是图片质量问题,有两个方面原因,同上。
参考:
http://www.cnblogs.com/minsons/p/7922080.html
http://cmusatyalab.github.io/openface/
http://www.cnblogs.com/pandaroll/p/6590339.html
http://blog.csdn.net/u011531010/article/details/52270023
Openface 入门的更多相关文章
- 新手如何入门pytorch?
我最近的文章中,专门为想学Pytorch的新手推荐了一些学习资源,包括教程.视频.项目.论文和书籍.希望能对你有帮助:一.PyTorch学习教程.手册 (1)PyTorch英文版官方手册:https: ...
- Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求
上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...
- ABP入门系列(1)——学习Abp框架之实操演练
作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...
- Oracle分析函数入门
一.Oracle分析函数入门 分析函数是什么?分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计 ...
- Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数
上一篇:Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数 之前介绍了简单的路由以及传参,这篇文章我们将要学习复杂一些的路由以及传递其他附加参数.一个好的路由系统可以使我们 ...
- Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数
上一篇:Angular2入门系列教程-服务 上一篇文章我们将Angular2的数据服务分离出来,学习了Angular2的依赖注入,这篇文章我们将要学习Angualr2的路由 为了编写样式方便,我们这篇 ...
- Angular2入门系列教程4-服务
上一篇文章 Angular2入门系列教程-多个组件,主从关系 在编程中,我们通常会将数据提供单独分离出来,以免在编写程序的过程中反复复制粘贴数据请求的代码 Angular2中提供了依赖注入的概念,使得 ...
- wepack+sass+vue 入门教程(三)
十一.安装sass文件转换为css需要的相关依赖包 npm install --save-dev sass-loader style-loader css-loader loader的作用是辅助web ...
- wepack+sass+vue 入门教程(二)
六.新建webpack配置文件 webpack.config.js 文件整体框架内容如下,后续会详细说明每个配置项的配置 webpack.config.js直接放在项目demo目录下 module.e ...
随机推荐
- 一、JAVA变量类型:①类变量与实例变量的异同点
在JAVA中,变量使用前必须声明,格式如下: int a; //单个变量声明 int b, c, d; //多个变量一起声明 int e = 1, f = 2, g = 3; //声明时同时赋值(初始 ...
- History of program(1950-2020)
1957年 约翰·巴科斯(John Backus)创建了是全世界第一套高阶语言:FORTRAN. John Backus 1959年 葛丽丝·霍普(Grace Hopper)创造了现代第一个编译器A- ...
- LINK : fatal error LNK1104: cannot open file .exe' 重开application Experience 服务即可
这是一个坑, , 答案五花八门这个解决了我的痛点. 就这样了.
- Jmeter分布式及在Linux上执行jmeter脚本
Jmeter分布式 主控机即自己的电脑,控制并发数 压力机即别人的机器,和主控机一起添加压力 1.其他的压力机需要启动Jmeter-server.bat 启动成功页面 2.主控机的Jmeter 的bi ...
- python基础08_set集合
关于前几次课的回顾: #!/usr/bin/env python # coding:utf-8 ## 字符串 数字 列表 元组 字典 ## 可变:列表 字典 ## 不可变:字符串, 数字, 元组 na ...
- 互联网创业公司如何防御 DDoS 攻击?采用CDN服务
收集了发表于2015年 攻击者是控制一个足够大的分布式集群来发起攻击,各种杂七杂八的包,什么都会有.根本不在乎你开的什么服务,也没那耐心分析你有什么服务.比如哪怕你根本没开UDP的任何服务,但他就是发 ...
- 关于CMD的一些小技巧
1.cd命令无法切换路径怎么办? a)切换盘符不好使
- Centos yum 命令行 安装KDE Desktop
1:修改yum源为本地源 (见相关随笔:centos 配置本地yum源) 2:# yum groupinstall "X Window System" ← 安装基本的X系统组件# ...
- elasticsearch 拼音检索能力研究
gitchennan/elasticsearch-analysis-lc-pinyin 配置参数少,功能满足需求. 对应版本 elasticsearch2.3.2 对应 elasticsearch-a ...
- 深入理解Java中停止线程
一.停止线程会带来什么? 对于单线程中,停止单线程就是直接使用关键字return或者break,但是在停止多线程时是让线程在完成任务前去开启另外一条线程,必须放弃当前任务,而这个过程是不可预测,所以必 ...