老年性阴道炎用什么药| 首脑是什么意思| 打呼噜是什么引起的| 正月初一是什么节日| 抗hbc阳性是什么意思| 什么火灾不能用水扑灭| 止血敏又叫什么名| 血糖高要忌口什么| 中国梦是什么梦| 验血肝功能看什么指标| doki是什么意思| 海菜是什么| 醴什么意思| 9月份出生的是什么星座| 暮春是什么时候| 什么的海洋| 造化什么意思| 梦到被猪咬是什么意思| 荷叶和什么搭配最减肥| 墨水用什么能洗掉| 兰花是什么颜色| 吃头孢不能吃什么水果| 李开复是什么人| 羊内腰和外腰分别是什么| 梦见着火了是什么意思| 五月七日是什么星座| 什么是喜欢什么是爱| 乙肝45阳性什么意思| 现在摆摊卖什么东西最好卖| 深圳少年宫有什么好玩的| rad是什么意思| 单鞋是什么鞋| 肠息肉是什么原因引起的| 查生化是查些什么| 大姨妈来了吃什么好| 斑秃挂什么科| 松花粉对肝有什么好处| 右手发抖是什么原因| 腹泻吃什么药见效最快| 安罗替尼适合什么肿瘤| 减肥为什么不让吃南瓜| 兑水是什么意思| 口爆是什么意思| 目不暇接的意思是什么| 一什么水塔| 死猪不怕开水烫是什么意思| 党员有什么好处| 安宫丸什么时候吃效果是最佳的| 口苦尿黄是什么原因| 炒菜用什么油| 薄荷叶泡水喝有什么功效和作用| 腺病毒阳性是什么意思| 艺人是什么意思| 高密度脂蛋白高是什么原因| 一什么蛇| 石榴木命是什么意思| 冰字五行属什么| 玉和玉髓有什么区别| 木鱼花是什么做的| 脖子痛什么原因引起的| 恶心呕吐吃什么药| 凝血六项是检查什么的| 脑梗是由什么引起的| 前列腺炎不能吃什么| edo是什么意思| 兹有是什么意思| 2012年是什么命| 流苏是什么意思| xo酱是什么酱| 银色是什么颜色| 阴道放气是什么原因| 便秘喝什么茶| 烟火气是什么意思| dodo是什么意思| 什么样的白云| 微信转账为什么要验证码| 美林是什么药| 后脑勺痛什么原因引起的| 什么粉一沾就痒还看不出来| bang什么意思| 贡菜是什么菜| 儿童中暑吃什么药| 达英35是什么药| 硒片什么牌子好| 没有痔疮大便出血是什么原因| alb医学上是什么意思| 老做梦是什么原因| 球蛋白适合什么人打| 天蝎属于什么象星座| 虾皮不能和什么一起吃| 梅毒螺旋体抗体阳性是什么意思| 为什么手上会长小水泡| 骨膜炎用什么药| acc是什么意思| left什么意思| 嗳腐吞酸是什么意思| 为什么眼睛有红血丝| 1946年属什么生肖属相| 7月中旬是什么时候| 粘米粉是什么米做的| 什么是走读生| 炉中火是什么意思| 量贩式ktv是什么意思| 肺结节钙化是什么意思| 拉不出尿是什么原因| 奎宁是什么药| pinsp呼吸机代表什么| 开心果是什么树的果实| ct是什么检查| %是什么意思| 三个金念什么| 2岁什么都听懂但不说话| 枯木逢春什么意思| 总胆红素偏高是什么引起的| 宫颈短是什么意思| 拔智齿第二天可以吃什么| 天龙八部是指佛教中的什么| 甲醛对人体有什么危害| 喝什么补气血| 草莓的种子是什么| 下巴的痣代表什么| 桃李满天下是什么生肖| 包皮瘙痒用什么药| pmid是什么意思| 脑供血不足有什么危害| 有什么好听的歌曲| 近视和远视有什么区别| 二甲双胍什么时候吃最好| 驳什么意思| o什么意思| 蛇胆疮是什么原因引起的| 1月3号什么星座| 腰肌劳损看什么科| 导览是什么意思| friday是什么意思| 函询是什么意思| 梦到挖坟墓是什么意思| 猎头是干什么的| 皮肤过敏有什么妙招| 6月18日什么星座| lv的全称是什么| 什么是活性叶酸| 梦见过生日是什么意思| 白细胞低吃什么药可以增加白细胞| 送女生什么礼物比较好| 电信诈骗是什么意思| 化痰吃什么药| 人参长什么样| 什么是痰湿| 岁月如歌什么意思| 眩晕是什么原因引起的| 宫颈活检cin1级是什么意思| 指甲起层是什么原因| canon是什么牌子| 知我者莫若你什么意思| 什么皮肤病会传染| 男性看下面挂什么科室| 男人勃不起是什么原因造成的| 吃什么排湿气最好最快| 脂溢性皮炎是什么引起的| 为什么白天尿少晚上尿多| ecology是什么意思| 天气一热身上就痒是什么原因| 乳房痛什么原因| 心脏供血不足用什么药| 旭日是什么意思| 鸡腿炖什么好吃| 黄豆什么时候种| 地主之谊是什么意思| 月经不调是什么意思| u什么意思| 什么古迹| 多喝水有什么好处坏处| 2008属什么生肖| 骆驼吃什么食物| 切除扁桃体有什么好处和坏处| 黄疸高吃什么药| 萃是什么意思| 普拉提是什么意思| 小孩脚后跟疼是什么原因| 款式是什么意思| 画眉鸟吃什么| 尿酸高适合吃什么菜| 为什么不建议女人上环| 子宫肌层回声欠均匀是什么意思| 尿蛋白质弱阳性是什么意思| 费率是什么| 腺肌症是什么症状| 何乐而不为是什么意思| 克勤克俭的克是什么意思| 胰腺ca是什么意思| 家里为什么有小飞虫| 下眼袋大是什么原因引起的| 隔离霜有什么作用| k值是什么意思| 大葱炒什么好吃| 肿瘤患者不能吃什么| 腰果不能和什么一起吃| penis是什么意思| 动脉硬化是什么意思| 毫不犹豫的意思是什么| 九月初五是什么星座| ira是什么品牌| 血沉是查什么| parzin眼镜是什么牌子| 折射率是什么意思| 梦见卖衣服是什么意思| 导管扩张是什么意思| 流年是什么意思| 心动过速吃什么药最好| 立牌坊是什么意思| 结膜炎角膜炎用什么眼药水| 什么嘴什么舌| 喝藿香正气水不能吃什么| 湿气太重吃什么药最好| 女朱读什么| 口臭要做什么检查| 晚上睡觉腿抽筋是什么原因| 小孩子头发黄是什么原因| 胃下垂吃什么药| 反乌托邦是什么意思| 唇珠在面相中代表什么| 回是什么生肖| 放下执念是什么意思| 甲亢是什么病| 32岁属什么的生肖| 叼是什么意思| 怀孕甲减对孩子有什么影响| 6月6是什么星座| 此物非彼物是什么意思| 人尽可夫什么意思| 骨盆前倾挂什么科| 百合花什么时候开花| 祝福是什么意思| 白细胞偏低吃什么药| 路演是什么意思| 什么血型的人最多| 义是什么意思| 做梦梦见剪头发是什么意思| 女人身体弱带什么辟邪| 金色葡萄球菌最怕什么| 什么是胰腺炎| 在编是什么意思| 山洪是什么意思| 人生导师是什么意思| 红斑狼疮吃什么药| 情劫是什么| 心脏病吃什么好| 糠是什么| 表现手法是什么| 什么干什么燥| hp是什么牌子的电脑| 桑叶泡水喝有什么功效和作用| sry什么意思| 小腿浮肿吃什么药| 全身酸痛是什么原因| 世界上最难的数学题是什么| 六畜大宝在农家是什么生肖| 慢性荨麻疹吃什么药| 什么瓜不能吃脑筋急转弯| 江苏有什么特产| 八月20号是什么星座| 什么叫牙周炎| 方脸适合什么刘海| 百度
资讯 文档
技术能力
语音技术
文字识别
人脸与人体
图像技术
语言与知识
视频技术

中华预防医学会关于公布2017年第一批学会级Ⅰ类...

版本日志

版本 日期 更新说明
v2.0.3 2019.06.14 1、更新硬件指纹获取模块,优化特殊环境下指纹变更的问题
v2.0.2 2019.04.01 1、全新人脸检测模型,检测追踪更流畅;
2、全新证件照模型:体积更小,速度更快 ;
3、部分接口细节优化
v2.0.1 2019.03.14 1、接口设计优化;
2、增加几款结构光镜头支持;
3、已知bug修复
v2.0.0 2019.01.10 1、优化生活照模型精度及速度
2、优化检测模型及策略
3、优化接口设计
4、优化活体检测速度
v1.1.0 2018.09.03 1、增加离线证件照特征抽取模型,可有效处理芯片照、证件照比对需求
2、增加离线人脸属性模型,支持性别、年龄等属性分析
3、增加多线程支持
4、增加离线激活支持,可导入授权文件无网激活
5、增加对奥比中光Astra Pro深度图镜头模组支持
6、增加对华捷艾米深度镜头模组支持
7、其他细节优化及已知bug修复
v1.0.1 2018.08.03 1、修复设备指纹发生变化bug
2、替换近红外活体模型,优化效果
3、修复批量注册人脸到人脸库,失败问题
4、修复注册、图片人脸检测、视频返回图片抽取特征失败,经常出现检测不到人脸问题
v1.0.0 2018.06.29 初版,包括离线人脸采集、离线活体检测、离线对比识别、离线人脸库管理等功能

目录

1、FaceAuth-鉴权接口
   1.1 鉴权-在线授权
   1.2 鉴权-SDK 压缩文件,本地鉴权
   1.3 开启底层Log输出
   1.4 设置Anakin核数
2、FaceDetect-检测接口
   2.1 检测对齐模型加载
   2.2 质量检测模型加载
   2.3 配置信息加载
   2.4 YUV图片转换ARGB
   2.5 人脸框检测
   2.6 人脸跟踪-最大人脸接口
   2.7 人脸跟踪-第一个人脸接口
   2.8 人脸跟踪-多人脸检测
   2.9 人脸图像质量检测
   2.10 检测方法类型设置
   2.11 人脸图片信息清理
3、FaceLive-活体接口
   3.1 活体模型加载
   3.2 人脸静默活体检测-RGB可见光
   3.3 人脸静默活体检测-NIR近红外或Depth深度图
4、FaceFeature-特征接口
   4.1 特征模型加载
   4.2 人脸特征提取
   4.3 人脸特征比对
5、FaceAttributes-属性接口
   5.1 属性情绪模型加载
   5.2 人脸属性检测
   5.3 人脸表情检测
6、人脸信息实体类
   6.1 基础信息实体类
   6.2 扩展信息实体类

1、FaceAuth鉴权接口

1.1 鉴权-在线授权

说明:用户通过申请授权码,在线授权,激活设备

void initLicenseOnLine(final Context context, final String licenseKey, final AuthCallback callback)
参数名 含义
context 当前上下文
licenseKey AIPE 鉴权码
callback 鉴权结果 void onResponse(int code, String response)
code 0 : 成功;code 1 加载失败
response 结果信息

1.2 鉴权-SDK 压缩文件,本地鉴权

说明:用户通过申请鉴权文件,存储在SD 卡根目录下,离线鉴权,激活设备

void initLicenseOffLine(final Context context, final AuthCallback callback)
参数名 含义
context 当前上下文
callback 鉴权结果 void onResponse(int code, String response)
code 0 : 成功;code 1 加载失败
response 结果信息

1.3 开启底层Log输出

说明:用于Debug 时候输出LOG 详细信息

void setActiveLog(BDFaceLogInfo logInfo)
参数名 含义
BDFaceLogInfo 底层log 打印
BDFACE_LOG_VALUE_MESSAGE, // 打印输出值日志
BDFACE_LOG_ERROR_MESSAGE, // 打印输出错误日志
BDFACE_LOG_ALL_MESSAGE, // 打印所有日志

1.4 设置Anakin核数

说明:根据开发板类型,设置加速对Cpu 核数依赖,调整参数,提高性能

void setAnakinThreadsConfigure(int flagsThreads ,int flagsCluster)
参数名 含义
flagsThreads 大核个数(建议:3288传入2,3399传入4)
flagsCluster 小核个数(建议:传入0)

2、FaceDetect检测接口

2.1 检测对齐模型加载

说明:检测模型加载,目前支持可见光模型,近红外检测模型(非必要参数,可以为空),对齐模型

void initModel(final Context context, final String visModel,final String nirModel,final String alignModel, final Callback callback)
参数名 含义
context 上下文context
visModel 可见光图片检测模型
nirModel 红外图片检测模型(非必要参数,可以为空)
alignModel 对齐类型
callback 模型加载结果 void onResponse(int code, String response)
code 0 : 成功;code 1 加载失败
response 结果信息

2.2 质量检测模型加载

说明:质量检测模型加载,判断人脸遮挡信息,光照信息,模糊信息,模型包含模糊模型,遮挡信息,作用于质量检测接口

void initQuality(final Context context, final String blurModel, final String occlurModel, final Callback callback)
参数名 含义
context 上下文context
blurModel 模糊检测模型
occlurModel 遮挡检测模型
callback 鉴权结果 void onResponse(int code, String response)
code 0 : 成功;code 1 加载失败
response 结果信息

2.3 配置信息加载

说明:检测最小人脸,是否开启内部质量检测,检测或者追踪时间间隔等配置

void loadConfig(BDFaceSDKConfig config)
参数名 含义
config 参数配置实体

2.4 YUV图片转换ARGB

说明:摄像头回调数据格式转化,YUV 转为ARGB 用于检测

int getDataFromYUVimg(byte[] dataYUV, int[] imageData, int width, int height, int angle, int flip)
参数名 含义
dataYUV YUV 图片字节数
imageData RGBA 图片返回值
width 图片宽
height 图片高
angle 原图的旋转角度
flip 原图是否镜像(0 非镜像 1 镜像)

2.5 人脸框检测

说明:人脸框检测,每一帧图片都会检测,返回基本人脸信息,可以人脸框绘制

FaceInfo[] detect(int[] imageData, int height, int width,int minFaceSize)
参数名 含义
imageData ARGB图片像素点
height 图片高
width 图片宽
minFaceSize 需要检测的最小人脸尺寸
返回
成功则返回 FaceInfo[] 数组,包含:人脸框width,人脸angle,人脸框中心坐标x,y,人脸可信度mConf
	           if (faceDetect == null) {
                    Toast.makeText(mContext,
                            "未初始化检测模型", Toast.LENGTH_SHORT).show();
                    return;
                }
                faceDetect.setDetectMethodType(FaceDetect.DetectType.DETECT_VIS);
                FaceInfo[] faceInfos = faceDetect.detect(
                        liveVisImg.data, liveVisImg.height, liveVisImg.width, 50);
                if (faceInfos != null && faceInfos.length > 0) {
                    FaceInfo faceInfo = faceInfos[0];
                    StringBuilder info = new StringBuilder();
                    info.append("face info length:").append(faceInfos.length)
                            .append(" face_id:").append(faceInfo.face_id)
                            .append(" width:").append(faceInfo.mWidth)
                            .append(" score:").append(faceInfo.mConf);
                    Toast.makeText(mContext,
                            info,
                            Toast.LENGTH_SHORT).show();
                    Log.e("handler", info.toString());
                } else {
                    String info = " face info length 0";
                    Toast.makeText(mContext,
                            info, Toast.LENGTH_SHORT).show();
                    Log.e("handler", info);
                }

2.6 人脸跟踪-最大人脸接口

说明:人脸跟踪检测,追踪图片中最大人脸信息,接口包含检测和跟踪功能,返回基本人脸信息和72 关键点,可以绘制人脸框,描绘眼耳鼻嘴关键点,也可作用于后续活体,特征抽取入参。

FaceInfo[] trackMaxFace(int[] imageData, int height, int width)
参数名 含义
imageData ARGB图片像素点
height 图片高
width 图片宽
返回
成功则返回 FaceInfo[] 数组,包含:人脸框width,人脸angle,人脸框中心坐标x,y,人脸可信度mConf,72个关键点landmark,人脸face_id,三个姿态角度headPose,动作活体数据is_live,用户根据自己需求选择
                if (faceDetect == null) {
                    Toast.makeText(mContext,
                            "未初始化检测模型", Toast.LENGTH_SHORT).show();
                    return;
                }
                faceDetect.setDetectMethodType(FaceDetect.DetectType.DETECT_VIS);
                FaceInfo[] faceInfos = faceDetect.trackMaxFace(
                        liveVisImg.data, liveVisImg.height, liveVisImg.width
                );
                if (faceInfos != null && faceInfos.length > 0) {
                    FaceInfo faceInfo = faceInfos[0];
                    StringBuilder info = new StringBuilder();
                    info.append("face info length:").append(faceInfos.length)
                            .append(" face_id:").append(faceInfo.face_id)
                            .append(" width:").append(faceInfo.mWidth)
                            .append(" score:").append(faceInfo.mConf);
                    if (faceInfo.occlu != null && faceInfo.occlu.length == 7) {
                        info.append("face occlusion: ")
                                .append(" L eye:").append(faceInfo.occlu[0])
                                .append(" R eye:").append(faceInfo.occlu[1])
                                .append(" nose:").append(faceInfo.occlu[2])
                                .append(" mouth:").append(faceInfo.occlu[3])
                                .append(" L contour:").append(faceInfo.occlu[4])
                                .append(" R contour:").append(faceInfo.occlu[5])
                                .append(" chin contour:").append(faceInfo.occlu[6]);
                        info.append("face blur: ").append(faceInfo.blur);
                        info.append("face illum: ").append(faceInfo.illum);
                    }
                    Toast.makeText(mContext,
                            info,
                            Toast.LENGTH_SHORT).show();
                    Log.e("handler", info.toString());
                } else {
                    String info = " face info length 0";
                    Toast.makeText(mContext,
                            info, Toast.LENGTH_SHORT).show();
                    Log.e("handler", info);
                }
                faceDetect.clearTrackedFaces();

2.7 人脸跟踪-第一个人脸接口

说明:人脸跟踪检测,追踪图片中第一个人脸信息,接口包含检测和跟踪功能,返回基本人脸信息和72 关键点,可以绘制人脸框,描绘眼耳鼻嘴关键点,也可作用于后续活体,特征抽取入参。

FaceInfo[] trackFirstFace(int[] imageData, int height, int width) 
参数名 含义
imageData ARGB图片像素点
height 图片高
width 图片宽
返回
成功则返回 FaceInfo[] 数组,包含:人脸框width,人脸angle,人脸框中心坐标x,y,人脸可信度mConf,72个关键点landmark,人脸face_id,三个姿态角度headPose,动作活体数据is_live,用户根据自己需求选择

2.8 人脸跟踪-多人脸检测

说明:人脸跟踪检测,追踪图片中多个人脸信息,通过参数num 配置,接口包含检测和跟踪功能,返回基本人脸信息和72 关键点,可以绘制人脸框,描绘眼耳鼻嘴关键点,也可作用于后续活体,特征抽取入参。

FaceInfo[] track(int[] imageData, int height, int width, int num)
参数名 含义
imageData ARGB图片像素点
height 图片高
width 图片宽
num 最大跟踪人脸个数
返回
成功则返回 FaceInfo[] 数组,包含:人脸框width,人脸angle,人脸框中心坐标x,y,人脸可信度mConf,72个关键点landmark,人脸face_id,三个姿态角度headPose,动作活体数据is_live,用户根据自己需求选择

2.9 人脸图像质量检测

说明:单个原子方法质量检测方法(也可以配置BDFaceSDKConfig 中的 isCheckBlur 等三个参数,在trackMaxFace 和 trackFirstFace 方法内部生效)

int imgQuality(int[] imageData, int height, int width, int[] landmarks,float[] bluriness, int[] illum, float[] occlusion, int[] nOccluPart)
参数名 含义
imageData 图片像素点
height 图片高
width 图片宽
landmark 人脸72个关键点FaceInfo.landmark
bluriness 模糊结果
illum 光照结果
occlusion 遮挡结果
nOccluPart 遮挡部位
返回
成功则返回 1
                if (faceDetect == null) {
                    Toast.makeText(mContext,
                            "未初始化检测模型", Toast.LENGTH_SHORT).show();
                    return;
                }
                faceDetect.setDetectMethodType(FaceDetect.DetectType.DETECT_VIS);
                FaceInfo[] faceInfos = faceDetect.trackMaxFace(
                        liveVisImg.data, liveVisImg.height, liveVisImg.width);
                if (faceInfos != null && faceInfos.length > 0) {
                    FaceInfo faceInfo = faceInfos[0];
                    // 质量检测通过加入人脸列表
                    float[] bluriness = new float[1];
                    int[] illum = new int[1];
                    float[] occlusion = new float[7];
                    int[] nOccluPart = new int[1];
                    faceDetect.imgQuality(liveVisImg.data, liveVisImg.height,
                            liveVisImg.width, faceInfo.landmarks, bluriness, illum, occlusion, nOccluPart);
                    StringBuilder info = new StringBuilder();
                    info.append("face occlusion: ")
                            .append(" L eye:").append(occlusion[0])
                            .append(" R eye:").append(occlusion[1])
                            .append(" nose:").append(occlusion[2])
                            .append(" mouth:").append(occlusion[3])
                            .append(" L contour:").append(occlusion[4])
                            .append(" R contour:").append(occlusion[5])
                            .append(" chin contour:").append(occlusion[6]);
                    info.append("face blur: ").append(bluriness[0]);
                    info.append("face illum: ").append(illum[0]);
                    Toast.makeText(mContext,
                            info,
                            Toast.LENGTH_SHORT).show();
                    Log.e("handler", info.toString());
                } else {
                    String info = " face info length 0";
                    Toast.makeText(mContext,
                            info, Toast.LENGTH_SHORT).show();
                    Log.e("handler", info);
                }
                faceDetect.clearTrackedFaces();

2.10 检测方法类型设置

说明:检测方法类型设置,建议FACEBOX_VIS 可见光检测

void setDetectMethodType(DetectType detectMethodType)
参数名 含义
detectMethodType 图片检测类型(目前两种支持FACEBOX_VIS和FACEBOX_NIR,建议FACEBOX_VIS 可见光检测)

2.11 人脸图片信息清理

说明:清空trackMaxFace 和 trackFirstFace 接口检测缓存数据,在注册或者识别成功之后,可以调用该接口

void clearTrackedFaces()

3、FaceLive活体接口

3.1 活体模型加载

说明:静默活体检测模型初始化,可见光活体模型,近红外活体模型,深度活体模型初始化

void initModel(final Context context,final String visModel,final String nirModel,final String depthModel,final Callback callback)
参数名 含义
context 上下文context
visModel 可见光图片活体模型
nirModel 红外图片活体模型
depthModel 深度图活体模型
callback 模型加载结果 void onResponse(int code, String response)
code 0 : 成功;code 1 加载失败
response 结果信息

3.2 人脸静默活体检测-RGB可见光

说明:可见光静默活体分值检测,返回0-1结果,建议超过0.9 为活体

float silentLive(LiveType liveType, int[] imageData, int height, int width, int[] landmarks)
参数名 含义
liveType FaceLive.LiveType.LIVEID_VIS 可见光图像静默活体检测<br /
imageData ARGB图片像素点
height 图片高
width 图片宽
landmark 人脸72个关键点FaceInfo.landmark
返回
成功则返回活体分值
                if (faceDetect == null) {
                    Toast.makeText(mContext,
                            "未初始化检测模型", Toast.LENGTH_SHORT).show();
                    return;
                }

                if (faceLive == null) {
                    Toast.makeText(mContext,
                            "未初始化活体模型", Toast.LENGTH_SHORT).show();
                    return;
                }
                faceDetect.setDetectMethodType(FaceDetect.DetectType.DETECT_VIS);

                FaceInfo[] faceInfos = faceDetect.trackMaxFace(
                        liveVisImg.data, liveVisImg.height, liveVisImg.width
                );

                if (faceInfos != null && faceInfos.length > 0) {
                    FaceInfo faceInfo = faceInfos[0];

                    float visScore = faceLive.silentLive(FaceLive.LiveType.LIVEID_VIS,
                            liveVisImg.data, liveVisImg.height, liveVisImg.width,
                            faceInfo.landmarks);
                    float nirScore = faceLive.silentLive(FaceLive.LiveType.LIVEID_NIR,
                            liveVisImg.dataByte, liveVisImg.height, liveVisImg.width,
                            faceInfo.landmarks);
                    float depthScore = faceLive.silentLive(FaceLive.LiveType.LIVEID_DEPTH,
                            liveDepthImg.dataByte, liveVisImg.height, liveVisImg.width,
                            faceInfo.landmarks);
                    StringBuilder builder = new StringBuilder();
                    builder.append("live-vis").append(visScore)
                            .append("  live-nir").append(nirScore)
                            .append("  live-depth").append(depthScore);

3.3 人脸静默活体检测-NIR近红外或Depth深度图

说明:近红外和深度静默活体分值检测,返回0-1结果,建议超过0.9 为活体;红外和深度为byte 字节数组

float silentLive(LiveType liveType, byte[] imageData, int height, int width, int[] landmarks)
参数名 含义
liveType FaceLive.LiveType.LIVEID_NIR近红外图像静默活体检测
FaceLive.LiveType.LIVEID_DEPTH 深度图静默活体检测
imageData 灰度图片像素点或深度图片像素点
height 图片高
width 图片宽
landmark 人脸72个关键点FaceInfo.landmark
返回
成功则返回活体分值

4、FaceFeature特征接口

4.1 特征模型加载

说明:离线特征获取模型加载,目前支持可见光模型,近红外检测模型(非必要参数,可以为空),证件照模型;用户根据自己场景,选择相应场景模型

initModel(final Context context,final String idPhotoModel,final String visModel,final String nirModel,final Callback callback)
参数名 含义
context 上下文context
idPhotoModel 证件照图片模型
visModel 可见光图片模型
nirModel 红外图片模型(非必要参数,可以为空)
callback 模型加载结果 void onResponse(int code, String response)
code 0 : 成功;code 1 加载失败
response 结果信息

4.2 人脸特征提取

说明:离线特征提取接口,通过featureType 提取不同图片特征数据,函数返回特征个数,特征存储在feature 参数中

float feature(FeatureType featureType, int[] imageData, int height, int width, int[] landmarks, byte[] feature)
参数名 含义
featureType FeatureType.FEATURE_VIS生活照
FeatureType.FEATURE_ID_PHOTO证件照照
imageData 图片像素点
height 图片高
width 图片宽
landmark 人脸72个关键点FaceInfo.landmark
feature 人脸特征 feature 数组,默认初始化512空字节
返回
成功则返回512 特征点
                if (faceDetect == null) {
                    Toast.makeText(mContext,
                            "未初始化检测模型", Toast.LENGTH_SHORT).show();
                    return;
                }

                if (faceFeature == null) {
                    Toast.makeText(mContext,
                            "未初始化特征模型", Toast.LENGTH_SHORT).show();
                    return;
                }
                faceDetect.setDetectMethodType(FaceDetect.DetectType.DETECT_VIS);

                FaceInfo[] faceInfos = faceDetect.trackMaxFace(
                        featureIdPImg.data, featureIdPImg.height, featureIdPImg.width
                );

                byte[] feature1 = new byte[512];
                if (faceInfos != null && faceInfos.length > 0) {
                    FaceInfo faceInfo = faceInfos[0];
                    float length = faceFeature.feature(FaceFeature.FeatureType.FEATURE_VIS,
                            featureIdPImg.data, featureIdPImg.height, featureIdPImg.width, faceInfo.landmarks, feature1);
                    Log.e("handler", "VIS feature 1 length " + length);
                }
                faceDetect.clearTrackedFaces();

                FaceInfo[] faceInfos2 = faceDetect.trackMaxFace(
                        featureVisImg.data, featureVisImg.height, featureVisImg.width
                );

                byte[] feature2 = new byte[512];
                if (faceInfos2 != null && faceInfos2.length > 0) {
                    FaceInfo faceInfo2 = faceInfos2[0];
                    float length = faceFeature.feature(FaceFeature.FeatureType.FEATURE_VIS,
                            featureVisImg.data, featureVisImg.height, featureVisImg.width, faceInfo2.landmarks, feature2);
                    Log.e("handler", "VIS feature 2 length " + length);
                }
                faceDetect.clearTrackedFaces();

                float result = faceFeature.featureCompare(FaceFeature.FeatureType.FEATURE_VIS,
                        feature1, feature2);

4.3 人脸特征比对

说明:离线特征比对结果,分值为0--100 之间

float featureCompare(FeatureType featureType, byte[] feature1, byte feature2)
参数名 含义
featureType FeatureType.FEATURE_VIS生活照
FeatureType.FEATURE_ID_PHOTO证件照照
feature1 特征1
feature2 特征2
返回
成功则返回 比对结果(0--100)

5、FaceAttributes属性接口

5.1 属性情绪模型加载

说明:人脸属性(年龄,性别,戴眼镜等),情绪(喜怒哀乐)模型初始化

void initModel(final Context context,final String atttibuteModel,final String emotionModel,final Callback callback)
参数名 含义
context 上下文context
atttibuteModel 属性模型
emotionModel 情绪模型
callback 模型加载结果 void onResponse(int code, String response)
code 0 : 成功;code 1 加载失败
response 结果信息

5.2 人脸属性检测

说明:获取人脸属性信息,包含年龄,表情,种族,性别,是否佩戴眼镜

BDFaceSDKAttribute attribute(int[] imageData, int height, int width, int[] landmarks)
参数名 含义
imageData ARGB图片像素点
height 图片高
width 图片宽
landmark 人脸72个关键点FaceInfo.landmark
返回
成功则返回 BDFaceSDKAttribute
                if (faceDetect == null) {
                    Toast.makeText(mContext,
                            "未初始化检测模型", Toast.LENGTH_SHORT).show();
                    return;
                }

                if (faceAttributes == null) {
                    Toast.makeText(mContext,
                            "未初始化属性模型", Toast.LENGTH_SHORT).show();
                    return;
                }

                faceDetect.setDetectMethodType(FaceDetect.DetectType.DETECT_VIS);

                FaceInfo[] faceInfos = faceDetect.trackMaxFace(
                        liveVisImg.data, liveVisImg.height, liveVisImg.width);

                if (faceInfos != null && faceInfos.length > 0) {
                    FaceInfo faceInfo = faceInfos[0];
                    BDFaceSDKAttribute attribute = faceAttributes.attribute(liveVisImg.data,
                            liveVisImg.height, liveVisImg.width,
                            faceInfo.landmarks);

                    BDFaceSDKEmotions emotions = faceAttributes.emotions(liveVisImg.data,
                            liveVisImg.height, liveVisImg.width,
                            faceInfo.landmarks);

                    final StringBuilder builder = new StringBuilder();
                    if (attribute != null) {
                        builder.append(" attribute:");
                        builder.append(attribute.age);
                        builder.append("    ").append(attribute.emotion);
                        builder.append("    ").append(attribute.gender);
                        builder.append("    ").append(attribute.glasses);
                    }
                    if (emotions != null) {
                        builder.append("\n emotion:");
                        builder.append("    ").append(emotions.emotion);
                        builder.append("    ").append(emotions.expression_conf);
                    }
                    Log.e("handler", "attribute  " + builder.toString());

                }
                faceDetect.clearTrackedFaces();

5.3 人脸表情检测

说明:获取人脸表情信息,包含生气,开心,厌恶,害怕,惊讶等

BDFaceSDKEmotions emotions(int[] imageData, int height, int width, int[] landmarks) 
参数名 含义
imageData ARGB图片像素点
height 图片高
width 图片宽
landmark 人脸72个关键点FaceInfo.landmark
返回
成功则返回BDFaceSDKEmotions

6、人脸信息实体类

6.1 基础信息实体类

/**
 * 人脸信息实体类
 */

public class FaceInfo {
    public float mWidth; // rectangle width
    public float mAngle; // rectangle tilt angle [-45 45] in degrees
    public float mCenter_y;   // rectangle center y
    public float mCenter_x;  // rectangle center x
    public float mConf; // face detection score

    public int[] landmarks;
    public int face_id;
    public float[] headPose;
    public int[] is_live;

    public float illum = 0f;
    public float blur = 0f;
    public float[] occlu;

    public FaceInfo(float width, float angle, float y, float x, float conf) {
        mWidth = width;
        mAngle = angle;
        mCenter_y = y;
        mCenter_x = x;
        mConf = conf;
        landmarks = null;
        face_id = 0;
    }

    public FaceInfo(float width, float angle, float y, float x, float conf, int track_id, int[] ldmks) {
        mWidth = width;
        mAngle = angle;
        mCenter_y = y;
        mCenter_x = x;
        mConf = conf;
        landmarks = ldmks;
        face_id = track_id;
    }

    public FaceInfo(float width, float angle, float y, float x, float conf,
                    int track_id, int[] ldmks, float[] pose, int[] livestatus,
                    float illum,float blur,float[] occlu
    ) {
        mWidth = width;
        mAngle = angle;
        mCenter_y = y;
        mCenter_x = x;
        mConf = conf;
        landmarks = ldmks;
        face_id = track_id;
        headPose = pose;
        is_live = livestatus;
        this.illum = illum;
        this.blur = blur;
        this.occlu = occlu;
    }
}

6.2 扩展信息实体类

// 图片信息类
public class BDFaceSDKImageInfo {
    public int height;                              // 图片高度
    public int widht;                              // 图片宽度
    public int[] data;                            // 图片数据
    public BDFaceSDKCommon.BDFaceImageType type;  // 图片格式

    public BDFaceSDKImageInfo(int height, int widht, int[] data, int type) {
        this.height = height;
        this.widht = widht;
        this.data = data;
        this.type = BDFaceSDKCommon.BDFaceImageType.values()[type];
    }
}

public class BDFaceSDKConfig {
    /**
     * 最小人脸检测大小 建议50
     */
    public int minFaceSize = 50;

    /**
     * 最大人脸检测大小 建议-1(不做限制)
     */
    public int maxFaceSize = -1;

    /**
     * 人脸跟踪,检测的时间间隔 默认 500ms
     */
    public int trackInterval = 0;

    /**
     * 人脸跟踪,跟踪时间间隔 默认 1000ms
     */
    public int detectInterval = 0;

    /**
     * 人脸置信度阈值,建议值0.5
     */
    public float noFaceSize = 0.5f;

    /**
     * 人脸姿态角 pitch,yaw,roll
     */
    public int pitch;
    public int yaw;
    public int roll;

    /**
     * 质量检测模糊,遮挡,光照,默认不做质量检测
     */
    public boolean isCheckBlur = true;
    public boolean isOcclusion = true;
    public boolean isIllumination = true;

    /**
     * 检测图片类型,可见光或者红外
     */
    public FaceDetect.DetectType detectMethodType
            = FaceDetect.DetectType.DETECT_VIS;
}

// 人脸属性
public class BDFaceSDKAttribute {
    public int age;                                    // 年龄
    public BDFaceSDKCommon.BDFaceRace race;            // 种族
    public BDFaceSDKCommon.BDFaceEmotion emotion;      // 表情
    public BDFaceSDKCommon.BDFaceGlasses glasses;      // 戴眼镜状态
    public BDFaceSDKCommon.BDFaceGender gender;        // 性别

    public BDFaceSDKAttribute(int age, int race, int emotion, int glasses, int gender) {
        this.age = age;
        this.race = BDFaceSDKCommon.BDFaceRace.values()[race];
        this.emotion = BDFaceSDKCommon.BDFaceEmotion.values()[emotion];
        this.gender = BDFaceSDKCommon.BDFaceGender.values()[gender];
        this.glasses = BDFaceSDKCommon.BDFaceGlasses.values()[glasses];
    }
}

// 人脸情绪
public class BDFaceSDKEmotions {
    public BDFaceSDKCommon.BDFaceEmotionEnum emotion;
    public float expression_conf;
    public float[] expression_conf_list;

    public BDFaceSDKEmotions(int emotion, float expression_conf, float[] expression_conf_list) {
        this.emotion = BDFaceSDKCommon.BDFaceEmotionEnum.values()[emotion];
        this.expression_conf = expression_conf;
        this.expression_conf_list = expression_conf_list;
    }
}
    // 图像类型
    public enum BDFaceImageType {
        BD_FACE_IMAGE_TYPE_RGB,         // rgb图像
        BD_FACE_IMAGE_TYPE_BGR,         // bgr图像
        BD_FACE_IMAGE_TYPE_RGBA,        // rgba图像
        BD_FACE_IMAGE_TYPE_BGRA,        // bgra图像
        BD_FACE_IMAGE_TYPE_GRAY,        // 灰度图
        BD_FACE_IMAGE_TYPE_DEPTH,       // 深度图
        BD_FACE_IMAGE_TYPE_YUV422,      // YUV422图像
        BD_FACE_IMAGE_TYPE_YUV_411,     // YUV 411图像
        BD_FACE_IMAGE_TYPE_YUV_420,     // YUV 411图像
        BD_FACE_IMAGE_TYPE_YUV_YUYV,    // YUV YUYV图像
        BD_FACE_IMAGE_TYPE_YUV_YU12,    // YUV YU12图像
        BD_FACE_IMAGE_TYPE_YUV_NV12,    // YUV NV12图像
        BD_FACE_IMAGE_TYPE_YUV_NV21,    // YUV NV21图像
    }

    // 表情类型
    public enum BDFaceEmotion {
        BDFACE_EMOTION_NEUTRAL,         // 中性表情
        BDFACE_EMOTION_SMILE,           // 微笑
        BDFACE_EMOTION_BIG_SMILE,       // 大笑
    }

    // 情绪
    public enum BDFaceEmotionEnum {
        BDFACE_EMOTIONS_ANGRY,          // 生气
        BDFACE_EMOTIONS_DISGUST,        // 恶心
        BDFACE_EMOTIONS_FEAR,           // 害怕
        BDFACE_EMOTIONS_HAPPY,          // 开心
        BDFACE_EMOTIONS_SAD,            // 伤心
        BDFACE_EMOTIONS_SURPRISE,       // 惊讶
        BDFACE_EMOTIONS_NEUTRAL,        // 无情绪
    };

    // 人脸属性种族
    public enum BDFaceRace {
        BDFACE_RACE_YELLOW,       // 黄种人
        BDFACE_RACE_WHITE,        // 白种人
        BDFACE_RACE_BLACK,        // 黑种人
        BDFACE_RACE_INDIAN,       // 印度人
    }

    // 戴眼镜状态
    public enum BDFaceGlasses {
        BDFACE_NO_GLASSES,   // 无眼镜
        BDFACE_GLASSES,      // 有眼镜
        BDFACE_SUN_GLASSES,  // 墨镜
    }

    // 性别
    public enum BDFaceGender {
        BDFACE_GENDER_FEMALE, // 女性
        BDFACE_GENDER_MALE,   // 男性
    }
    /**
     * log种类枚举
     */
    public enum BDFaceLogInfo {
        BDFACE_LOG_VALUE_MESSAGE,   // 打印输出值日志
        BDFACE_LOG_ERROR_MESSAGE,   // 打印输出错误日志
        BDFACE_LOG_ALL_MESSAGE,     // 打印所有日志
    };
上一篇
离线采集SDK
下一篇
Android-人脸通行工程
切诺为什么要饭前半小时吃 酸奶不能和什么一起吃 高定是什么意思 黄色分泌物是什么原因 女性肾虚吃什么药
皴是什么意思 滋阴潜阳是什么意思 山西人喜欢吃什么 舌头短的人意味着什么 历久弥新什么意思
尿中有泡沫是什么原因 两规是什么意思 豆芽菜是什么意思 hbsag阳性是什么意思 夫妻相是什么意思
肚胀是什么原因 红色裤子配什么上衣好看 什么还珠 什么花不能浇硫酸亚铁 种牙好还是镶牙好区别是什么
尿液发黄什么原因hcv8jop8ns1r.cn 痢疾吃什么药最有效hcv8jop4ns7r.cn 兜兜转转是什么意思hcv9jop6ns4r.cn 结石是什么hcv9jop2ns7r.cn 翔是什么意思hcv8jop8ns7r.cn
腱鞘炎是什么引起的hcv8jop4ns3r.cn 五行属什么怎么看hcv7jop4ns5r.cn 五戒十善是什么hcv7jop5ns5r.cn 泌尿系统感染吃什么消炎药hcv8jop6ns2r.cn 樊字五行属什么hcv9jop0ns0r.cn
头部ct挂什么科hcv8jop4ns6r.cn 右眼跳是什么原因hcv9jop1ns7r.cn 马华读什么hcv7jop6ns1r.cn 互攻是什么意思hcv9jop6ns8r.cn 萎缩性胃炎是什么原因引起的hcv9jop7ns4r.cn
钙吃多了有什么副作用hcv8jop0ns4r.cn 拉脱水是什么症状hcv8jop5ns6r.cn 卵泡破裂有什么症状hcv9jop0ns0r.cn 牙龈发炎用什么药hcv8jop1ns9r.cn 脖子上长个包挂什么科hcv7jop9ns7r.cn
百度