質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Tesseract

Tesseractは、Googleが提供しているオープンソースのOCRエンジンです。機械学習があり60以上の言語に対応でき、日本語の文字認識も可能です。さらに精度を上げることもできます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

1205閲覧

AndroidStudioを用いた文字認識アプリ

Rinsia

総合スコア10

Tesseract

Tesseractは、Googleが提供しているオープンソースのOCRエンジンです。機械学習があり60以上の言語に対応でき、日本語の文字認識も可能です。さらに精度を上げることもできます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

2クリップ

投稿2022/06/28 05:59

文字認識をしたい

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です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

自己解決したので上げます。
tesseractの言語データを指定しているところ

java

1 static String traineddata = "/tessdata/"+DEFAULT_LANGUAGE+".traineddata";

上記の場所の/tessdata/の先頭のスラッシュを省いたところ正常に動作しました。
どうやらファイル指定の方法がおかしかったようです。

投稿2022/07/15 05:47

Rinsia

総合スコア10

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問