百度识别的调用

一.AKSK初始化

二.代码的调用

public class MainActivity extends BaseActivity {
    @BindView(R.id.tv)
    TextView textView;
    private static final int REQUEST_CODE_CAMERA = 102;//
    private static final int REQUEST_CODE_DRIVING_LICENSE = 103;//驾驶证
    private static final int REQUEST_CODE_VEHICLE_LICENSE = 104;//行驶证

    @Override
    public int getLayoutId() {
        return R.layout.activity_main;
    }

    @Override
    public void doBusiness() {
        initPermission();
    }

    private void initPermission() {
        AndPermission.with(this).runtime().permission(Manifest.permission.WRITE_EXTERNAL_STORAGE,
                Manifest.permission.CAMERA).onDenied(data -> {
            /*禁止权限集合*/
            LogUtils.file("\n禁止权限集合:" + Arrays.toString(data.toArray()));
        }).start();
    }

    @OnClick({R.id.drivinglicense, R.id.driverlicense, R.id.bankcard, R.id.auto_idcard, R.id.auto_idcard_back, R.id.idcard_back, R.id.idcard})
    public void onClick(View v) {
        switch (v.getId()) {
            //行驶证
            case R.id.drivinglicense:
                Intent intent = new Intent(MainActivity.this, CameraActivity.class);
                intent.putExtra(CameraActivity.KEY_OUTPUT_FILE_PATH, FileUtil.getSaveFile());
                intent.putExtra(CameraActivity.KEY_CONTENT_TYPE, CameraActivity.CONTENT_TYPE_GENERAL);
                startActivityForResult(intent, REQUEST_CODE_VEHICLE_LICENSE);
                break;
            //驾驶证
            case R.id.driverlicense:
                Intent intent1 = new Intent(MainActivity.this, CameraActivity.class);
                intent1.putExtra(CameraActivity.KEY_OUTPUT_FILE_PATH, FileUtil.getSaveFile());
                intent1.putExtra(CameraActivity.KEY_CONTENT_TYPE, CameraActivity.CONTENT_TYPE_GENERAL);
                startActivityForResult(intent1, REQUEST_CODE_DRIVING_LICENSE);
                break;
            //银行卡
            case R.id.bankcard:
                Intent intent2 = new Intent(MainActivity.this, CameraActivity.class);
                intent2.putExtra(CameraActivity.KEY_OUTPUT_FILE_PATH, FileUtil.getSaveFile());
                intent2.putExtra(CameraActivity.KEY_CONTENT_TYPE, CameraActivity.CONTENT_TYPE_BANK_CARD);
                startActivityForResult(intent2, REQUEST_CODE_CAMERA);
                break;
            //身份证正面(自动识别)
            case R.id.auto_idcard:
                Intent intent3 = new Intent(MainActivity.this, CameraActivity.class);
                intent3.putExtra(CameraActivity.KEY_OUTPUT_FILE_PATH, FileUtil.getSaveFile());
                intent3.putExtra(CameraActivity.KEY_NATIVE_ENABLE, true);
                //KEY_NATIVE_MANUAL设置了之后CameraActivity中不再自动初始化和释放模型
                //请手动使用CameraNativeHelper初始化和释放模型,推荐这样做,可以避免一些activity切换导致的不必要的异常
                intent3.putExtra(CameraActivity.KEY_NATIVE_MANUAL, true);
                intent3.putExtra(CameraActivity.KEY_CONTENT_TYPE, CameraActivity.CONTENT_TYPE_ID_CARD_FRONT);
                startActivityForResult(intent3, REQUEST_CODE_CAMERA);
                break;
            //身份证反面(自动识别)
            case R.id.auto_idcard_back:
                Intent intent4 = new Intent(MainActivity.this, CameraActivity.class);
                intent4.putExtra(CameraActivity.KEY_OUTPUT_FILE_PATH, FileUtil.getSaveFile());
                intent4.putExtra(CameraActivity.KEY_NATIVE_ENABLE, true);
                intent4.putExtra(CameraActivity.KEY_NATIVE_MANUAL, true);
                intent4.putExtra(CameraActivity.KEY_CONTENT_TYPE, CameraActivity.CONTENT_TYPE_ID_CARD_BACK);
                startActivityForResult(intent4, REQUEST_CODE_CAMERA);
                break;
            //身份证反面
            case R.id.idcard_back:
                Intent intent5 = new Intent(MainActivity.this, CameraActivity.class);
                intent5.putExtra(CameraActivity.KEY_OUTPUT_FILE_PATH, FileUtil.getSaveFile());
                intent5.putExtra(CameraActivity.KEY_CONTENT_TYPE, CameraActivity.CONTENT_TYPE_ID_CARD_BACK);
                startActivityForResult(intent5, REQUEST_CODE_CAMERA);
                break;
            //身份证正面
            case R.id.idcard:
                Intent intent6 = new Intent(MainActivity.this, CameraActivity.class);
                intent6.putExtra(CameraActivity.KEY_OUTPUT_FILE_PATH, FileUtil.getSaveFile());
                intent6.putExtra(CameraActivity.KEY_CONTENT_TYPE, CameraActivity.CONTENT_TYPE_ID_CARD_FRONT);
                startActivityForResult(intent6, REQUEST_CODE_CAMERA);
                break;
            default:
                break;
        }
    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        String filePath = (String) SPUtils.get("temp", "");
        if (requestCode == REQUEST_CODE_CAMERA && resultCode == Activity.RESULT_OK) {
            if (data != null) {
                String contentType = data.getStringExtra(CameraActivity.KEY_CONTENT_TYPE);
                if (!TextUtils.isEmpty(contentType)) {
                    switch (contentType) {
                        case CameraActivity.CONTENT_TYPE_ID_CARD_FRONT://身份证正面
                            recIDCard(IDCardParams.ID_CARD_SIDE_FRONT, filePath);
                            break;
                        case CameraActivity.CONTENT_TYPE_ID_CARD_BACK://身份证背面
                            recIDCard(IDCardParams.ID_CARD_SIDE_BACK, filePath);
                            break;
                        case CameraActivity.CONTENT_TYPE_BANK_CARD://银行卡
                            recCreditCard(filePath);
                            break;
                    }
                }
            }
        }
        if (requestCode == REQUEST_CODE_VEHICLE_LICENSE && resultCode == Activity.RESULT_OK) {//行驶证
            recVehicleCard(filePath);
        }
        if (requestCode == REQUEST_CODE_DRIVING_LICENSE && resultCode == Activity.RESULT_OK) {//驾驶证
            recDrivingCard(filePath);
        }
    }

    /**
     * @author Longchengbin
     * @description 银行卡解析
     * @since 2020-12-1 09:17
     * @param filePath 需要识别图片的路径
     **/
    private void recCreditCard(String filePath) {
        BankCardParams param = new BankCardParams();// 银行卡识别参数设置
        param.setImageFile(new File(filePath));
        BaseDialog dialog = new WaitDialog.Builder(this).setMessage("正在识别银行卡").show();
        // 调用银行卡识别服务
        OCR.getInstance(this).recognizeBankCard(param, new OnResultListener<BankCardResult>() {
            @Override
            public void onResult(BankCardResult result) {
                dialog.dismiss();
                if (result != null) {
                    String type;
                    if (result.getBankCardType() == BankCardResult.BankCardType.Credit) {
                        type = "信用卡";
                    } else if (result.getBankCardType() == BankCardResult.BankCardType.Debit) {
                        type = "借记卡";
                    } else {
                        type = "不能识别";
                    }
                    textView.setText(getString(R.string.bankcardresult,
                            (!TextUtils.isEmpty(result.getBankCardNumber()) ? result.getBankCardNumber() : ""),
                            (!TextUtils.isEmpty(result.getBankName()) ? result.getBankName() : ""), type));
                }
            }

            @Override
            public void onError(OCRError error) {
                dialog.dismiss();
                LogUtils.e("银行卡失败原因:" + error.getMessage());
            }
        });
    }

    /**
     * @author Longchengbin
     * @description 身份证解析
     * @since 2020-12-1 09:19
     * @param idCardSide 身份证的正/反面
     * @param filePath 需要识别图片的路径
     **/
    private void recIDCard(String idCardSide, String filePath) {
        BaseDialog dialog = new WaitDialog.Builder(this).setMessage("正在解析身份证").show();
        IDCardParams param = new IDCardParams();
        param.setImageFile(new File(filePath));
        param.setIdCardSide(idCardSide);// 设置身份证正反面
        param.setDetectDirection(true);// 设置方向检测
        // 设置图像参数压缩质量0-100, 越大图像质量越好但是请求时间越长。 不设置则默认值为20
        param.setImageQuality(22);
        OCR.getInstance(this).recognizeIDCard(param, new OnResultListener<IDCardResult>() {
            @Override
            public void onResult(IDCardResult result) {
                dialog.dismiss();
                LogUtils.i("身份扫描结果:" + result.toString());
                if (idCardSide.equals(IDCardParams.ID_CARD_SIDE_FRONT)) {
                    String name = "";
                    String sex = "";
                    String nation = "";
                    String num = "";
                    String address = "";
                    if (result.getName() != null) {
                        name = result.getName().toString();
                    }
                    if (result.getGender() != null) {
                        sex = result.getGender().toString();
                    }
                    if (result.getEthnic() != null) {
                        nation = result.getEthnic().toString();
                    }
                    if (result.getIdNumber() != null) {
                        num = result.getIdNumber().toString();
                    }
                    if (result.getAddress() != null) {
                        address = result.getAddress().toString();
                    }
                    textView.setText(getString(R.string.idcardresult, name, sex, nation, num, address));
                } else {
                    textView.setText(getString(R.string.idcardbackresult, result.getSignDate(), result.getExpiryDate(),
                            result.getIssueAuthority()));
                }
            }

            @Override
            public void onError(OCRError error) {
                dialog.dismiss();
                LogUtils.e("身份证识别出错:" + error.getMessage());
                textView.setText(getString(R.string.idcarderror, error.getMessage()));
            }
        });
    }

    //驾驶证解析
    private void recDrivingCard(String filePath) {
        OcrRequestParams param = new OcrRequestParams();// 识别参数设置
        param.setImageFile(new File(filePath));// 设置image参数
        param.putParam("detect_direction", true);// 设置其他参数
        BaseDialog dialog = new WaitDialog.Builder(this).setMessage("正在解析驾驶证").show();
        // 调用驾驶证识别服务
        OCR.getInstance(this).recognizeDrivingLicense(param, new OnResultListener<OcrResponseResult>() {
            @Override
            public void onResult(OcrResponseResult result) {
                // 调用成功,返回OcrResponseResult对象
                dialog.dismiss();
                LogUtils.w("驾驶证返回的数据:" + result.getJsonRes());
                textView.setText(result.getJsonRes());
            }

            @Override
            public void onError(OCRError error) {
                dialog.dismiss();
                LogUtils.e("驾驶证失败原因:" + error.getMessage());
            }
        });
    }

    //解析行驶证
    private void recVehicleCard(String filePath) {
//        LogUtils.i("路径:" + filePath);
        OcrRequestParams param = new OcrRequestParams();
        param.setImageFile(new File(filePath));
        BaseDialog dialog = new WaitDialog.Builder(this).setMessage("正在解析行驶证").show();
        OCR.getInstance(this).recognizeVehicleLicense(param, new OnResultListener<OcrResponseResult>() {
            @Override
            public void onResult(OcrResponseResult result) {
                textView.setText(result.getJsonRes());
                dialog.dismiss();
                LogUtils.w("行驶证返回的数据:" + result.getJsonRes());
            }

            @Override
            public void onError(OCRError error) {
                // 调用失败,返回OCRError对象
                dialog.dismiss();
                LogUtils.e("行驶证失败原因:" + error.getMessage());
            }
        });
    }
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值