【安卓学习之第三方库】 身份证、银行卡、营业执照OCR识别

█ 【安卓学习之第三方库】身份证、银行卡、营业执照OCR识别

█ 相关文章:

- 
 ● 【安卓学习之第三方库】库的使用2-jar类库的使用(以dom4j为例)和升级(以极光推送为例)
 ● 【安卓学习之第三方库】 消息推送之极光推送
 ● 【安卓学习之第三方库】 消息推送之阿里云推送
 

█ 读前说明:

- 
 ● 本文通过学习别人写demo,学习一些课件,参考一些博客,’学习相关知识,如果涉及侵权请告知
 ● 本文只简单罗列相关的代码实现过程
 ● 涉及到的逻辑以及说明也只是简单介绍,主要当做笔记,了解过程而已

█ 身份证、银行卡识别集成:

- 
 ● 添加依赖库,添加so库

dependencies {
	implementation 'com.github.bumptech.glide:glide:3.7.0'// 显示图片
	implementation 'top.zibin:Luban:1.1.8'// 图片压缩
    implementation files('libs/XXXCardApi.jar')// 银行卡身份证识别SDK
}

● 产品初始化引擎

	private XXX_EngineAPI engine = new XXX_EngineAPI();// 实例化引擎
    private void initOCREngine() {
    	// 引擎初始化
        int status = engine.init(this, engine.getEngineTimeKey());
        if (status == 2) {
            Toast.makeText(this, "引擎过期", Toast.LENGTH_SHORT).show();
        } else if (status == 0) {
            Toast.makeText(this, "引擎初始化失败", Toast.LENGTH_SHORT).show();
        }
		// 参数初始化:设置账户,密码,打开小图、头像功能
		engine.setParam("account", "bdzhifu");
        engine.setParam("password", "123456789");
        engine.setParam("headimg", 1);
    }

● 开始身份证识别,启动摄像头

    Intent intent = new Intent(aty, XXX_CaptureActivity.class);
    intent.putExtra("engine", engine);
    intent.putExtra("tengineID ", 3);// 1-身份证正面/反面 3-银行卡正面 
    intent.putExtra("showCopyRightTxt ", "");
    startActivityForResult(intent, 1);

● 扫描识别的全图成功,回调

 @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        // 身份证
        if (requestCode == 1 && resultCode == XXX_CaptureActivity.IDCAD_OK && data != null) {    
            Bitmap takeimg = XXX_CaptureActivity.getBitmap();// 身份证照片(压缩后再提交服务器)
            XXX_CardInfo cardInfo = (XXX_CardInfo ) data.getSerializableExtra("cardinfo");// 身份证信息
            if (takeimg != null) {
                String outFileFolder = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getAbsolutePath();
                String outFilePath = System.currentTimeMillis() + ".jpg";
                try {
                	// 图片保存本地
                    File file = saveFile(takeimg, outFileFolder, outFilePath);
					// 图片压缩
                    Luban.with(this).load(file).setCompressListener(new OnCompressListener() {

                        @Override
                        public void onStart() {
                            // 显示加载提示框
                        }

                        @Override
                        public void onSuccess(File file) {
                       		// 拼接身份证照片based64码,等待提交到服务器
                            byte[] bytes = File2byte(file);
                            mCardBase64 = Base64.encodeToString(bytes, Base64.DEFAULT);
                            // 显示银行卡照片(全图)
                            Glide.with(aty).load(file).into(mCardImageView);
                            // 关闭加载提示框
                        }

                        @Override
                        public void onError(Throwable e) {
                            // 关闭加载提示框
                        }
                    }).launch();

                } catch (IOException e) {
                    e.printStackTrace();
                }
                // 图片识别后的信息,显示身份证信息,正面:名字、身份证号、住址,反面:有效期
	            if (cardInfo != null) {
	                mCardNameEditText.setText(cardInfo.getFieldString("name"));
	                ...
	            }
            } else {
                Toast.makeText(this, "识别失败", Toast.LENGTH_SHORT).show();
            }
        }
        // 银行卡
         else if (requestCode == 1 && resultCode == CaptureActivity.BANK_OK && data != null) {
            // 扫描识别的全图
            Bitmap takeimg = XXX_CaptureActivity.getBitmap();// 银行卡照片(压缩后再提交服务器)
            XXX_CardInfo cardInfo = (XXX_CardInfo ) data.getSerializableExtra("cardinfo");// 银行卡信息
            if (takeimg != null) {
                String outFileFolder = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getAbsolutePath();
                String outFilePath = System.currentTimeMillis() + ".jpg";
                try {
                	// 图片保存本地
                    File file = saveFile(takeimg, outFileFolder, outFilePath);
					// 图片压缩
                    Luban.with(this).load(file).setCompressListener(new OnCompressListener() {

                        @Override
                        public void onStart() {
                            // 显示加载提示框
                        }

                        @Override
                        public void onSuccess(File file) {
                       		// 拼接银行卡照片based64码,等待提交到服务器
                            byte[] bytes = File2byte(file);
                            mBase64 = Base64.encodeToString(bytes, Base64.DEFAULT);
                            // 显示银行卡照片(全图)
                            Glide.with(aty).load(file).into(imageView);
                            // 关闭加载提示框
                        }

                        @Override
                        public void onSuccess(File file) {
							// 拼接银行卡照片based64码,等待提交到服务器
                            byte[] bytes = File2byte(file);
                            mBankBase64 = Base64.encodeToString(bytes, Base64.DEFAULT);
                            // 显示银行卡照片(全图)
                            Glide.with(aty).load(file).into(mBankImageView);
                            // 关闭加载提示框
                        }

                        @Override
                        public void onError(Throwable e) {
                            // 关闭加载提示框
                        }
                    }).launch();


                } catch (IOException e) {
                    e.printStackTrace();
                }
	            // 图片识别后的信息,显示银行卡信息,卡号
	            if (cardInfo != null) {
	                mBankEditText.setText(cardInfo.getFieldString("BankNum").replace(" ", ""));
	            }
            } else {
                Toast.makeText(this, "识别失败", Toast.LENGTH_SHORT).show();
            }
        }
    }

● 将银行卡信息提交到服务器

拼接:("data:image/jpeg;base64," + mBankBase64)

● 费用说明

不管是否成功,调用一次0.05元。

█ 营业执照识别:

- 
 ● 根据营业执照图片获取信息

将营业执照的base64码传给服务器(图片记得压缩)
服务器识别后,返回:商户全称、法定代表人、统一社会信用代码、经营地址等信息

█ 其他工具类:

- 
 ● 将Bitmap转换成File

    public static File saveFile(Bitmap bm, String path, String fileName) throws IOException {
        File dirFile = new File(path);
        if (!dirFile.exists()) {
            dirFile.mkdir();
        }
        File file= new File(path, fileName);
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
        bm.compress(Bitmap.CompressFormat.JPEG, 80, bos);
        bos.flush();
        bos.close();
        return file;
    }

● 将File转换成byte

    public static byte[] File2byte(File file) {
        byte[] buffer = null;
        try {
            FileInputStream fis = new FileInputStream(file);
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            byte[] b = new byte[1024];
            int n;
            while ((n = fis.read(b)) != -1) {
                bos.write(b, 0, n);
            }
            fis.close();
            bos.close();
            buffer = bos.toByteArray();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return buffer;
    }

█ 相关资料:

- 
 ● 1.IdCardOCR: 身份证正反面识别,身份证扫描识别,二代身份证OCR识别,OCR极速识别身份证所有信息正反面均可。离线无需联网,极速秒扫。
 ● 2.百度文字识别: CR_identify: 身份证自动识别,银行卡识别,驾驶证识别,行驶证识别,根据百度文字识别 api 封装,能快速识别身份证信息,银行卡信息,驾驶证信息,行驶证信息,使用非常方便
 ● 3.AndroidOcrLibs: Android离线识别身份证、驾驶证、银行卡

转载请注明出处:
https://blog.csdn.net/ljb568838953/article/details/109852414

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值