7

OCR を必要とする Android アプリに取り組んでいます。APIとしてTesseractを使用することにしましたが、このエラーが発生し続けます:

E/Tesseract(native): language=eng で Tesseract API を初期化できませんでした!

  1. 私はすでにファイル"eng.traineddata"をその場所にコピーしました。
  2. Android Studio 2.1.2 (SDK 23) を使用しています
  3. API 22 Android Lollipop 5.1.1 を搭載したデバイスでのテスト (マシュマロの権限の問題について読む)

私が使用しているコードは次のとおりです。

public void reads(View view) {

  TextView textView = (TextView) findViewById(R.id.textView);

  int rotation = 0;

  try {
    ExifInterface exifInterface = new ExifInterface(mCurrentPhotoPath);
    int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION,ExifInterface.ORIENTATION_NORMAL);

    switch (orientation){
      case ExifInterface.ORIENTATION_ROTATE_90: rotation = 90; break;
      case ExifInterface.ORIENTATION_ROTATE_180: rotation = 180; break;
      case ExifInterface.ORIENTATION_ROTATE_270: rotation = 270; break;
    }
  } catch(Exception e) {

  }

  int w = imageBitmap.getWidth();
  int h = imageBitmap.getHeight();

  if (rotation != 0) {
    Matrix matrix = new Matrix();
    matrix.preRotate(rotation);

    imageBitmap = Bitmap.createBitmap(imageBitmap,0,0,w,h,matrix,false);
  } else {
    imageBitmap = Bitmap.createBitmap(imageBitmap,0,0,w,h);
  }

  imageBitmap = imageBitmap.copy(Bitmap.Config.ARGB_8888,true);

  TessBaseAPI ReadIt = new TessBaseAPI();
  ReadIt.init("/storage/emulated/0/","eng");
  ReadIt.setImage(imageBitmap);

  String Text = ReadIt.getUTF8Text();

  if (Text!=null) textView.setText(Text);

}

build.gradle 依存関係で次の行を使用しました。

「com.rmtheis:tess-two:6.0.2」をコンパイルします

また、特定の指定されたディレクトリにダウンロードすることにより、 tessdataeng.traineddataという名前のフォルダーに直接コピーしました。

4

7 に答える 7

3

tess-twoを使用していますか?あなたのコードで:

TessBaseAPI ReadIt = new TessBaseAPI();
ReadIt.init("/storage/emulated/0/","eng");

"/storage/emulated/0/"path はデータ ファイルを指している必要があります。「tessdata」という名前のサブディレクトリが必要です。https://github.com/rmtheis/tess-two/blob/d7a45fd2e08b7ec315cd1e29d1a7e0c72fb24a66/tess-two/src/com/googlecode/tesseract/android/TessBaseAPI.java#L176を参照して ください。

詳しくはこちらをご覧ください: 言語 = eng で Tesseract API を初期化できませんでした!

于 2016-07-10T15:53:37.937 に答える
1

私はこれと同じ問題を抱えていましたが、問題は、マシュマロがアプリがストレージへの読み取り/書き込み許可を取得するための新しい方法を特に必要とすることでした. このブログ投稿は私の問題を解決しました。

私のメインアクティビティには次のものがあります。

@Override
protected void onCreate(Bundle savedInstanceState) {
    ...
    ...
    getStorageAccessPermissions(); // Request storage read/write permissions from the user
}

@TargetApi(23)
private void getStorageAccessPermissions() {
    int hasWriteStoragePermission = checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE);
    if (hasWriteStoragePermission != PackageManager.PERMISSION_GRANTED) {
        requestPermissions(new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE_WRITE_EXTERNAL_PERMISSIONS);
    }
}

REQUEST_CODE_WRITE_EXTERNAL_PERMISSIONS は、グローバルに宣言された整数定数です。

私がTessBaseAPIを拡張したクラスでは、実際にストレージにアクセスできることを確認するために、ロギングの目的で以下を追加しました。

/* Checks if external storage is available to at least write to and returns the path name */
private static String isExternalStorageWritable() {
    String state = Environment.getExternalStorageState();
    String retval = "External storage is not writable";
    if (Environment.MEDIA_MOUNTED.equals(state)) {
        retval = Environment.getExternalStorageDirectory().toString();
    }
    return retval;
}

/* Checks if external storage is available to at least read from and returns the path name */
private static String isExternalStorageReadable() {
    String state = Environment.getExternalStorageState();
    String retval = "External storage is not readable";
    if (Environment.MEDIA_MOUNTED.equals(state) ||
            Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
        retval = Environment.getExternalStorageDirectory().toString();
    }
    return retval;
}
于 2016-07-24T02:54:03.307 に答える