产品百科 | 如何快速集成阿里云 RACE 美颜功能

简介: 通过阅读本文,您可以了解 RACE 美颜功能,并快速完成产品配置操作。

产品介绍

RACE 是渲染计算平台(Render And Compute Everything Engine)的简写。RACE 美颜包含图像及视频渲染能力,如滤镜、特效、贴纸,以及美颜美型、人脸检测等算法能力,覆盖多种拍摄、剪辑场景,满足客户丰富的产品需求。

快速集成

  • Android 端,支持 maven 与 aar 离线集成两种方式:
  • maven 依赖集成方式:maven { url "https://maven.aliyun.com/nexus/content/repositories/releases" } implementation 'com.aliyun.race:AliyunRace:1.1.1'
  • 本地集成方式:获取 AliyunRace.aar 文件并添加到工程中。
  • iOS 端,支持 pod 与 framework 离线集成两种方式:
  • pod 依赖集成方式:pod 'AliyunRace', '1.1.1'。
  • 本地集成方式:将 AliyunRace.framework、Face3D.framwork、opencv2.framework 添加到工程中。

接入指南

美颜美型功能

  • 功能介绍。高级美颜包含美白、磨皮、锐化等功能,美型默认包含优雅、精致、网红、可爱、婴儿五种脸型。该功能提供包括眼睛、鼻子、嘴形等 22 种预置形状,便于客户根据产品需求扩展丰富的功能。
  • 数据结构及接口介绍。
  • 美型形状类型。
/**
 * 美型形状类型
 */
typedef enum ALRFaceShape
{
    ALR_FACE_TYPE_CUT_CHEEK       = 0, //颧骨      [0,1]
    ALR_FACE_TYPE_CUT_FACE        = 1, //削脸      [0,1]
    ALR_FACE_TYPE_THIN_FACE       = 2, //瘦脸      [0,1]
    ALR_FACE_TYPE_LONG_FACE       = 3, //脸长      [0,1]
    ALR_FACE_TYPE_LOWER_JAW       = 4, //下巴缩短  [-1,1]
    ALR_FACE_TYPE_HIGHER_JAW      = 5, //下巴拉长  [-1,1]
    ALR_FACE_TYPE_THIN_JAW        = 6, //瘦下巴    [-1,1]
    ALR_FACE_TYPE_THIN_MANDIBLE   = 7, //瘦下颌    [0,1]
    ALR_FACE_TYPE_BIG_EYE         = 8, //大眼     [0,1]
    ALR_FACE_TYPE_EYE_ANGLE1      = 9, //眼角1     [0,1]
    ALR_FACE_TYPE_CANTHUS         = 10,//眼距     [-1,1]
    ALR_FACE_TYPE_CANTHUS1        = 11,//拉宽眼距 [-1,1]
    ALR_FACE_TYPE_EYE_ANGLE2      = 12,//眼角2    [-1,1]
    ALR_FACE_TYPE_EYE_TDANGLE     = 13,//眼睛高度 [-1,1]
    ALR_FACE_TYPE_THIN_NOSE       = 14,//瘦鼻     [0,1]
    ALR_FACE_TYPE_NOSE_WING       = 15,//鼻翼     [0,1]
    ALR_FACE_TYPE_NASAL_HEIGHT    = 16,//鼻长     [-1,1]
    ALR_FACE_TYPE_NOSE_TIP_HEIGHT = 17,//鼻头长   [-1,1]
    ALR_FACE_TYPE_MOUTH_WIDTH     = 18,//唇宽     [-1,1]
    ALR_FACE_TYPE_MOUTH_SIZE      = 19,//嘴唇大小 [-1,1]
    ALR_FACE_TYPE_MOUTH_HIGH      = 20,//唇高     [-1,1]
    ALR_FACE_TYPE_PHILTRUM        = 21, //人中
    ALR_FACE_TYPE_MAX             = 22
} ALRFaceShape;

  • 说明 对于每一种形状,可设置参数值超出上述定义的 [-1, 1] 的范围综合调试效果。
  • 创建高级美颜实例。
/**
 * 创建美颜美型实例
 * @param handle 美颜美型句柄指针
 * @param resDir 资源文件目录绝对路径
 * @param rid 数据上报标识符
 * @param lid 日志上报标识符
 * @return 成功返回 ALR_OK,否则返回 < 0
 */
int aliyun_beautify_create(race_t *handle, const char *resDir, int64_t rid = -1, int64_t lid = -1);
  • 销毁高级美颜实例。
/**
 * 销毁美颜美型实例
 * @param handle 美颜美型句柄
 */
void aliyun_beautify_destroy(race_t handle);
  • 高级美颜调试开关。
/**
 * 美颜美型调试开关
 * @param handle 美颜美型句柄
 * @param enable 调试开启标志
 * @return 成功返回 ALR_OK,否则返回 < 0
 */
int aliyun_beautify_setFaceDebug(race_t handle, bool enable);
  • 美型开关。
/**
 * 美型开关
 * @param handle 美颜美型句柄
 * @param switchOn 是否开启人脸检测及美型处理
 */
void aliyun_beautify_setFaceSwitch(race_t handle, bool switchOn);
  • 设置美型参数。
/**
 * 设置美型参数
 * @param handle 美颜美型句柄
 * @param level 美型等级参数,可以超出 ALRFaceShape 中定义的参数范围
 * @return 成功返回 ALR_OK,否则返回 < 0
 */
int aliyun_beautify_setFaceShape(race_t handle, ALRFaceShape type, float level);
  • 高级美颜渲染。
/**
 *  高级美颜,输入是类型 CMSampleBufferRef 的图像数据,返回与输入同样大小的纹理 id
 *  @param handle 创建成功的句柄
 *  @param sampleBuffer 图像数据 CMSampleBufferRef
 *  @return 成功则返回渲染纹理 id,失败返回 0
 */
int aliyun_beautify_processSampleBuffer(race_t handle, void *sampleBuffer);
/**
 * 单输入美颜美型渲染
 * @param handle 美颜美型句柄
 * @param buffer CPU图像内存地址
 * @param bufferSize CPU图像内存字节数
 * @param format 图像像素格式
 * @param width 图像宽度
 * @param height 图像高度
 * @param bytesPerRow CPU图像内存一行的字节数
 * @param rotation 图像旋转角度(顺进针方向)
 * @param range 颜色色域范围
 * @param standard 色彩标准
 * @param flags 详见 ALR_FLAG_XXX 定义,如 OES 纹理、镜像、输出图像旋转等
 * @return 成功则返回输出纹理句柄,否则返回 < 0
 */
int aliyun_beautify_processBufferToTexture(race_t handle,
                                           uint8_t *buffer,
                                           uint32_t bufferSize,
                                           aliyun_image_format_t format,
                                           uint32_t width,
                                           uint32_t height,
                                           uint32_t bytesPerRow,
                                           aliyun_rotation_t rotation,
                                           aliyun_color_range_t range,
                                           aliyun_color_standard_t standard,
                                           uint8_t flags);
/**
 * 美颜美型纹理输入渲染
 * @param handle 美颜美型句柄
 * @param textureIn 输入图像纹理
 * @param width 输入图像纹理宽度
 * @param height 输入图像纹理高度
 * @param rotation 输入图像纹理旋转角度(顺时针)
 * @param flags 详见 ALR_FLAG_XXX 定义,如 OES 纹理、镜像、输出图像旋转等
 * @return 成功则返回输出纹理句柄,否则返回 < 0
 */
int aliyun_beautify_processTextureToTexture(race_t handle,
                                            uint32_t textureIn,
                                            uint32_t width,
                                            uint32_t height,
                                            aliyun_rotation_t rotation,
                                            uint8_t flags);
/**
 * 双输入美颜美型渲染
 * @param handle 美颜美型句柄
 * @param textureIn GPU纹理 id
 * @param buffer CPU图像内存地址
 * @param bufferSize CPU图像内存字节数
 * @param format 图像像素格式
 * @param width 图像宽度
 * @param height 图像高度
 * @param bytesPerRow CPU图像内存一行的字节数
 * @param rotation 图像旋转角度(顺进针方向)
 * @param flags 详见 ALR_FLAG_XXX 定义,如 OES 纹理、镜像、输出图像旋转等
 * @return 成功则返回输出纹理句柄,否则返回 < 0
 */
int aliyun_beautify_processDualInputToTexture(race_t handle,
                                              uint32_t textureIn,
                                              uint8_t *buffer,
                                              uint32_t bufferSize,
                                              aliyun_image_format_t format,
                                              uint32_t width,
                                              uint32_t height,
                                              uint32_t bytesPerRow,
                                              aliyun_rotation_t rotation,
                                              uint8_t flags);
  • 接口集成示例。
#include "aliyun_beautify.h"
race_t beautify = nullptr;
// 创建高级美颜实例
// iOS: RACE内部自动从Framework读取,可传空字串。
// Android: 外部需将asserts/race_res目录拷贝到sdcard或者可访问的路径,并将此路径作为参数传入如/sdcard
aliyun_beautify_create(&beautify, "");
// 设置美颜参数
aliyun_beautify_setSkinBuffing(beautify, skinBuffingValue); //磨皮
aliyun_beautify_setSkinWhitening(beautify, skinWhiteningValue); //美白
aliyun_beautify_setSharpen(beautify, sharpenValue); //锐化
// 设置美型参数
aliyun_beautify_setFaceShape(beautify, ALR_FACE_TYPE_BIG_EYE, bigEyeValue);//大眼
aliyun_beautify_setFaceShape(beautify, ALR_FACE_TYPE_LONG_FACE, longFaceValue);//脸长
aliyun_beautify_setFaceShape(beautify, ALR_FACE_TYPE_CUT_FACE, cutFaceValue);//削脸
aliyun_beautify_setFaceShape(beautify, ALR_FACE_TYPE_THIN_FACE, thinFaceValue);//瘦脸
aliyun_beautify_setFaceShape(beautify, ALR_FACE_TYPE_LOWER_JAW, lowerJawValue);//下巴
aliyun_beautify_setFaceShape(beautify, ALR_FACE_TYPE_MOUTH_WIDTH, mouthWidthValue);//唇宽
aliyun_beautify_setFaceShape(beautify, ALR_FACE_TYPE_THIN_NOSE, thinNoseValue);//瘦鼻
aliyun_beautify_setFaceShape(beautify, ALR_FACE_TYPE_THIN_MANDIBLE, thinMandibleValue);//下颌
aliyun_beautify_setFaceShape(beautify, ALR_FACE_TYPE_CUT_CHEEK, cutCheekValue);//颧骨
// iOS: 美颜美型效果处理,返回渲染后的结果纹理id。
textureOut = aliyun_beautify_processSampleBuffer(beautify, sampleBuffer);
// Android & iOS: 单纹理输入
textureOut = aliyun_beautify_processTextureToTexture(beautify,
                                                     textureIn,
                                                     width, height,
                                                     rotation, flags);
// Android & iOS: CPU内存+GPU纹理双输入
textureOut = aliyun_beautify_processDualInputToTexture(beautify,
                                                       textureIn,
                                                       buffer, bufferSize, 
                                                       format, width, height,
                                                       bytePerRow,
                                                       rotation, flags);
// 销毁美颜美型实例
aliyun_beautify_destroy(beautify);

人脸检测

  • 功能介绍。在静态的照片、图像或动态的视频流中,使用人脸检测技术可以快速准确地辨别出单张或多张人脸,并检测出人脸所在的位置。
  • 数据结构及接口介绍。
// 宏定义
#define ALR_FACE_DETECT_MODE_VIDEO           0x10000000  // video
#define ALR_FACE_DETECT_MODE_IMAGE           0x20000000  // image
/// 网络模型
#define ALR_FACE_DETECT_NETWORK_HBN          0x00000001  // HBN
#define ALR_FACE_DETECT_NETWORK_FASTERRCNN   0x00000002  // Faster RCNN
// 人脸区域
typedef struct aliyun_rect_t
{
    int left;    //left of face rectangle
    int top;     //top of face rectangle
    int right;   //right of face rectangle
    int bottom;  //bottom of face rectangle
} aliyun_rect_t;
// 点的数据结构
typedef struct aliyun_point_t
{
    float x;
    float y;
} aliyun_point_t;
// 一张人脸的数据结构
typedef struct aliyun_face_t
{
    aliyun_rect_t rect;                   // 人脸区域
    float score;                          // 置信度
    aliyun_point_t landmarks_array[106];  // 106关键点
    float landmarks_visible_array[106];  // 106关键点遮挡情况
    float yaw;                           // 水平转角,真实度量的左负右正
    float pitch;                         // 俯仰角,真实度量的上负下正
    float roll;                          // 旋转角,真实度量的左负右正
    float eye_distance;                  // 两眼间距
    int faceID;
} aliyun_face_t;
// 多张人脸的数据结构
typedef struct aliyun_face_info_t
{
    aliyun_face_t *p_faces;                 //face info
    int face_count;                      //face detection num
} aliyun_face_info_t;
// 人脸检测参数类型 
typedef enum
{
    ALR_FACE_PARAM_DETECT_INTERVAL        = 1,  // 人脸检测的帧率(默认值30,即每隔30帧检测一次)
    ALR_FACE_PARAM_SMOOTH_THRESHOLD       = 2,  // 人脸关键点平滑系数(默认值0.25)
    ALR_FACE_PARAM_POSE_SMOOTH_THRESHOLD  = 4,  // 姿态平衡系数(0,1],越大平滑程度越大
    ALR_FACE_PARAM_DETECT_THRESHOLD       = 5,  // 人脸检测阈值(0,1),阈值越大,误检越少,但漏检测会增加, default 0.95 for faster rcnn; default 0.3 for SSD
    ALR_FACE_PARAM_ALIGNMENT_INTERVAL     = 11, // 人脸检测对齐间隔,默认1,一般不要超过5
    ALR_FACE_PARAM_MAX_FACE_SUPPORT       = 12, // 最多支持检出的人脸个数,最大设为32, 主要针对faster rcnn
    ALR_FACE_PARAM_DETECT_IMG_SIZE        = 13, // 人脸检测输入的图像大小,default: 240 for faster rcnn, recommend set 320 for tiny face detection
} aliyun_face_param_type_t;
  • 创建人脸检测实例。Android 端 C 接口:
/**
 * 创建人脸检测句柄
 * @param handle
 * @param det_paraPath 人脸检测模型的路径
 * @param pts_paraPath 关键点检测模型的路径
 * @param config
 * @return == 0 OK; < 0 error
 */
RACE_EXTERN int aliyun_face_create(race_t* handle,
                                   JNIEnv* env,
                                   const char* det_paraPath,
                                   const char* pts_paraPath,
                                   unsigned int config);
  • iOS 端 C 接口:
/**
 * 创建人脸检测句柄
 * iOS端推荐使用接口
 * @param handle with initialed
 * @param config 检测图片:ALR_FACE_DETECT_MODE_IMAGE,检测视频:ALR_FACE_DETECT_MODE_VIDEO
 * @return == 0 OK;  < 0 error
 */
RACE_EXTERN int aliyun_face_default_create(race_t* handle, unsigned int config);
/**
 * 创建人脸检测句柄
 * @param handle with initialed
 * @param det_paraPath 人脸检测模型的绝对路径
 * @param pts_paraPath 关键点检测模型的绝对路径
 * @param config 检测图片:ALR_FACE_DETECT_MODE_IMAGE,检测视频:ALR_FACE_DETECT_MODE_VIDEO,人脸检测模型选择模型1,则增加ALR_FACE_DETECT_NETWORK_HBN,选择模型3,则增加ALR_FACE_DETECT_NETWORK_FASTERRCNN
 * @return == 0 OK; < 0 error
 */
RACE_EXTERN int aliyun_face_create(race_t* handle,
                       const char* det_paraPath,
                       const char* pts_paraPath,
                       unsigned int config);
  • 设置人脸检测参数。
/**
 * 设置人脸检测参数
 * @param handle with initialed
 * @param type face_param_type
 * @param value new threshold
 * @return = 0 OK; < 0 error
 */
RACE_EXTERN int aliyun_face_setParam(race_t handle, aliyun_face_param_type_t type, float value);
  • 调用人脸检测接口。
/**
 * 人脸检测
 * @param handle with initialed
 * @param buffer input image
 * @param format support type BGR、RGBA、RGB、Y(GRAY),推荐使用RGBA
 * @param width  width
 * @param height height
 * @param bytesPerRow 用于检测的图像的跨度(以像素为单位),即每行的字节数
 * @param rotation rotate image to frontalization for face detection
 * @param config MOBILE_FACE_DETECT, or MOBILE_FACE_DETECT|MOBILE_EYE_BLINK et.al 默认值0
 * @param outRotation result process rotate specific angle first, angle =  0/90/180/270
 * @param outFlipAxis  flip x/y 0(no flip)/1(flip X axis)/2(flip Y axis)
 * @param faceInfo store face detetion result
 * @return = 0 OK; < 0 error
 */
RACE_EXTERN int aliyun_face_detect(race_t handle,
                                   uint8_t *buffer,
                                   aliyun_image_format_t format,
                                   uint32_t width,
                                   uint32_t height,
                                   uint32_t bytesPerRow,
                                   aliyun_rotation_t rotation,
                                   uint32_t config,
                                   aliyun_rotation_t outRotation,
                                   uint32_t outFlipAxis,
                                   aliyun_face_info_t* faceInfo);
  • 销毁人脸检测实例。
/**
 * 销毁人脸检测句柄
 * @param handle  with initialed
 */
RACE_EXTERN void aliyun_face_destroy(race_t handle);
  • 接口集成示例。
race_t handle = nullptr;
// for Android
aliyun_face_create(handle,
                   "/sdcard/race_res/models/0_3/fd_00002_3",
                   "/sdcard/race_res/models/0_3/fd_00002_12",
                   ALR_FACE_DETECT_NETWORK_FASTERRCNN | ALR_FACE_DETECT_MODE_VIDEO);
// for iOS
aliyun_face_default_create(handle, ALR_FACE_DETECT_MODE_VIDEO);
// 设置检测间隔,推荐设置为5
aliyun_face_setParam(handle, ALR_FACE_PARAM_DETECT_INTERVAL, 5);
aliyun_face_info_t info;
aliyun_face_detect(handle,
                   buffer,
                   ALR_IMAGE_FORMAT_NV21,
                   1280,
                   720,
                   1280,
                   ALR_ROTATE_90_CW,
                   0,
                   ALR_ROTATE_90_CW,
                   0,
                   &info);
aliyun_face_destroy(handle);


「视频云技术」你最值得关注的音视频技术公众号,每周推送来自阿里云一线的实践技术文章,在这里与音视频领域一流工程师交流切磋。

image.png

相关文章
|
11天前
|
安全 定位技术 API
婚恋交友系统匹配功能 婚恋相亲软件实现定位 语音社交app红娘系统集成高德地图SDK
在婚恋交友系统中集成高德地图,可实现用户定位、导航及基于地理位置的匹配推荐等功能。具体步骤如下: 1. **注册账号**:访问高德开放平台,注册并创建应用。 2. **获取API Key**:记录API Key以备开发使用。 3. **集成SDK**:根据开发平台下载并集成高德地图SDK。 4. **配置功能**:实现定位、导航及基于位置的匹配推荐。 5. **注意事项**:保护用户隐私,确保API Key安全,定期更新地图数据,添加错误处理机制。 6. **测试优化**:完成集成后进行全面测试,并根据反馈优化功能。 通过以上步骤,提升用户体验,提供更便捷的服务。
|
3月前
|
传感器 监控 搜索推荐
智能服装:集成健康监测功能的纺织品——未来穿戴科技的新篇章
【10月更文挑战第7天】智能服装作为穿戴科技的重要分支,正以其独特的技术优势和广泛的应用前景,成为未来科技发展的亮点之一。它不仅改变了我们对服装的传统认知,更将健康监测、运动训练、医疗康复等功能融为一体,为我们的生活带来了更多的便利和可能。随着技术的不断进步和市场的日益成熟,我们有理由相信,智能服装将成为未来穿戴科技的新篇章,引领我们走向更加健康、智能、可持续的生活方式。
|
3月前
|
前端开发 JavaScript UED
探索Python Django中的WebSocket集成:为前后端分离应用添加实时通信功能
通过在Django项目中集成Channels和WebSocket,我们能够为前后端分离的应用添加实时通信功能,实现诸如在线聊天、实时数据更新等交互式场景。这不仅增强了应用的功能性,也提升了用户体验。随着实时Web应用的日益普及,掌握Django Channels和WebSocket的集成将为开发者开启新的可能性,推动Web应用的发展迈向更高层次的实时性和交互性。
106 1
|
2天前
|
人工智能 数据处理 C#
AI Dev Gallery:微软开源 Windows AI 模型本地运行工具包和示例库,助理开发者快速集成 AI 功能
微软推出的AI Dev Gallery,为Windows开发者提供开源AI工具包和示例库,支持本地运行AI模型,提升开发效率。
34 13
|
10天前
|
人工智能 自然语言处理 搜索推荐
Open Notebook:开源 AI 笔记工具,支持多种文件格式,自动转播客和生成总结,集成搜索引擎等功能
Open Notebook 是一款开源的 AI 笔记工具,支持多格式笔记管理,并能自动将笔记转换为博客或播客,适用于学术研究、教育、企业知识管理等多个场景。
71 0
Open Notebook:开源 AI 笔记工具,支持多种文件格式,自动转播客和生成总结,集成搜索引擎等功能
|
2月前
|
安全 Java API
【三方服务集成】最新版 | 阿里云短信服务SMS使用教程(包含支持单双参数模板的工具类,拿来即用!)
阿里云短信服务提供API/SDK和控制台调用方式,支持验证码、通知、推广等短信类型。需先注册阿里云账号并实名认证,然后在短信服务控制台申请资质、签名和模板,并创建AccessKey。最后通过Maven引入依赖,使用工具类发送短信验证码。
【三方服务集成】最新版 | 阿里云短信服务SMS使用教程(包含支持单双参数模板的工具类,拿来即用!)
|
2月前
|
存储 Prometheus 运维
在云原生环境中,阿里云ARMS与Prometheus的集成提供了强大的应用实时监控解决方案
在云原生环境中,阿里云ARMS与Prometheus的集成提供了强大的应用实时监控解决方案。该集成结合了ARMS的基础设施监控能力和Prometheus的灵活配置及社区支持,实现了全面、精准的系统状态、性能和错误监控,提升了应用的稳定性和管理效率。通过统一的数据视图和高级查询功能,帮助企业有效应对云原生挑战,促进业务的持续发展。
48 3
|
2月前
|
缓存 资源调度 JavaScript
Vue集成Excalidraw实现在线画板功能
Excalidraw是一款开源在线绘图工具,适用于白板、思维导图、原型设计等场景。支持手绘风格、多种图形元素、导出功能及多人协作,深受开发者喜爱。本文档介绍了如何在Vue项目中集成Excalidraw,包括安装依赖、配置文件修改、页面添加等步骤,帮助开发者快速上手。
159 0
Vue集成Excalidraw实现在线画板功能
|
2月前
|
传感器 前端开发 Android开发
在 Flutter 开发中,插件开发与集成至关重要,它能扩展应用功能,满足复杂业务需求
在 Flutter 开发中,插件开发与集成至关重要,它能扩展应用功能,满足复杂业务需求。本文深入探讨了插件开发的基本概念、流程、集成方法、常见类型及开发实例,如相机插件的开发步骤,同时强调了版本兼容性、性能优化等注意事项,并展望了插件开发的未来趋势。
45 2
|
2月前
|
SQL 开发框架 .NET
突破T-SQL限制:利用CLR集成扩展RDS SQL Server的功能边界
CLR集成为SQL Server提供了强大的扩展能力,突破了T-SQL的限制,极大地拓展了SQL 的应用场景,如:复杂字符串处理、高性能计算、图像处理、机器学习集成、自定义加密解密等,使开发人员能够利用 .NET Framework的丰富功能来处理复杂的数据库任务。

热门文章

最新文章