1

Android プロジェクトに Tesseract を実装しようとしていますが、OCR を完了しようとするとクラッシュします。

Tesseract のセットアップ方法は次のとおりです。

 TessBaseAPI baseApi = new TessBaseAPI();
        baseApi.setDebug(true);
        baseApi.init(imagePath, "eng");
        baseApi.setImage(bitmap);
        String recognizedText = baseApi.getUTF8Text();
        baseApi.end();

これは、TesseractAPI に渡す画像情報を設定する方法です。

        destination = new File(Environment.getExternalStorageDirectory(), name + ".png");

        imagePath = destination.getAbsolutePath();

        String name =   dateToString(new Date(),"yyyy-MM-dd-hh-mm-ss");

Logcat は次のとおりです。

10734-10734/www.rshdev.com.ocr E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: www.rshdev.com.ocr, PID: 10734
    java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/www.rshdev.com.ocr-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libpngt.so"
            at java.lang.Runtime.loadLibrary(Runtime.java:366)
            at java.lang.System.loadLibrary(System.java:988)
            at com.googlecode.tesseract.android.TessBaseAPI.<clinit>(TessBaseAPI.java:43)
            at www.rshdev.com.ocr.MainActivity.ocr(MainActivity.java:140)
            at www.rshdev.com.ocr.MainActivity.onActivityResult(MainActivity.java:86)
            at android.app.Activity.dispatchActivityResult(Activity.java:6192)
            at android.app.ActivityThread.deliverResults(ActivityThread.java:3570)
            at android.app.ActivityThread.handleSendResult(ActivityThread.java:3617)
            at android.app.ActivityThread.access$1300(ActivityThread.java:151)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1352)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5254)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
4

4 に答える 4

1

tesseract は OCR 関数でクラッシュしません。ライブラリをロードしようとしてクラッシュします。

java.lang.UnsatisfiedLinkError: ... couldn't find "libpngt.so"
...
at com.googlecode.tesseract.android.TessBaseAPI.<clinit>(TessBaseAPI.java:43)

しかし、私が持っているソースの43行目は次のとおりです。

    System.loadLibrary("tess");

したがって、 libtess.so を読み込もうとしますが、 libpngt.soで失敗を報告します。

また:

1) TessBaseAPI.java のソース コードが異なり、含まれておりSystem.loadLibrary("pngt");、そのライブラリがありません。.apk に含まれていることを確認してください。Eclipse には以前、誤った機能がありました。コードがライブラリに依存している場合、その依存関係を 1 つの場所でコンパイルし、別の場所で配信するように構成します。そして、IIRC .so 依存関係は 3 番目に指定されました。

2) libtess.so は動的リンクでコンパイルされます (静的リンクを使用してみてください)。

3)エミュレータで実行しようとしています(実際のデバイスで試してください)。

ご提供いただいた情報から言えることは以上です。

于 2015-09-23T09:24:52.157 に答える