文字認識をしたい
androidStudioでファイルに保存してある画像から文字認識を行うアプリを作っています。
実際に起動するところまではできたのですが、
ファイル一覧から画像を選択するとアプリが落ちてしまいます。
数字だけでも読めるようにしたいです。
該当のソースコード
java
1package com.example.image_view; 2 3import androidx.activity.result.ActivityResultLauncher; 4import androidx.activity.result.contract.ActivityResultContracts; 5import androidx.appcompat.app.AppCompatActivity; 6 7import android.app.Activity; 8import android.content.Intent; 9import android.graphics.Bitmap; 10import android.graphics.BitmapFactory; 11import android.net.Uri; 12import android.os.Bundle; 13import android.os.ParcelFileDescriptor; 14import android.text.method.ScrollingMovementMethod; 15import android.view.View; 16import android.widget.ImageView; 17import android.widget.TextView; 18 19import com.googlecode.tesseract.android.TessBaseAPI; 20 21import java.io.File; 22import java.io.FileDescriptor; 23import java.io.FileNotFoundException; 24import java.io.FileOutputStream; 25import java.io.IOException; 26import java.io.InputStream; 27import java.io.OutputStream; 28 29public class MainActivity extends AppCompatActivity { 30 private ImageView imageView; 31 private TextView textView; 32 33 static final String DEFAULT_LANGUAGE = "eng"; 34 static String traineddata = "/tessdata/"+DEFAULT_LANGUAGE+".traineddata"; 35 TessBaseAPI tessBaseAPI; 36 String filepath; 37 38 @Override 39 protected void onCreate(Bundle savedInstanceState) { 40 super.onCreate(savedInstanceState); 41 setContentView(R.layout.activity_main); 42 imageView = findViewById(R.id.image_view); 43 textView = findViewById(R.id.textView); 44 textView.setMovementMethod(new ScrollingMovementMethod()); 45 46 47 48 findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() { 49 @Override 50 public void onClick(View v) { 51 Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); 52 intent.addCategory(Intent.CATEGORY_OPENABLE); 53 intent.setType("image/*"); 54 activityResultLauncher.launch(intent); 55 } 56 }); 57 58 } 59 60 private void checkFile(File file) { 61 if (!file.exists() && file.mkdirs()){ 62 copyFiles(); 63 } 64 if(file.exists()) { 65 String datafilepath = filepath+ traineddata; 66 File datafile = new File(datafilepath); 67 68 if (!datafile.exists()) { 69 copyFiles(); 70 } 71 } 72 } 73 74 private void copyFiles() { 75 try { 76 String datapath = filepath + traineddata; 77 InputStream instream = getAssets().open(traineddata); 78 OutputStream outstream = new FileOutputStream(datapath); 79 80 byte[] buffer = new byte[1024]; 81 int read; 82 while ((read = instream.read(buffer)) != -1) { 83 outstream.write(buffer, 0, read); 84 } 85 86 outstream.flush(); 87 outstream.close(); 88 instream.close(); 89 90 File file = new File(datapath); 91 if (!file.exists()) { 92 throw new FileNotFoundException(); 93 } 94 } catch (Exception ex) { 95 ex.printStackTrace(); 96 } 97 } 98 99 private final ActivityResultLauncher<Intent> activityResultLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), 100 result -> { 101 if (result.getResultCode() == Activity.RESULT_OK) { 102 Bitmap bmp = null; 103 if (result.getData() != null) { 104 Uri uri = null; 105 uri = result.getData().getData(); 106 107 try { 108 bmp = getBitmapFromUri(uri); 109 imageView.setImageBitmap(bmp); 110 } catch (IOException e) { 111 e.printStackTrace(); 112 } 113 } 114 filepath = getFilesDir() + "/tesseract/"; 115 tessBaseAPI = new TessBaseAPI(); 116 checkFile(new File(filepath + "tessdata/")); 117 tessBaseAPI.init(filepath, DEFAULT_LANGUAGE); 118 119 tessBaseAPI.setImage(bmp); 120 String res = tessBaseAPI.getUTF8Text(); 121 textView.setText(res); 122 } 123 }); 124 125 126 private Bitmap getBitmapFromUri(Uri uri) throws IOException { 127 ParcelFileDescriptor parcelFileDescriptor = 128 getContentResolver().openFileDescriptor(uri, "r"); 129 FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor(); 130 Bitmap image = BitmapFactory.decodeFileDescriptor(fileDescriptor); 131 parcelFileDescriptor.close(); 132 return image; 133 } 134 135}
試したこと
実装するものとは別のスマホだと文字認識をすることができたのですが、文字認識の設定言語を英語(eng)にすると選択するところで落ちるようになってしまいました。
補足情報(FW/ツールのバージョンなど)
文字認識はtess-two:9.1.0を使用しています。
実装したいタブレットはLAVIE社のPC-T1295DASを使用しています。OSはandroid11です
また、テスト用に使用したスマホはXperia5ⅢでOSはAndroid12です。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。