百度人脸识别集成
一、Demo体验
1.1 替换license文件
将官方下载的Demo用AndroidStudio打开,将申请SDK时得到的license文件添加到app->src->main->assets下。
1.2 修改包名
将app.gradle和AndroidManifest.xml里的包名改成申请license的填入的包名。
1.3 配置打包签名
申请的license已经和打包签名key进行了绑定(申请时用到了签名的md5,为了便于debug模式也能调用SDK的功能,需要把debug的key改成申请license的key。
1.4 修改SDK初始化参数
二、集成
2.1 引入faceplatform-release库
将开发包中的faceplatform-release库 Import Module 到工程。
2.2 引入faceplatform-ui库
将开发包中的faceplatform-ui库 Import Module 到工程。
2.2.1 faceplatform-ui库
SDK提供的了开源的faceplatform-ui库,把活体检测和人脸图像采集功能等功能进行了封装,适配了主流机型。如果需要使用,请添加faceplatform-ui模块到的工程中。faceplatform-ui目录结构如下图:
2.2.2 添加faceplatform-ui库
在build.gradle使用compile project引人faceplatform-ui库工程。
2.3 配置Setting.gradle
Setting.gradle中include faceplatfrom-ui和facepaltfrom-release。
备注:一般到这一步就自动配置好了,以防万一,再检查一遍。
2.4 添加授权文件
从官网下载授权文件license,复制到 app/src/main/assets/license目录下。
2.5 配置打包签名
2.6 权限声明
三、 功能使用
3.1 初始化SDK
FaceSDKManager.getIntance().initialize(context, appname-face-android,“idl-license.face-android”);
备注:此段代码在Demo中的MainActivity中。
3.2 设置人脸检测参数
com.baidu.idl.face.platform.FaceConfig 类用于人脸检测参数设置。
3.3 活体检测
3.3.1 使用步骤
- 调用FaceSDKManager.getIntance().initialize(context, appname-face-android,“idl-license.face-android”);初始化SDK。
- FaceEnvironment 相应的方法设置,提示音&提示语资源。(非必须)
- 初始化相机。注册预览回调,开启预览。
- 调用FaceSDKManager.getInstance().getLivenessStrategyModule() 获得ILivenessStrategy对象。(该方法每次调用都会返回一个新对象).
- 调用 ILivenessStrategy.setPreviewDegree();设置预览图片的旋转角度。调用setDetectStrategySoundEnable设置是否开启语音。调用setDetectStrategyConfig设置,预览图的大小,人脸检测框的坐标和回调。
- 多次调用livenessStrategy进行人脸图片采集,人脸跟踪。
- 实现ILivenessStrategyCallback的onLivenessCompletion并处理结果。
3.3.2 使用faceplatform-ui库提供的U进行活体检测
活体检测界面FaceLivenessActivity,包括UI界面,系统相机控制,使用活体检测器ILivenessStrategy处理相机采集到的图像,完成活体检测功能。
3.3.2.1 代码
/**
* 人脸识别页面
*/
public class FaceLivenessExpActivity extends FaceLivenessActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onLivenessCompletion(FaceStatusEnum status, String message, HashMap<String, String> base64ImageMap) {
super.onLivenessCompletion(status, message, base64ImageMap);
if (status == FaceStatusEnum.OK && mIsCompletion) {
Toast.makeText(this,"活体检测--检测成功",Toast.LENGTH_SHORT).show();
} else if (status == FaceStatusEnum.Error_DetectTimeout ||
status == FaceStatusEnum.Error_LivenessTimeout ||
status == FaceStatusEnum.Error_Timeout) {
Toast.makeText(this,"活体检测--采集超时",Toast.LENGTH_SHORT).show();
}
}
@Override
public void finish() {
super.finish();
}
}
3.3.2.2 manifest注册
3.4 图像采集
3.4.1 使用步骤
- 调用FaceSDKManager.getIntance().initialize(context, appname-face-android, l idl-license.face-android”);初始化SDK.。
- FaceEnvironment 相应的方法设置,提示音&提示语资源。(非必须)
- 初始化相机。注册预览回调,开启预览。
- 调用FaceSDKManager.getInstance().getDetectStrategyModule() 获得IDetectStrategy对象。(该方法每次调用都会返回一个新对象).
- 调用 IDetectStrategy.setPreviewDegree();设置预览图片的旋转角度。调用setDetectStrategySoundEnable设置是否开启语音。调用setDetectStrategyConfig设置,预览图的大小,人脸检测框的坐标和回调。
- 多次调用detectStrategy进行人脸图片采集。
- 实现IDetectStrategyCallback的onDetectCompletion并处理结果。
3.4.2 使用faceplatform-ui库提供的U进行图像采集
人脸图像采集器界面FaceDetectActivity,包括UI界面,系统相机控制,使用人脸图像采集器IDetectStrategy处理相机采集到的图像。
3.4.2.1 代码
/**
* 人脸跟踪图像采集界面
*/
public class FaceDetectExpActivity extends FaceDetectActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onDetectCompletion(FaceStatusEnum status, String message, HashMap<String, String> base64ImageMap) {
super.onDetectCompletion(status, message, base64ImageMap);
if (status == FaceStatusEnum.OK && !mIsCompletion) {
Toast.makeText(this,"人脸图像采集--检测成功",Toast.LENGTH_SHORT).show();
} else if (status == FaceStatusEnum.Error_DetectTimeout ||
status == FaceStatusEnum.Error_LivenessTimeout ||
status == FaceStatusEnum.Error_Timeout) {
Toast.makeText(this,"人脸图像采集--采集超时",Toast.LENGTH_SHORT).show();
}
}
@Override
public void finish() {
super.finish();
}
}
3.4.2.2 manifest注册
3.5 界面定制
- 修改界面方式,替换布局文件或图片资源文件。
修改提示语音音频文件,有两种方式:
1.1 直接替换FaceUI工程raw下的mp3文件和string.xml。
1.2 FaceEnvironment 提供了setSoundId(FaceStatusEnum status, int soundId); 设置提示音资源。FaceStatusEnum为不同的状态。soundId为资源文件所对应的resource id. //TODO 都支持哪些音频格式? 和setTipsId(FaceStatusEnum status, int tipsId); 设置提示语。
四、 常见问题
4.1 license文件有什么用,该放在什么地方?
license文件需要申请,目的是作为sdk校验开发者的使用合法性,license文件放置位置 不对或未放置license文件会导致没法使用sdk,一般应先申请license文件,并把申请得到的license文件,放置在assets目录下面。
4.2 appname没有替换成你自己的appname?
应该在初始化sdk时候,如: FaceSDKManager.getInstance().initialize(this, “appname-face-android”); 其中appname为你申请的应用名称。
4.3 license文件失效了,不能用了怎么办?
icense文件申请时候有期限,如过期会导致校验失效,需要上官网申请延期。
4.4 活体检测常见有那些动作?是否可配置?
常见有6个动作,眨眼,张大嘴,向上抬头,向下低头,向左摇头,向右摇头等。 sdk提供传入设置参数,如活体检测角度、光线,检测动作,检测动作数量等设置。
4.5 使用sdk一般会用到活体检测拍照等功能,有什么需要注意?
android6.0+需要注意相机拍摄权限问题。如没申请权限,可能导致没法调起相机。