文档管理中心
我的

此版本文档已归档不再维护,推荐您使用最新版本。

指南机器学习服务文本类服务开发身份证识别开发步骤

身份证识别开发步骤

在开始API开发工作之前,您需要完成必要的开发准备工作,同时请确保您的工程中已经配置HMS Core SDK的maven仓地址,并且完成了本服务的SDK集成。

使用识别插件进行视频流身份证识别

开发者可以直接调用身份证识别插件,无需自己处理视频流,直接通过回调函数获取识别结果,具体实现请参考示例代码:

创建识别结果回调函数,重载onSuccess, onCanceled, onFailure, onDenied四个方法:

  • onSuccess 表示识别成功。

  • onCanceled 表示用户取消。

  • onFailure 表示识别失败。

  • onDenied 表示相机不可用等场景。

  • MLCnIcrCaptureResult 为识别返回结果。

收起
自动换行
深色代码主题
复制
  1. private MLCnIcrCapture.CallBack idCallback = new MLCnIcrCapture.CallBack() {
  2.    @Override
  3.    public void onSuccess(MLCnIcrCaptureResult idCardResult){
  4.        // 识别成功处理。
  5.    }  
  6.    @Override
  7.    public void onCanceled(){
  8.        // 用户取消处理。
  9.    }  
  10.    // 识别不到任何文字信息或识别过程发生系统异常的回调方法。
  11.    // retCode:错误码。
  12.    // bitmap:检测失败的身份证图片。
  13.    @Override
  14.    public void onFailure(int retCode, Bitmap bitmap){
  15.        // 识别异常处理。
  16.    }
  17.    @Override
  18.    public void onDenied(){
  19.        // 相机不支持等场景处理。
  20.    }  
  21. };

2. 设置识别参数,调用识别器capture/captureImage接口进行识别,识别结果会通过步骤1的回调函数返回。

  • 视频流识别

收起
自动换行
深色代码主题
复制
  1. private void startCaptureActivity(MLCnIcrCapture.CallBack callback, boolean isFront, boolean isRemote) {
  2.    MLCnIcrCaptureConfig config = new MLCnIcrCaptureConfig.Factory()
  3.        // 设置识别身份证的正反面。
  4.        // true:正面。
  5.        // false:反面。
  6.        .setFront(true)
  7.        // 设置是否使用云侧能力进行识别。
  8.        // true:云侧。
  9.        // false:端侧。
  10.        .setRemote(false)
  11.        .create();
  12.    MLCnIcrCapture icrCapture = MLCnIcrCaptureFactory.getInstance().getIcrCapture(config);
  13.    icrCapture.capture(callback, this);
  14. }
  • 图片识别

收起
自动换行
深色代码主题
复制
  1. private void startCaptureActivity(MLCnIcrCapture.CallBack callback, boolean isFront, boolean isRemote) {
  2.    MLCnIcrCaptureConfig config = new MLCnIcrCaptureConfig.Factory()
  3.        // 设置识别身份证的正反面。
  4.        // true:正面。
  5.        // false:反面。
  6.        .setFront(true)
  7.        // 设置是否使用云侧能力进行识别。
  8.        // true:云侧。
  9.        // false:端侧。
  10.        .setRemote(false)
  11.        .create();
  12.    MLCnIcrCapture icrCapture = MLCnIcrCaptureFactory.getInstance().getIcrCapture(config);
  13.    // bitmap为输入的Bitmap格式图片数据。
  14.    icrCapture.captureImage(bitmap, callback);
  15. }

3. 在检测按钮的回调中,调用步骤2中定义的方法,实现身份证识别。

收起
自动换行
深色代码主题
复制
  1. @Override
  2. public void onClick(View v) {
  3.    switch (v.getId()) {
  4.        // 识别正面按钮。
  5.        case R.id.IDCard_image_front:
  6.            startCaptureActivity(idCallback, true, false);
  7.            break;
  8.        // 识别背面按钮。
  9.        case R.id.IDCard_image_back:
  10.            startCaptureActivity(idCallBack, false, false);
  11.            break;
  12.        default:
  13.            break;
  14.    }
  15. }

设备侧身份证识别

1. 创建卡证分析器。可以通过提供的自定义参数类MLIcrAnalyzerSetting创建分析器。

收起
自动换行
深色代码主题
复制
  1. // 方式1:使用默认的参数配置,默认识别正面。
  2. MLIcrAnalyzer analyzer = MLCardAnalyzerFactory.getInstance().getIcrAnalyzer();
  3. // 方式2:使用自定义的参数配置。
  4. // setSideType 设置身份证正面或反面。
  5. // MLIcrAnalyzerSetting.FRONT:值为"FRONT",即正面。
  6. // MLIcrAnalyzerSetting.BACK:值为"BACK",即反面。
  7. MLIcrAnalyzerSetting setting = new MLIcrAnalyzerSetting.Factory()
  8.    .setSideType(MLIcrAnalyzerSetting.FRONT)
  9.    .create();
  10. MLIcrAnalyzer analyzer = MLCardAnalyzerFactory.getInstance().getIcrAnalyzer(setting);

2. 通过android.graphics.Bitmap创建MLFrame,支持的图片格式包括:jpg/jpeg/png/bmp,建议图片尺寸不小于512*512像素。

收起
自动换行
深色代码主题
复制
  1. // 通过bitmap创建MLFrame,bitmap为输入的Bitmap格式图片数据。
  2. MLFrame frame = MLFrame.fromBitmap(bitmap);

3. 将创建的MLFrame对象传递给“asyncAnalyseFrame”方法进行卡证识别。

收起
自动换行
深色代码主题
复制
  1. Task<MLIdCard> task = analyzer.asyncAnalyseFrame(frame);
  2. task.addOnSuccessListener(new OnSuccessListener<MLIdCard>() {
  3.    public void onSuccess(MLIdCard idCard) {
  4.        // 检测成功的处理逻辑。
  5.    }
  6. }).addOnFailureListener(new OnFailureListener() {
  7.    public void onFailure(Exception e) {
  8.        // 检测失败的处理逻辑。
  9.    }
  10. });

4. 识别完成,停止分析器,释放识别资源。

收起
自动换行
深色代码主题
复制
  1. if (analyzer != null) {
  2.    try {
  3.        analyzer.stop();
  4.    } catch (IOException e) {
  5.        // 异常处理。
  6.    }
  7. }

云侧身份证识别

1. 创建卡证分析器。可以通过提供的自定义参数类MLRemoteIcrAnalyzerSetting创建分析器。

收起
自动换行
深色代码主题
复制
  1. // 方式1:使用默认的参数配置,默认识别正面
  2. MLRemoteIcrAnalyzer analyzer = MLCardAnalyzerFactory.getInstance().getRemoteIcrAnalyzer();
  3. // 方式2:使用自定义的参数配置
  4. // setSideType 设置身份证正面或反面。
  5. // MLRemoteIcrAnalyzerSetting.FRONT:值为"FRONT",即正面。
  6. // MLRemoteIcrAnalyzerSetting.BACK:值为"BACK",即反面。
  7. MLRemoteIcrAnalyzerSetting setting = new MLRemoteIcrAnalyzerSetting.Factory()
  8.    .setSideType(MLRemoteIcrAnalyzerSetting.FRONT)
  9.    .create();
  10. MLRemoteIcrAnalyzer analyzer = MLCardAnalyzerFactory.getInstance().getRemoteIcrAnalyzer(setting);

2. 通过android.graphics.Bitmap创建MLFrame,支持的图片格式包括:jpg/jpeg/png/bmp,建议图片尺寸不小于512*512像素。

收起
自动换行
深色代码主题
复制
  1. MLFrame frame = MLFrame.fromBitmap(bitmap);

3. 将创建的MLFrame对象传递给“asyncAnalyseFrame”方法进行卡证识别。

收起
自动换行
深色代码主题
复制
  1. Task<MLIdCard> task = analyzer.asyncAnalyseFrame(frame);
  2. task.addOnSuccessListener(new OnSuccessListener<MLIdCard>() {
  3.    public void onSuccess(MLIdCard idCard) {
  4.        // 检测成功的处理逻辑。
  5.    }
  6. }).addOnFailureListener(new OnFailureListener() {
  7.    public void onFailure(Exception e) {
  8.        // 识别失败,获取相关异常信息。
  9.        try {
  10.            MLException mlException = (MLException)e;
  11.            // 获取错误码,开发者可以对错误码进行处理,根据错误码进行差异化的页面提示。错误码信息可参见:机器学习服务错误码。
  12.            int errorCode = mlException.getErrCode();
  13.            // 获取报错信息,开发者可以结合错误码,快速定位问题。
  14.            String errorMessage = mlException.getMessage();
  15.       } catch (Exception error) {
  16.           // 转换错误处理。
  17.       }
  18.    }
  19. });

4. 识别完成,停止分析器,释放识别资源。

收起
自动换行
深色代码主题
复制
  1. if (analyzer != null) {
  2.    try {
  3.        analyzer.stop();
  4.    } catch (IOException e) {  
  5.        Log.d(TAG, "stop exception.");
  6.    }
  7. }


本页面可能包含由第三方许可的内容,请参考具体描述。