发新帖

【深度学习】人脸识别、视频中找人的实现

[复制链接]
605 0
本帖最后由 chengstone 于 2017-9-4 20:47 编辑

FindFaceInVideo
这是一个人脸识别的小demo,通过待识别的人脸图像在视频影像中找人。
Author chengstone
本Demo完成于2017年3月末4月初。
程序使用了VGG的模型参数,这里没有上传,需要你另外下载,共两个文件(VGG_FACE_deploy.prototxt,VGG_FACE.caffemodel)放到VGGFace目录下。 我当时的下载地址如下:http://101.96.8.164/www.robots.ox.ac.uk/~vgg/software/vgg_face/src/vgg_face_caffe.tar.gz
下面是在图片中找人的output:
视频中找人的output在文件夹out中,有4个avi文件:https://github.com/chengstone/FindFaceInVideo/tree/master/VGGFace/out。
目录结构:
facedetect.py:主程序,注意在使用时要将里面的路径改写成你本地的路径。
face_recognition.py:提供两个人脸特征比较的功能。 这个程序来源于https://github.com/HolmesShuan/DeepID-I-Reimplement,我做了修改,感兴趣的同学可以BeyondCompare差分一下。
out文件夹:用来存放视频找人的输出结果。
tmp.jpg:是在图片中根据提供的待找人的人脸进行找人时的输出。
以图片文件名命名的文件夹:比如IMG_3588,qingyansi等文件夹是对图片进行人脸识别测试时的输出,只关注是否找到人脸,而不进行是否是我们要找的人的判断。
chengshd文件夹:用来存放我个人的测试用例,包含图片和视频。
targets.txt:待查找人的图片路径列表。
positive_pairs_path.txt:是face_recognition.py的测试数据,每行提供用于比较的两个图片路径。例如:2-1.png 2-2.png。 测试函数face_recog_test读取每一对图片,计算各组图片最佳的参数:Accuracys,Thresholds,Precisions,Recalls,F1Score等。
其他文件:基本上都是我测试时的输出。
程序的使用:
本程序还要用到另外一个程序,请一起下载https://github.com/chengstone/SeetaFaceEngine
本Demo分为两个工程:SeetaFaceEngine和VGGFace。 其中SeetaFaceEngine来源于https://github.com/seetaface/SeetaFaceEngine,我们只使用其中的FaceDetection和FaceAlignment, 主要用来做待查找人图片中的人脸检测和定位。其中FaceAlignment/src/test/face_alignment_test.cpp我做了修改,使程序能够以命令行的方式支持多样化的人脸识别。 VGGFace用来做人脸的比较,这里也使用了opencv的人脸检测,主要用于在目标图片中的多人脸的检测。
运行准备:一、环境依赖,请提前安装好:
opencv2 caffe Python2.7
二、build顺序:
1.先编译SeetaFaceEngine下面的FaceDetection,编译方法可以参见里面的readme,大致命令是:
mkdir build
cd build
cmake ..
make
2.然后将编译好的文件(以我的电脑编译好后为例是facedet_test,libseeta_facedet_lib.dylib这两个文件), FaceDetection的.h文件face_detection.h,seeta_fa_v1.1.bin和seeta_fd_frontal_v1.0.bin几个文件拷贝到FaceAlignment的build目录下, 然后编译,编译命令跟build FaceDetection一样。
mkdir build
cd build
cmake ..
make
编译好后的文件名(以我的电脑编译好后为例):fa_test
3.主要使用的就是FaceAlignment。 这个程序的命令行格式是:
第一种: fa_test 源图片全路径 目标保存文件夹路径 [图片大小变幻的像素数]
其中[图片大小变幻的像素数]可以省略,省略的话默认是不缩放图片的大小。
举例:fa_test /path/to/123.jpg /path/to/folder 32
将图片123.jpg识别出的人脸图片输出到/path/to/folder文件夹中,缩放后的尺寸是32 * 32的大小。
第二种:fa_test 保存源图片全路径列表的文件路径
其中[存源图片全路径列表的文件路径]是一个文本文件,里面是若干行第一种命令格式的字符串,用于批量识别图片。
举例:fa_test /path/to/image.txt
其中image.txt里面的内容类似如下内容,可以是一行也可以是多行:
/Users/chengstone/Downloads/ML/att_faces/s40/9.jpg /Users/chengstone/Downloads/ML/att_faces_new/s40 64 /Users/chengstone/Downloads/ML/att_faces/s40/8.jpg /Users/chengstone/Downloads/ML/att_faces_new/s40 64 /Users/chengstone/Downloads/ML/att_faces/s40/7.jpg /Users/chengstone/Downloads/ML/att_faces_new/s40 64 /Users/chengstone/Downloads/ML/att_faces/s40/6.jpg /Users/chengstone/Downloads/ML/att_faces_new/s40 64
这个程序有时并不能准确识别人脸。。。
第三种:fa_test
如果不传入参数,默认在程序当前路径下读取image.txt文件,文件内的格式参见上面的说明。这个是本Demo的使用方式。
三、开始视频/图片找人:
主要代码在VGGFace中的facedetect.py中。 这里使用了caffe的VGG模型用来做人脸的特征提取和特征比较。 由于我自己训练的模型准确率太低(采用的DeepID模型,可能是我没有实现好,而且我的训练集也不太够),只好使用VGG公开的模型参数。
facedetect.py的使用方法:
1.先修改VGGFace/targets.txt文件,里面是图片路径的列表,每一个图片必须只有一个人。 如果只有一个图片意味着只找这一个人,就是我说的待查找人。多个的话就是在视频和图片中找多个人。
2.facedetect.py的命令行参数:
python ./facedetect.py —-content 图片和视频的全路径
其中[图片和视频的全路径]是我们要查找的目标。
举例1:python ./facedetect.py —-content /path/to/123.jpg
举例2:python ./facedetect.py —-content /path/to/456.mov
识别过程:
由于帖子字数限制,更多内容请参见:https://github.com/chengstone/Fi ... ob/master/README.md
Enjoy!

举报 使用道具

回复
*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

更多

关注我们

QQ:448109455 周一至周日8:30-20:30
快速回复 返回顶部 返回列表