人工智能开源项目之SeetaFace6
前言DoNews4月1日消息(记者 翟继茹)1日,中科视拓宣布开放SeetaFace6人脸识别算法。据介绍,SeetaFace6包含人脸识别的基本能力:人脸检测、关键点定位、人脸识别,同时增加了活体检测、质量评估、年龄性别估计,并且顺应实际应用需求,开放口罩检测以及口罩佩戴场景下的人脸识别模型。为了应对不同级别的应用需求,SeetaFace6将开放三个版本模型:模型名称网络结构速度(I7-6700
前言
DoNews4月1日消息(记者 翟继茹)1日,中科视拓宣布开放SeetaFace6人脸识别算法。据介绍,SeetaFace6包含人脸识别的基本能力:人脸检测、关键点定位、人脸识别,同时增加了活体检测、质量评估、年龄性别估计,并且顺应实际应用需求,开放口罩检测以及口罩佩戴场景下的人脸识别模型。
为了应对不同级别的应用需求,SeetaFace6将开放三个版本模型:
| 模型名称 | 网络结构 | 速度(I7-6700) | 速度(RK3399) | 特征长度 |
|---|---|---|---|---|
| 通用人脸识别 | ResNet-50 | 57ms | 300ms | 1024 |
| 带口罩人脸识别 | ResNet-50 | 34ms | 150ms | 512 |
| 通用人脸识别(小) | Mobile FaceNet | 9ms | 70ms | 512 |
项目地址:https://github.com/SeetaFace6Open/index
正文
1 入门教程
http://leanote.com/blog/post/5e7d6cecab64412ae60016ef
https://github.com/seetafaceengine/SeetaFaceTutorial
2 下载源码
git clone --recursive https://github.com/SeetaFace6Open/index.git
说明文件查看Readme
3 目录结构说明
index
|-- asserts 一些图片,无视掉
|-- docs 各功能接口说明
|-- example 包含了一个qt 人脸识别demo
|-- FaceAntiSpoofingX6 静默活体模块
|-- FaceBoxes 人脸检测模块
|-- FaceRecognizer6 人脸识别模块
|-- FaceTracker6 人脸跟踪
|-- Landmarker 人脸特征点
|-- OpenRoleZoo *常用操作的集合*
|-- PoseEstimator6 人脸朝向姿态估计
|-- QualityAssessor3 图像质量评估(亮度评估、清晰度评估、完整度评估、清晰度评估(深度)、姿态评估、姿态评估(深度)、分辨率评估)
|-- README.md
|-- SeetaAgePredictor 年龄识别
|-- SeetaAuthorize *模型解析工程*
|-- SeetaEyeStateDetector 眼睛状态检测:睁眼,闭眼
|-- SeetaGenderPredictor 性别识别
|-- SeetaMaskDetector 口罩人脸检测识别
|-- TenniS *前向计算框架*
4 编译
以下操作为ubuntu18上的操作
参阅 README.md
OpenRoleZoo 为常用操作的集合,SeetaAuthorize 为模型解析工程,TenniS 为前向计算框架。需要重点说明的是,此次 TenniS 同时放出了 GPU 计算源码,可以编译出 GPU 版本进行使用。上述三个模块为基础模块,各个 SDK 的编译均依赖上述模块,因此需要优先编译出 OpenRoleZoo, SeetaAuthorize 和 TenniS,然后再进行其他 SDK 模块的编译。
4-1 通用模块编译
1)编译OpenRoleZoo
cd ./OpenRoleZoo/craft
./build.linux.x64.sh
运行后会在index下生成build文件夹
index
|–build
|–bin
|–include
|–lib64
2)编译SeetaAuthorize
cd ./SeetaAuthorize/craft
./build.linux.x64.sh
同样的,运行后的文件存放在index下build文件夹内
3)编译TenniS
cd ./TenniS/craft
./build.linux.x64.sh
同样的,运行后的文件存放在index下build文件夹内
4-2 编译人脸检测模块
cd ./FaceBoxes/craft
./build.linux.x64.sh
ps: 经过以上步骤,一个带有人脸检测功能的库就生成在index/build中了。
5 调用
5-1 编译demo
参考每个模块中的example,这是cmake项目,很明显里面的一些内容需要根据自己的实际情况来修改。另外,这里依赖了Opencv,确保自己的环境中有Opencv。
这里根据我自己的环境修改了下Cmakelists.txt
# test
cmake_minimum_required(VERSION 3.14)
SET(TEST_PROJECT_NAME example)
set(OUT_DIR xxxx/index/build)
include_directories(${OUT_DIR}/include)
link_directories(${OUT_DIR}/lib64)
find_package(OpenCV REQUIRED
PATHS xxxx/opencv_lib_v4.1.2
NO_DEFAULT_PATH
)
add_executable(${TEST_PROJECT_NAME} example.cpp)
target_link_libraries(${TEST_PROJECT_NAME} ${OpenCV_LIBRARIES}
-lORZ_static
-lSeetaAuthorize
-ltennis
-ltennis_haswell
-ltennis_pentium
-ltennis_sandy_bridge
-lSeetaFaceDetector600)
编译ok
5-2 代码简介
运行前来看看代码里都做了啥
int main_image() {
//设置模型
seeta::ModelSetting setting;
setting.set_device(SEETA_DEVICE_CPU);
setting.append("/home/kier/CLionProjects/FaceBox/torch-faceboxes/model.json");
//创建人脸检测器
seeta::FaceDetector FD(setting);
//用opencv读取图片
auto img = cv::imread("hu.ge.jpg");
// auto img = cv::imread("1.jpg");
std::cout << "Got image: [" << img.cols << ", " << img.rows << ", " << img.channels() << "]" << std::endl;
//opencv数据转换为SeetaImageData
SeetaImageData simg;
simg.height = img.rows;
simg.width = img.cols;
simg.channels = img.channels();
simg.data = img.data;
//面部检测
auto faces = FD.detect(simg);
std::cout << faces.size << std::endl;
//opencv绘制框到图像上
for (int i = 0; i < faces.size; ++i) {
auto &face = faces.data[i];
auto &pos = face.pos;
cv::rectangle(img, cv::Rect(pos.x, pos.y, pos.width, pos.height), CV_RGB(0, 128, 128), 3);
}
//opencv显示
cv::imshow("FaceBoxes", img);
auto key = cv::waitKey();
return 0;
}
ps:很明显这里的模型加载,需要去下载,然后图片需要自己准备一张
5-3 模型下载
百度网盘
Part I:
地址: https://pan.baidu.com/s/1LlXe2-YsUxQMe-MLzhQ2Aw
提取码: ngne
内容:
age_predictor.csta
face_landmarker_pts5.csta
fas_first.csta
pose_estimation.csta
eye_state.csta
face_landmarker_pts68.csta
fas_second.csta
quality_lbn.csta
face_detector.csta
face_recognizer.csta
gender_predictor.csta
face_landmarker_mask_pts5.csta
face_recognizer_mask.csta
mask_detector.csta
Part II:
地址: https://pan.baidu.com/share/init?surl=xjciq-lkzEBOZsTfVYAT9g
提取码: t6j0
内容:
face_recognizer_light.csta
5-4 demo运行结果
修改完代码中的相关路径,跑出结果如下:
$ ./example
Got image: [700, 720, 3]
1

暂时跑了一下检测模块,其他应该类似。
2020.12.28:
人脸检测,人脸识别,人脸特征点,人脸姿态等都可以直接编译
质量评估需要先编译人脸姿态等,才能编译
更多推荐



所有评论(0)