文字识别(三) android中使用Tesseract实现文字识别

6 篇文章 1 订阅
1 篇文章 0 订阅

前两章介绍了如何搭建Tesseract和jTessBoxEditor环境制作样本和训练样本文件

 

本章介绍如何在android中使用训练好的xxx.traineddata

android办大事必备图

因为Tesseract使用C++实现的,在Android中不能直接使用,需要封装JavaAPI才能在Android平台中进行调用,这里我们直接使用TessTwo项目,tess-two是TesseraToolsForAndroid的一个git分支,使用简单

Tess-two在git上地址为:https://github.com/rmtheis/tess-two

Tess-two下载后,需要进行编译,本章节为简单起见,直接上build.gradle

implementation 'com.rmtheis:tess-two:8.0.0'

这个库使用非常简单,大体可以分为三步:

1.初始化并设置样本库路径

2.设置要识别的bitmap

3.返回识别结果

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";

    private TessBaseAPI tessBaseAPI;

    //传入路径
    private static final File PATH = new File(Environment.getExternalStorageState(), "data");
    //实际路径
    private static final File LOCAL_PATH = new File(PATH, "tessdata");

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        createLocalPath();

        //初始化BaseApi并设置识别路径
        tessBaseAPI = new TessBaseAPI();

        //传入路径为 /sdcard/data
        //通过观察源码发现,实际路径为/sdcard/data/tessdata/
        //故而应该把样本文件放在传入路径下的../tessdata/num.traineddata
        boolean num = tessBaseAPI.init(PATH.getAbsolutePath(), "num");

        if (num) {
            Log.i(TAG, "初始化成功");
        }
    }

    private void createLocalPath() {
        if (!LOCAL_PATH.exists()) {
            LOCAL_PATH.mkdirs();
        }
    }

    public void onClick(View view) {
        //传入等待识别的图片
        tessBaseAPI.setImage(new File(Environment.getExternalStorageDirectory(), "test.png"));

        //识别结果
        String utf8Text = tessBaseAPI.getUTF8Text();
        Log.i(TAG, "识别结果:" + utf8Text);

        //释放识别结果
        tessBaseAPI.clear();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();

        //释放tessBaseApi
        tessBaseAPI.end();
    }
}

因调用比较简单,以上代码拷过去就可以测试使用,前提是务必将识别样本文件放到指定位置

注:tess-two规定:样本文件必须存放在你传入的文件夹下的tessdata文件夹里面

 

本章内容到此结束。

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
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> ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值