前记
因为最近需要用到人脸识别技术,所以对openface的使用做了一个简单的测试,使用的是docker+openface+ubuntu环境,docker下安装openface比较简单,不会因为环境安装不成功而有各种问题。
在网上看到说openface这个开源框架的识别率还挺高的,还没具体的测试,后面看看效果怎么样。另外,openface是基于faceNet的,个人觉得用faceNet源码也是可以的,这里就做一个简单的openface使用探究。
使用openface需要线下自己弄一个数据集,当然你也可以用开源的,这里数据集的要求是:1. 单张图片就只能有一张人脸; 2. 图片不能过于模糊;3. 个人遇到的问题,不要中文命名!!!
正文:
使用步骤:
一、环境安装
- 安装docker,自行解决哈
- 安装openface
一行解决:docker pull bamos/openface
二、数据集准备
将不同人脸放到不同的文件夹下,每张图片只能包含一张人脸,不然不保证识别质量。然后将这些文件夹放到一个文件夹下,例如我放到了当前工作目录下的training-images。
注意,上面提到我们不能中文命名,而我们处理很多人脸时都是中文,这时候一个一个改名字很麻烦,介绍一个很好用的python库pypinyin可以转中文为拼音,可以试试。
三、 启动openface container
首先可以通过docker images查看我们是否安装好docker下的openface
然后通过一下命令启动:
docker run -p 9000:9000 -p 8000:8000 -t -i bamos/openface /bin/bash
启动之后,我们就进入了openface的容器,ls一下,进入root,就是后面我们的工作目录,当然你也可以在别的目录下工作,例如下一个子目录openface。然后在当前目录下创建一个文件夹用来存放后面前面所说的数据集,我创建的是data。
四、 复制数据集到container下
网上有处理图像集是,远程处理当前文件夹,我试了好像没成功,所以我换了第二种方式,就是直接复制,将当前目录下的文件夹复制到contanier中,就是前面所说的data目录下。
首先查看运行中的container的CONTAINER ID, 重新启动一个终端,输入命令行:docker ps -a
复制:docker cp training-images container-id:/root/data
training-images是数据集位置,而红色字体和后面是容器以及存放复制后文件的位置,复制成功后在容器中可以查看:
五、裁剪人脸
在container中运行: ./openface/util/aligned-dlib.py ./data/training-images align outerEyesAndNose ./aligned-images/ --size 96
这里./data/training-images是我们复制后的文件夹的位置,./aligned-images/是裁剪后的存放位置,size是裁剪后人脸大小,这些都是可选的。
裁剪完成后,同样可以将裁剪后的文件夹复制到宿主机的目录下查看:
docker cp container-id:/root/aligned-images path-dest
六、 提取人脸特征
命令行: ./openface/batch-represent/main.lua -outDir ./generated-embeddings/ -data ./aligned-images (有点慢)
outDir选择输出文件夹,运行成功后,可以在generated-embeddings文件夹下面看到两个文件(一个是图像路径列表,一个是对应图像的128维特征,可以复制后使用),可以复制到本地查看。
七、 SVM分类训练
命令: ./openface/demos/classifier.py train ./generated-embeddings/
运行成功后可以在generated-embeddings目录下看到多了一个classifier.pkl文件,就是SVM训练后的文件。
八、 比较
首先将需要测试的图像,复制到container中,例如我的test.jpg图像:
docker cp test.jpg container-id:/root/
然后就可以用训练好的来对比了;
./openface/demos/classifier.py infer ./generated-embeddings/classifier.pkl test.jpg
到此,docker+openface的初体验就结束了。
如果该博客对你有用,点个赞(*—*)