编译SeetaFace人脸5个关键点库

1. 背景

疫情期间,歇业在家,偶遇github工程,便将其调整单独的Android的library库,调整JNI层接口以及内部方法实现。

工程结构图
硬件:Huaiwe Mate 20 Pro 前置摄像头
软件:Camera2+SeetaFaceAlignment+OpenCV
Project Struct

2. 调整Cmake编译环境以及构建脚本

借鉴于OpenCV FaceDetection,调整Cmake编译脚本,引入OpenCV依赖,并引入FaceAlignment依赖,生成libseeta_fa_lib.so文件
Cmake+OpenCV
Cmake+Gradle

3. 调整Native接口

进行重新编写后,提供2个Native方式,
方法1初始化FaceAlignment,并返回索引
方法2,传入 FaceAlignment索引 face(OpenCV FaceDetector 人脸区域) OpenCV Mat(灰度)
Seeta+JNI

第二个参数的使用,此处便是JNI将java对象传递给Native,先通过类名反射寻找到类,以及生成类对应的字段。然后通过getIntField(Object,x)获取Value.此处值得学习
第三个参数借鉴于OpenCV SDK,中直接将Mat的索引地址传入,简洁快捷

4. 运行结果

人脸的区域识别依赖于OpenCV FaceDetector
人脸的关键点,眼睛,嘴角的识别不够准确,通过相机识别多帧,晃动较大
Seeta+Result

5. 参照

SeetaFaceEngine2
Android-OpenGL_Filter