RK3399 PRO快速开发 - 人脸特征点定位

本帖最后由 rany 于 2019-12-5 20:11 编辑

简介
Rock-X SDK 是基于 RK3399Pro/RK1808 平台的一套 AI 组件库。开发者通过 Rock-X SDK提供的 API 接口能够快速构建 AI 应用。
Rock-X下载地址:百度网盘-链接不存在 提取码:ji14
Rock-X SDK 主要功能

类别

功能

目标检测

人头检测、人车物检测

人脸

人脸关键点、人脸属性分析、人脸识别

车牌

车牌检测、车牌识别

人体关键点

人体骨骼关键点、手指关键点

本篇是使用Rock-X SDK进行人脸特征点定位快速开发的过程,使用自定义或其它的模型的请使用rknn-toolkit和rknn-api进行开发(链接: http://wiki.t-firefly.com/zh_CN/3399pro_npu/)。

性能指标
人脸检测性能

参数

性能指标

适应角度

平面内人脸左右旋转±45°
侧脸左右偏转±60°
侧脸上偏转 60°
侧脸下偏转 45°

最大距离

11 米(测试摄像头 FOV=60°)

mAP

mAP@IOU0.5=0.857

人脸特征点定位
人脸特征点定位会获取人脸的48个关键点。

数据集

误差

300w_cropped

6.01%

人脸特征点定位误差计算公式如下:

euclidean(d(j) − g(j)) 表是第 j 个检测点与标注点之间的欧式距离。d 表示左外眼角和右外眼角的欧式距离。

调用过程

相关代码
以下为Android的相关代码,完整代码在/RockX_SDK_V1.1.0_20191115/demo/rk3399pro_android_demo/rockx-android-demo-face_landmark.zip。

此demo功能是从摄像头获取图像数据,检测图像中的人脸和人脸的特征点,然后在预览中画出人脸特征点。
调用Rock-X仅需三步,即可获取图像中的人脸和人脸的特征点。
详细的函数定义和相关数据结构请参考:/RockX_SDK_V1.1.0_20191115/doc/rockx_api_doc/html/index.html

1. 初始化

public void create() {
    mModelPath = installRockxData(mContext);
    mRockXFaceDetectionModule = native_create_rockx_module(mModelPath, ROCKX_MODULE_FACE_DETECTION);
    mRockXFaceLandmarkModule = native_create_rockx_module(mModelPath, ROCKX_MODULE_FACE_LANDMARK_68);
}

以上代码加载了Rock-X的人脸检测和人脸特征点定位模块,native_create_rockx_module()为native函数,实际调用的函数为C++代码Java_com_rockchip_gpadc_demo_rockx_RockX_native_1create_1rockx_1module(), 实现如下:

JNIEXPORT jlong JNICALL Java_com_rockchip_gpadc_demo_rockx_RockX_native_1create_1rockx_1module
        (JNIEnv *env, jobject obj, jstring modelPath, jint module)
{
    rockx_ret_t ret;

    rockx_handle_t handle;

    char *model_path = jstringToChar(env, modelPath);

    rockx_config_t rockx_configs;
    memset(&rockx_configs, 0, sizeof(rockx_config_t));

    LOGI("rockx_add_config ROCKX_CONFIG_DATA_PATH=%s\n", model_path);

    rockx_add_config(&rockx_configs, (char *)ROCKX_CONFIG_DATA_PATH, model_path);

    ret = rockx_create(&handle, (rockx_module_t)module, &rockx_configs, sizeof(rockx_config_t));
    if (ret != ROCKX_RET_SUCCESS) {
        LOGI("init rockx module %d error %d\n", module, ret);
        return ret;
    }

    return (jlong)handle;
}

此函数最终调用Rock-X的API rockx_create()完成模块的创建。

2. 检测人脸

初始化模块后,通过摄像头获取数据,将图像数据传入detectFace() java函数获取图像中的人脸,detectFace()调用native函数native_face_detect()实际调用了Java_com_rockchip_gpadc_demo_rockx_RockX_native_1face_1detect()函数,最终通过Roxk-X的API rockx_face_detect()得到图像中的人脸。
Java_com_rockchip_gpadc_demo_rockx_RockX_native_1face_1detect()函数部分代码如下:

extern "C"
JNIEXPORT jint JNICALL Java_com_rockchip_gpadc_demo_rockx_RockX_native_1face_1detect
        (JNIEnv *env, jobject obj, jlong handle, jbyteArray inData, jint inWidth, jint inHeight, jint inPixelFmt,
            jobject faceList) {

          jboolean inputCopy = JNI_FALSE;
          jbyte* in_data = env->GetByteArrayElements(inData, &inputCopy);

    // initial rockx_image_t variable
    ... // 省略部分代码

    // detect face
    rockx_ret_t ret = rockx_face_detect((rockx_handle_t)handle, &input_image, &face_array, nullptr);
    ... // 省略部分代码

        return 0;
}

3. 检测人脸关键点
通过人脸检测模块获取图像中的人脸后,将人脸数据传入RockX.FaceLanmark()获取人脸关键点。与人脸检测类似,RockX.FaceLanmark()调用native函数native_face_lanmark()即调用Java_com_rockchip_gpadc_demo_rockx_RockX_native_1face_1lanmark(),最终通过Rock-X API rockx_face_landmark()获取人脸的关键点。

extern "C"
JNIEXPORT jint JNICALL Java_com_rockchip_gpadc_demo_rockx_RockX_native_1face_1lanmark
        (JNIEnv *env, jobject obj, jlong handle, jbyteArray inData, jint inWidth, jint inHeight, jint inPixelFmt,
         jint boxLeft, jint boxTop, jint boxRight, jint boxBottom,
         jintArray outLandmark) {

    ... // 省略部分代码
    rockx_ret_t ret = rockx_face_landmark((rockx_handle_t)handle, &input_image, &face_box, &face_landmark);
    ... // 省略部分代码

    return 0;
}

代码测试


受益匪浅{:4_95:}

学习一下{:4_91:}

不错的算法!

http://v.qq.com/x/search/?q=佛山代孕服务【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=大连代孕服务【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=温州代孕公司【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=厦门代孕服务【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=泉州代孕服务【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=金华代孕服务【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=常州代孕服务【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=南通代孕服务【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=嘉兴代孕服务【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=徐州代孕服务【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=惠州代孕服务【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=珠海代孕服务【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=中山代孕服务【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=台州代孕服务【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=烟台代孕服务【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=扬州代孕服务【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=长春代孕服务【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=沈阳代孕服务【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=石家庄代孕中介【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=兰州代孕中介【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=西宁代孕中介【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=西安代孕中介【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=银川代孕中介【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=郑州代孕中介【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=济南代孕中介【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=太原代孕中介【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=合肥代孕中介【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=武汉代孕中介【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=长沙代孕中介【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=南京代孕中介【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=成都代孕中介【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=贵阳代孕中介【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=昆明代孕中介【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=南宁代孕中介【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=杭州代孕中介【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=南昌代孕中介【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=广州代孕中介【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=福州代孕中介【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=天津代孕中介【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=无锡代孕中介【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=宁波代孕中介【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=青岛代孕中介【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=东莞代孕中介【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=深圳代孕中介【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=上海代孕中介【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=北京代孕中介【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=天津代孕中介【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=佛山代孕中介【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=大连代孕中介【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=温州代孕中介【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=厦门代孕中介【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=泉州代孕中介【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=金华代孕中介【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=常州代孕中介【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=南通代孕中介【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=嘉兴代孕中介【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=徐州代孕中介【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=惠州代孕中介【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=珠海代孕中介【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=中山代孕中介【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=台州代孕中介【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=烟台代孕中介【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=扬州代孕中介【网址%3A9n7a.com】
http://v.qq.com/x/search/?q=南昌代孕中介【网址%3Aza9s.com】
http://v.qq.com/x/search/?q=沈阳代孕中介【网址%3Aza9s.com】
http://v.qq.com/x/search/?q=石家庄代孕中介【网址%3Aza9s.com】
http://v.qq.com/x/search/?q=兰州代孕中介【网址%3Aza9s.com】
http://v.qq.com/x/search/?q=西安代孕中介【网址%3Aza9s.com】
http://v.qq.com/x/search/?q=银川代孕中介【网址%3Aza9s.com】
http://v.qq.com/x/search/?q=郑州代孕中介【网址%3Aza9s.com】
http://v.qq.com/x/search/?q=济南代孕中介【网址%3Aza9s.com】
http://v.qq.com/x/search/?q=太原代孕中介【网址%3Aza9s.com】
http://v.qq.com/x/search/?q=合肥代孕中介【网址%3Aza9s.com】
http://v.qq.com/x/search/?q=武汉代孕中介【网址%3Aza9s.com】
http://v.qq.com/x/search/?q=长沙代孕中介【网址%3Aza9s.com】
http://v.qq.com/x/search/?q=南京代孕中介【网址%3Aza9s.com】
http://v.qq.com/x/search/?q=成都代孕中介【网址%3Aza9s.com】

感谢分享!!1

版主,Rock-X下载地址:https://pan.baidu.com/s/1brKNqxBYDmElm-A56DLu4Q 提取码:ji14连接已失效,请重新发布一下吧,谢谢

mark

不错