#my blog www.biexiabibi.com
利用facenet实现检测图片中的人脸,将识别到的人脸向量存入数据库,此外利用post提交一个新图片(也可以提交一个图片地址,参考face_recognition_api.py文件中get_url_imgae函数自行修改),返回数据库中相似的人脸的信息
算法主要分为2个步骤
1.提取图片中的人脸 ,并保存到临时目录中
2.将人脸图片转换为128维的向量 ,便于后续求人脸相似度
项目主要分为3个步骤
1.提交post请求,将uid ugroup pic提交,进行人脸信息保存操作
2.收到请求后将pic进行处理解析为128维向量保存,并跟uid和ugroup保存入库 ,返回数据库插入成功的id
3.提交post请求,将ugroup pic提交人脸查询请求,意思为再ugroup中查看与图片pic相似的人脸
4.收到请求后,处理图片解析图片中所有的人脸,进行按库查询,然后与该图片中所有人脸相似的uid和距离(相似度距离)
按照requirements.txt中的包全部安装即可(其中mysql-connector-python 我采用的yum install 安装的)
如下
tensorflow==1.2
scipy
scikit-learn
opencv-python
h5py
matplotlib
Pillow
requests
psutil
mysql-connector-python
Werkzeug
Flask
Flask-HTTPAuth
建表语句再database.sql (需要提前建立数据库,名字自己定义,本项目数据库名为face_data) 数据库配置在face_mysql.py文件中 (第12行 配置数据库用户名、密码、地址、数据库地址 本案例配置如下
db = mysql.connector.connect(user='root', password='123456', host='127.0.0.1', database='face_data')
)
本项目是根据facenet中提取关键的代码,将其进行封装使用 所以需要提交下载facenect提供的模型 模型地址 需要可访问谷歌
该模型现在保存在百度网盘中 密码:avbl 下载下来后按照models\facenet\20170512-110547 这个目录结构存放即可 百度网盘链接 : 链接:http://pan.baidu.com/s/1i4YhAdB 密码:avbl
首先在服务器上 执行
python face_recognition_api.py
访问地址是XXXXXX:8088 这个可以配置 (文件face_recognition_api.py 最后代码中有注释)
本项目演示案例是利用谷歌浏览器插件“Postman”进行模拟的post请求 模拟post请求,如图所示 图中依次是插入、查询时的场景
- 插入请求地址为http://127.0.0.1:8088/face/insert
- 查询请求地址为http://127.0.0.1:8088/face/query 请求参数如图所示 文本字段有uid ugroup 文件字段是imagefile
处理一个文件夹下的所有图片,将人脸信息提取出来并保存到单独的文件夹下 执行
python face_recognition_savepic.py
修改文件参数
1.images_path:要处理的图片文件夹路径
2.modelpath: 模型存放路径
3.out_path : 将每个图片中每个人脸转换为128维向量保存到json文件中
例如下图是将test.jpg 和test2.jpg识别人脸 在test.jpg 识别到一个人脸 保存为test_0.jpg 在test2.jpg 识别到2个人脸 保存为test2_0.jpg test2_1.jpg