Android Ocr文字识别 身份证识别 实时扫描

遇到一个需求需要扫描身份证,识别身份证号并进行查询,在网上百度需要用到文字识别技术,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卡中的 完整的
  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Android OCR文字识别可以通过使用Tesseract OCR库来实现。以下是实现OCR文字识别的步骤: 1. 在build.gradle文件中添加以下依赖项: ```gradle implementation 'com.rmtheis:tess-two:9.0.0' ``` 2. 将训练数据文件夹(tessdata)复制到项目的assets文件夹中。 3. 在MainActivity.java文件中添加以下代码: ```java // 导入Tesseract OCR库 import com.googlecode.tesseract.android.TessBaseAPI; public class MainActivity extends AppCompatActivity { // 声明OCR引擎 private TessBaseAPI mTess; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化OCR引擎 mTess = new TessBaseAPI(); String datapath = getFilesDir() + "/tesseract/"; String language = "eng"; mTess.init(datapath, language); // 获取ImageView、Button和TextView控件 ImageView imageView = findViewById(R.id.imgv); Button button = findViewById(R.id.btnOcr); TextView textView = findViewById(R.id.tvshow); // 设置Button的点击事件 button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 获取ImageView中的Bitmap对象 Bitmap bitmap = ((BitmapDrawable)imageView.getDrawable()).getBitmap(); // 将Bitmap对象传递给OCR引擎进行文字识别 mTess.setImage(bitmap); String result = mTess.getUTF8Text().replace(" ", "").toLowerCase(); // 将识别结果显示在TextView中 textView.setText(result); } }); } @Override protected void onDestroy() { super.onDestroy(); // 释放OCR引擎 mTess.end(); } } ``` 4. 在布局文件中添加一个ImageView、一个Button和一个TextView控件。 ```xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:layout_width="match_parent" android:layout_height="300dp" android:id="@+id/imgv"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/btnOcr" android:text="识别"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" android:id="@+id/tvshow" /> </LinearLayout> ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值