遇到一个需求需要扫描身份证,识别身份证号并进行查询,在网上百度需要用到文字识别技术,ocr tess-two,看到网上有关于中英文实时扫描和手机号实时扫描的功能,于是在这两者的基础上进行了改进,感谢顾_小白和Si_Kang的贡献,基于分享的思想,将本次的开发思路写出来,以供大家参考。
顾_小白 地址:https://blog.csdn.net/g_ying_jie/article/details/73849492
Si_kang地址:https://blog.csdn.net/mr_sk/article/details/72877492
我的Demo下载地址:https://download.csdn.net/download/weixin_41632509/10324727
先来看一下效果,图片中身份证仅供学习参考使用,不做其他用途。
用到的技术是tess-two,语言识别库chi_sim.traineddata
下载chi_sim.traineddata集成到自己代码中,地址:https://github.com/tesseract-ocr/tessdata
在自己的项目中,AndroidManifest.xml文件中加入如下权限配置,安卓6.0需要动态权限申请
<uses-permission android:name="android.permission.CAMERA" />
<!-- 声明使用Camera意图 -->
<uses-feature android:name="android.hardware.camera" />
<!-- 声明调用Camera自动对焦功能 -->
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
集成:
compile 'com.rmtheis:tess-two:7.0.0'
获取读写权限后把字库从项目的assets目录复制到手机存储中,注意存储的路径一定要包含tessdata目录,因为在TessBaseAPI初始化的时候回去查找该目录
/**
* 请求到权限后在这里复制识别库
*
* @param requestCode
* @param permissions
* @param grantResults
*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case 0:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
copyToSD(LANGUAGE_PATH, DEFAULT_LANGUAGE_NAME);
}
break;
default:
break;
}
}
/**
* 将assets中的识别库复制到SD卡中
*
* @param path 要存放在SD卡中的 完整的