Android Studio + Tesseract 详细配置教程

匿名 (未验证) 提交于 2019-12-02 23:51:01

1、创建 Project

2、配置

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

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

     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />     <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

git 地址

4、测试

 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、参考

https://blog.csdn.net/qq_33440246/article/details/78654871

https://blog.csdn.net/danfengw/article/details/79231201

文章来源: https://blog.csdn.net/qq_32220889/article/details/97018655
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!