Android端身份证识别
Android端身份证拍照识别
因为最近在做身份证识别的项目,用的是百度OCR文字识别,现在分享一下,希望可以帮助到大家。
支持的系统和硬件版本
系统:支持 Android 4.0(API Level 15)到Android7.0(API Level 25)系统。需要开发者通过minSdkVersion来保证支持系统的检测。
CPU架构:armeabi,arm64-v8a,armeabi-v7a,x86
机型:手机和平板皆可
硬件要求:要求设备上有相机模块。
网络:支持WIFI及移动网络,移动网络支持使用NET网关及WAP网关(CMWAP、CTWAP、UNIWAP、3GWAP)。
集成SDK
1.前往百度开发平台文字识别SDK下载页面下载Android SDK压缩包。
2.(必须)将下载包libs目录中的ocr-sdk.jar文件拷贝到工程libs目录中,并加入工程依赖。
3.(必须)将libs目录下armeabi,arm64-v8a,armeabi-v7a,x86文件夹按需添加到android studio工程src/main/jniLibs目录中。
添加必要的权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
运行效果图
代码
1.初始化orc,正确的Api Key和Secret Key需要去百度根据自己包名自行配置,如果配置错误,就无法使用orc文字识别
OCR.getInstance().initAccessTokenWithAkSk(new OnResultListener<AccessToken>() {@Override public void onResult(AccessToken accessToken) {Log.d("MainActivity", "onResult: " + accessToken.toString()); runOnUiThread(new Runnable() {@Override public void run() {Toast.makeText(MainActivity.this, "初始化认证成功", Toast.LENGTH_SHORT).show(); }}); }@Override public void onError(OCRError ocrError) {ocrError.printStackTrace(); Log.e("MainActivity", "onError: " + ocrError.getMessage()); runOnUiThread(new Runnable() {@Override public void run() {Toast.makeText(MainActivity.this, "初始化认证失败,请检查 key", Toast.LENGTH_SHORT).show(); }}); } }, getApplicationContext(), // 根据自己的包名,去百度云自行配置 "avXvTAghUgiG4k7k3jeB3vds", // 根据自己的包名,去百度云自行配置 "2yRmOb3x0cp5e1mdHaRKnIKx9qng3hpO");
2.调用拍摄的activity,OCR-UI模块提供了一套默认的UI,可以直接导入使用。
findViewById(R.id.idcardheadbutton).setOnClickListener(new View.OnClickListener() {@Override public void onClick(View v) {Intent intent = new Intent(MainActivity.this, CameraActivity.class); intent.putExtra(CameraActivity.KEY_OUTPUT_FILE_PATH, DataFileUtil.getSaveFile(getApplication()).getAbsolutePath()); intent.putExtra(CameraActivity.KEY_CONTENT_TYPE, CameraActivity.CONTENT_TYPE_ID_CARD_FRONT); startActivityForResult(intent, REQUEST_CODE_CAMERA); } });
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_CODE_CAMERA && resultCode == Activity.RESULT_OK) {if (data != null) {String contentType = data.getStringExtra(CameraActivity.KEY_CONTENT_TYPE); String filePath = DataFileUtil.getSaveFile(getApplicationContext()).getAbsolutePath(); if (!TextUtils.isEmpty(contentType)) {if (CameraActivity.CONTENT_TYPE_ID_CARD_FRONT.equals(contentType)) { // 身份证头像面信息 Intent intent = new Intent(MainActivity.this, DetailActivity.class); intent.putExtra("cardtype", IDCardParams.ID_CARD_SIDE_FRONT); intent.putExtra("cardimage",filePath); startActivity(intent); }}}}}
3.识别身份证信息
IDCardParams param = new IDCardParams(); param.setImageFile(new File(filePath)); // 设置身份证正反面 param.setIdCardSide(idCardSide); // 设置方向检测 param.setDetectDirection(true); // 设置图像参数压缩质量0-100, 越大图像质量越好但是请求时间越长。 不设置则默认值为20 param.setImageQuality(40); OCR.getInstance().recognizeIDCard(param, new OnResultListener<IDCardResult>() {@Override public void onResult(IDCardResult idCardResult) {Log.i("charge ID card", String.valueOf(idCardResult)); if (idCardResult != null) {if (idCardSide.equals("back")) {String signDate = ""; String expiryDate = ""; String issueAuthority = ""; if (idCardResult.getSignDate() != null) {signDate = idCardResult.getSignDate().toString(); }if (idCardResult.getExpiryDate() != null) {expiryDate = idCardResult.getExpiryDate().toString(); }if (idCardResult.getIssueAuthority() != null) {issueAuthority = idCardResult.getIssueAuthority().toString(); }mContent.setText("签发机关: " + issueAuthority + "\n\n" +"有效期限: " + signDate + "-" + expiryDate + "\n\n"); }else {String name = ""; String sex = ""; String nation = ""; String num = ""; String address = ""; if (idCardResult.getName() != null) {name = idCardResult.getName().toString(); }if (idCardResult.getGender() != null) {sex = idCardResult.getGender().toString(); }if (idCardResult.getEthnic() != null) {nation = idCardResult.getEthnic().toString(); }if (idCardResult.getIdNumber() != null) {num = idCardResult.getIdNumber().toString(); }if (idCardResult.getAddress() != null) {address = idCardResult.getAddress().toString(); }mContent.setText("姓名: " + name + "\n\n" +"性别: " + sex + "\n\n" +"民族: " + nation + "\n\n" +"身份证号码: " + num + "\n\n" +"住址: " + address + "\n\n"); }}
总结
只有身份证正面的识别,反面识别的代码被我去掉了,如果需要,可以联系我。
DEMO
https://download.csdn.net/download/wen_haha/10447864
GitHub
https://github.com/kongkongdaren/SfzDemo
希望大家点一波github的关注,谢谢大家!
Android端身份证识别相关推荐
- 移动端身份证识别,APP证件信息采集
移动端身份证识别app应用背景 移动端身份证识别app的应用,让需要实名制的应用更加方便,快捷,提高用户体验,为人们解决繁琐输入的问题,随着智能终端(智能手机及平板电脑)及移动通信(4G)的发展,人们 ...
- 移动端身份证识别技术:手机上进行身份验证
很多业务中都需要对身份证信息进行登记,一般通过人眼看完在手工录入或者是读卡器刷卡的方式进行登记记录,这两种种登记的方式,由于身份证上的关键信息也比较多,所以非常令人头疼,针对这一情况,基于Androi ...
- 安卓端身份证识别与云端服务器识别
安卓端的身份证识别已经不能满足实际的需求,和云端服务器挂接的方法应运而生,以往广泛应用方式为pc端的二代证读卡机具,但是单纯的二代证读卡方式已经不能应用到移动端的设备上,即使使用起来比较笨重,不像电话 ...
- Android实现身份证识别
Android实现身份证识别(印刷文字识别-身份证识别-阿里云) 在做实名认证的时候客户要求要自动识别身份证上的个人信息,我们使用的是阿里云的OCR印刷文字识别-身份证识别 阿里云的文档写的还是很清楚 ...
- 外地车 摄像头 android,Android端车牌识别可以用来实现摄像头扫描识别车牌?
原标题:Android端车牌识别可以用来实现摄像头扫描识别车牌? 随着汽车的需求暴增,车辆管理成为了城市管理的重中之重.Android端车牌识别技术已被广泛应用于城市智能交通.智慧小区的系统中,以往是 ...
- Android端文字识别
实现的功能: 文字识别.网络图片文字识别.身份证识别.银行卡识别.驾驶证识别.行驶证识别.车牌识别.营业执照识别.护照识别.数字识别.二维码识别.名片识别.手写识别.速算识别. 其中速算识别是接入的讯 ...
- android ocr 身份证识别
ocr opencv 想必做过程图像识别的同学们都对这两个词不陌生吧. ocr (optical character recognition ,光学字符识别) 是指电子设备(例如扫描仪或数码相机)检查 ...
- OCR--服务器端身份证识别系统的原理及应用
服务器端身份证识别系统即部署在服务器中的OCR SDK,私有本地服务器或云服务器均可,APP和业务系统可通过web service接口调用该识别服务,客户在设备端拍摄图像后上传,上传到已部署身份证识别 ...
- Android OpenCV 身份证识别实战
1.识别流程 手机获取身份证图片 计算机图片身份证号码所在的区 需要用到OpenCV,进行图像处理 OCR文本训练 记忆样本移植 图像文字识别 使用Tesseract-OCR文字 所以身份证别的关键: ...
- 移动端证件/身份证识别
随着时代的发展我们从前几年的互联网时代发展到现在的移动互联时代.每个人出门都会带各种证件特别是身份证,在很多时候都会用到,身份证识别的快慢直接影响整个业务流程的速度.于是基于OCR技术的的移动端身份证 ...
最新文章
- 我的超级大魔王Cookie
- SNAP实现(转自SuiFei)
- 如何自学python爬虫-python爬虫学习过程:
- iptables详细说明
- AI基础:一文看懂BERT
- ios AFNetworking 有用篇
- 这样用Docker 搭建 Jenkins 实现自动部署,你知道吗?
- 《YOLO算法笔记》(草稿)
- Java Servlet API中的forward()方法和redirect()方法的区别
- 软考计算机网络初级试题答案,2015计算机软考网络管理员模拟试题练习及答案...
- Linux的nat端口转换实例
- 使用反射复制一个JavaBean的对象
- 使用谷歌统计来跟踪网页加载时间
- hdoj4826Labyrinth【dp】
- 用python对股票期货做时序分析
- OpenGL纹理详解
- StreamX(1):StreamX概述
- WIFI WPS 种类
- Java写单机版五子棋
- 十个计算机快捷键,10个常用的电脑快捷键,学会了可以让你进一步提升工作效率...
热门文章
- python调用通达信函数大全_python通达信公式函数,通达信软件公式函数SMA
- sas和python哪个好学_Sas R和Python的比较 | 数据分析的工具选择
- 单片机pic的linux环境代替,pic单片机can总线协议收发编程
- 电脑怎么重装系统后显示器没有信号了
- java入门到精通6版pdf_java从入门到精通第6章.pdf
- 南阳理工acm449 不再爱你……
- 南阳理工ACM 题目252 01串
- 层次分析法模型(数学建模学习)
- 聚焦四个重组,构建基于IPD的卓越研发体系(3.0版)
- python下载股票数据_如何下载股票历史数据?