合作咨询
我们的专家服务团队将竭诚为您提供专业的合作咨询服务
此版本文档已归档不再维护,推荐您使用最新版本。
在开始API开发工作之前,您需要完成必要的开发准备工作,同时请确保您的工程中已经配置HMS Core SDK的maven仓地址,并且完成了本服务的SDK集成。
开发者可以直接调用身份证识别插件,无需自己处理视频流,直接通过回调函数获取识别结果,具体实现请参考示例代码:
创建识别结果回调函数,重载onSuccess, onCanceled, onFailure, onDenied四个方法:
onSuccess 表示识别成功。
onCanceled 表示用户取消。
onFailure 表示识别失败。
onDenied 表示相机不可用等场景。
MLCnIcrCaptureResult 为识别返回结果。
- private MLCnIcrCapture.CallBack idCallback = new MLCnIcrCapture.CallBack() {
- @Override
- public void onSuccess(MLCnIcrCaptureResult idCardResult){
- // 识别成功处理。
- }
- @Override
- public void onCanceled(){
- // 用户取消处理。
- }
- // 识别不到任何文字信息或识别过程发生系统异常的回调方法。
- // retCode:错误码。
- // bitmap:检测失败的身份证图片。
- @Override
- public void onFailure(int retCode, Bitmap bitmap){
- // 识别异常处理。
- }
- @Override
- public void onDenied(){
- // 相机不支持等场景处理。
- }
- };
2. 设置识别参数,调用识别器capture/captureImage接口进行识别,识别结果会通过步骤1的回调函数返回。
视频流识别
- private void startCaptureActivity(MLCnIcrCapture.CallBack callback, boolean isFront, boolean isRemote) {
- MLCnIcrCaptureConfig config = new MLCnIcrCaptureConfig.Factory()
- // 设置识别身份证的正反面。
- // true:正面。
- // false:反面。
- .setFront(true)
- // 设置是否使用云侧能力进行识别。
- // true:云侧。
- // false:端侧。
- .setRemote(false)
- .create();
- MLCnIcrCapture icrCapture = MLCnIcrCaptureFactory.getInstance().getIcrCapture(config);
- icrCapture.capture(callback, this);
- }
图片识别
- private void startCaptureActivity(MLCnIcrCapture.CallBack callback, boolean isFront, boolean isRemote) {
- MLCnIcrCaptureConfig config = new MLCnIcrCaptureConfig.Factory()
- // 设置识别身份证的正反面。
- // true:正面。
- // false:反面。
- .setFront(true)
- // 设置是否使用云侧能力进行识别。
- // true:云侧。
- // false:端侧。
- .setRemote(false)
- .create();
- MLCnIcrCapture icrCapture = MLCnIcrCaptureFactory.getInstance().getIcrCapture(config);
- // bitmap为输入的Bitmap格式图片数据。
- icrCapture.captureImage(bitmap, callback);
- }
3. 在检测按钮的回调中,调用步骤2中定义的方法,实现身份证识别。
- @Override
- public void onClick(View v) {
- switch (v.getId()) {
- // 识别正面按钮。
- case R.id.IDCard_image_front:
- startCaptureActivity(idCallback, true, false);
- break;
- // 识别背面按钮。
- case R.id.IDCard_image_back:
- startCaptureActivity(idCallBack, false, false);
- break;
- default:
- break;
- }
- }
1. 创建卡证分析器。可以通过提供的自定义参数类MLIcrAnalyzerSetting创建分析器。
- // 方式1:使用默认的参数配置,默认识别正面。
- MLIcrAnalyzer analyzer = MLCardAnalyzerFactory.getInstance().getIcrAnalyzer();
- // 方式2:使用自定义的参数配置。
- // setSideType 设置身份证正面或反面。
- // MLIcrAnalyzerSetting.FRONT:值为"FRONT",即正面。
- // MLIcrAnalyzerSetting.BACK:值为"BACK",即反面。
- MLIcrAnalyzerSetting setting = new MLIcrAnalyzerSetting.Factory()
- .setSideType(MLIcrAnalyzerSetting.FRONT)
- .create();
- MLIcrAnalyzer analyzer = MLCardAnalyzerFactory.getInstance().getIcrAnalyzer(setting);
2. 通过android.graphics.Bitmap创建MLFrame,支持的图片格式包括:jpg/jpeg/png/bmp,建议图片尺寸不小于512*512像素。
- // 通过bitmap创建MLFrame,bitmap为输入的Bitmap格式图片数据。
- MLFrame frame = MLFrame.fromBitmap(bitmap);
3. 将创建的MLFrame对象传递给“asyncAnalyseFrame”方法进行卡证识别。
- Task<MLIdCard> task = analyzer.asyncAnalyseFrame(frame);
- task.addOnSuccessListener(new OnSuccessListener<MLIdCard>() {
- public void onSuccess(MLIdCard idCard) {
- // 检测成功的处理逻辑。
- }
- }).addOnFailureListener(new OnFailureListener() {
- public void onFailure(Exception e) {
- // 检测失败的处理逻辑。
- }
- });
4. 识别完成,停止分析器,释放识别资源。
- if (analyzer != null) {
- try {
- analyzer.stop();
- } catch (IOException e) {
- // 异常处理。
- }
- }
1. 创建卡证分析器。可以通过提供的自定义参数类MLRemoteIcrAnalyzerSetting创建分析器。
- // 方式1:使用默认的参数配置,默认识别正面
- MLRemoteIcrAnalyzer analyzer = MLCardAnalyzerFactory.getInstance().getRemoteIcrAnalyzer();
- // 方式2:使用自定义的参数配置
- // setSideType 设置身份证正面或反面。
- // MLRemoteIcrAnalyzerSetting.FRONT:值为"FRONT",即正面。
- // MLRemoteIcrAnalyzerSetting.BACK:值为"BACK",即反面。
- MLRemoteIcrAnalyzerSetting setting = new MLRemoteIcrAnalyzerSetting.Factory()
- .setSideType(MLRemoteIcrAnalyzerSetting.FRONT)
- .create();
- MLRemoteIcrAnalyzer analyzer = MLCardAnalyzerFactory.getInstance().getRemoteIcrAnalyzer(setting);
2. 通过android.graphics.Bitmap创建MLFrame,支持的图片格式包括:jpg/jpeg/png/bmp,建议图片尺寸不小于512*512像素。
- MLFrame frame = MLFrame.fromBitmap(bitmap);
3. 将创建的MLFrame对象传递给“asyncAnalyseFrame”方法进行卡证识别。
- Task<MLIdCard> task = analyzer.asyncAnalyseFrame(frame);
- task.addOnSuccessListener(new OnSuccessListener<MLIdCard>() {
- public void onSuccess(MLIdCard idCard) {
- // 检测成功的处理逻辑。
- }
- }).addOnFailureListener(new OnFailureListener() {
- public void onFailure(Exception e) {
- // 识别失败,获取相关异常信息。
- try {
- MLException mlException = (MLException)e;
- // 获取错误码,开发者可以对错误码进行处理,根据错误码进行差异化的页面提示。错误码信息可参见:机器学习服务错误码。
- int errorCode = mlException.getErrCode();
- // 获取报错信息,开发者可以结合错误码,快速定位问题。
- String errorMessage = mlException.getMessage();
- } catch (Exception error) {
- // 转换错误处理。
- }
- }
- });
4. 识别完成,停止分析器,释放识别资源。
- if (analyzer != null) {
- try {
- analyzer.stop();
- } catch (IOException e) {
- Log.d(TAG, "stop exception.");
- }
- }