2021SC@SDUSC
做完基本的前后端文件传输的后端的服务之后,我和方新悦同学一起负责三个算法之一的视频中人脸识别的算法。
目录
一.功能介绍
这部分我们的逻辑是用户可以上传视频和目标人物的照片,返回关于这个人物的片段,如果上传多个人物,则建立人物之间的关系,返回和这些人物相关的视频片段。
使用框架:dlib软件库
语言:python
和后端(springboot)连接,引入依赖:
<dependency>
<groupId>org.python</groupId>
<artifactId>jython-standalone</artifactId>
<!--python版本是2.x还是3.x在这里指定-->
<version>2.7.0</version>
</dependency>
执行脚本:
import org.python.util.PythonInterpreter;
public class JavaPythonFile {
public static void main(String[] args) {
PythonInterpreter interpreter = new PythonInterpreter();
//相对路径
interpreter.execfile("getFaceDB.py");
}
}
实现的总体思路:
1.根据输入照片提取特征向量,存入文件
2.视频逐帧检查(实际每6帧检查一次)人脸,与输入的人脸照片对比,计算欧式距离,小于阈值认为是同一个人。
3.若检查到则记数人物出现次数加一。最终遍历处理所有gif,返回给用户关键人物出现多的gif。若要得到多人关系则还需要记录时间点,根据出现在同1个gif的时间点建立人物联系。可以让用户查询多个人同时出现的场景。这部分后面实现,先实现一个人物频繁出现场景查询。
二.人脸库建立过程记录
这部分记录根据上传的人脸照片,提取特征向量,保存到人脸文件的过程。
2.1dlib的安装
安装的过程有不少波折,dlib库的安装就花费了一下午的时间。在cmake,boost都安装后,dlib库依然没办法成功安装。
最终经过查找很多资料知道这个dlib的版本需要和python的版本一致,版本一致是体现在cp38上而非dlib的版本上,最终找到dlib-19.19.0-cp38-cp38-win_amd64.whl资源后,成功安装。
2.2人脸库建立
实现思路:
1.读取本地人脸图像
2.人脸检测,获得关键点
3.dlib处理
4.获取人脸特征向量
5.计算个人特征向量平均值
6.打上标签
7.存入人脸库
代码结构:
目标人物照片:
照片的 128D 特征,保存在csv中,供后期识别使用(这里只用了一张照片进行构建):