前言

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:
人脸检测,人脸识别,人脸特征点,人脸姿态等都可以直接编译
质量评估需要先编译人脸姿态等,才能编译

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐