百度识别的调用
发布日期:2021-06-28 19:37:31
浏览次数:2
分类:技术文章
本文共 11635 字,大约阅读时间需要 38 分钟。
一.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() { @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 () { @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 () { @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 () { @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()); } }); }}
转载地址:https://blog.csdn.net/xxdw1992/article/details/110421236 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
感谢大佬
[***.8.128.20]2024年04月02日 10时10分03秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
L1-006 连续因子 (20 分)
2019-04-29
L1-008 求整数段和 (10 分)
2019-04-29
L1-009 N个数求和 (20 分)
2019-04-29
用Python的turtle库画太极图
2019-04-29
L1-010 比较大小 (10 分)
2019-04-29
L1-011 A-B (20 分)
2019-04-29
L1-059 敲笨钟 (20 分)(Python版)
2019-04-29
jquery 全选方法
2019-04-29
Jquery 复选框取值赋值
2019-04-29
$.format 无需使用+号连接字符串
2019-04-29
mysql 统计查询sql汇总
2019-04-29
mysql 导入导出表结构及数据命令汇总
2019-04-29
git 问题集锦
2019-04-29
Activiti - 新一代的开源 BPM 引擎
2019-04-29
CentOS7安装docker
2019-04-29
虚拟机安装CentOS7及网络配置
2019-04-29
漏洞复现Apache Solr Velocity远程代码执行
2019-04-29
docker下安装vulhub漏洞测试环境(centos7)
2019-04-29
Centos7安装Nessus教程
2019-04-29