android+studio+catch,Android Studio + Tesseract 详细配置教程

本文详细介绍了在Android平台上实现OCR(光学字符识别)的步骤,包括创建项目、添加Tess-two依赖、配置字库文件、进行文字检测以及获取外部存储权限。通过示例代码展示了如何初始化TessBaseAPI,读取图片并获取识别结果,同时提供了字库文件的复制方法。
摘要由CSDN通过智能技术生成

1、创建 Project

2、配置

一、在 app 的 build.gradle 中添加依赖

8ebb5e32f18164d93702f9fe757dc5c3.png

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

41dd7085a5130afb55fdc1807d1b5488.png

7662a127a185801a18a5ed3ad9a25204.png

4、测试

20a4d229f22b89cf8fe0a6679aef6ad6.png

596b8b57cac4a4e71f50eac7a050395f.png

package com.example.imgpstrtest; import android.Manifest; import android.content.pm.PackageManager; import android.content.res.AssetManager; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Environment; import android.support.v4.app.ActivityCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.widget.Toast; import com.googlecode.tesseract.android.TessBaseAPI; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class MainActivity extends AppCompatActivity { /* mDataPath 是字库在手机上的存储位置 */ private String mDataPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/tessdata/"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getStorageAccessPermission(); // 获取权限 File parentfile = new File(mDataPath); if (!parentfile.exists()){ // 确保路径存在 parentfile.mkdir(); } copyFiles(); // 复制字库到手机 String lang = "chi_sim+eng"; // 使用简体中文 + 英文检测 TessBaseAPI mTess = new TessBaseAPI(); mTess.init(Environment.getExternalStorageDirectory().getAbsolutePath(), lang); // 初始化,第一个参数为 mDataPath 的父目录 Long starttime = System.currentTimeMillis(); // 检测开始时间 String OCRresult = null; Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.nine); // 获取测试图片 mTess.setImage(bitmap); OCRresult = mTess.getUTF8Text(); // 拿到字符串结果 Long endtime = System.currentTimeMillis(); // 检测结束时间 Log.e("test", OCRresult); Log.e("test", (endtime - starttime) + " ms"); } private void copyFiles() { String[] datafilepaths = new String[]{mDataPath + "/chi_sim.traineddata", mDataPath + "/eng.traineddata"}; // 拷两个字库过去 for (String datafilepath : datafilepaths) { copyFile(datafilepath); } } private void copyFile(String datafilepath) { try { String filepath = datafilepath; String[] filesegment = filepath.split(File.separator); String filename = filesegment[(filesegment.length - 1)]; // 获取字库文件名 AssetManager assetManager = getAssets(); InputStream instream = assetManager.open(filename); // 打开字库文件 OutputStream outstream = new FileOutputStream(filepath); byte[] buffer = new byte[1024]; int read; while ((read = instream.read(buffer)) != -1) { outstream.write(buffer, 0, read); } outstream.flush(); outstream.close(); instream.close(); File file = new File(filepath); if (!file.exists()) { throw new FileNotFoundException(); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } private void getStorageAccessPermission() { if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { // 没有获得授权,申请授权 if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { Toast.makeText(MainActivity.this, "请先授权!", Toast.LENGTH_LONG).show(); } else { // 不需要解释为何需要该权限,直接请求授权 ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); } } } }

5、参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值