OCR在Android中使用tesseract

我正在尝试使用Tesseract在Android上构建OCR应用程序,但是当我保存图片时,应用程序崩溃了

这是我正在使用的代码:

public class Mainactivity extends AppCompatactivity {

    Bitmap image;
    private TessBaseAPI mTess;
    String datapath = "";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //init image
        image = BitmapFactory.decodeResource(getResources(),R.drawable.test_ara);

        //initialize Tesseract API
        String language = "ra";
        datapath = getFilesDir()+ "/tesseract/";
        mTess = new TessBaseAPI();

        checkFile(new File(datapath + "tessdata/"));

        mTess.init(datapath,language);
    }

    public void processImage(View view){
        String OCRresult = null;
        mTess.setImage(image);
        OCRresult = mTess.getUTF8Text();
        TextView OCRTextView = (TextView) findViewById(R.id.OCRTextView);
        OCRTextView.setText(OCRresult);
    }

    private void checkFile(File dir) {
        if (!dir.exists()&& dir.mkdirs()){
            copyfiles();
        }
        if(dir.exists()) {
            String datafilepath = datapath+ "/tessdata/ara.traineddata";
            File datafile = new File(datafilepath);

            if (!datafile.exists()) {
                copyfiles();
            }
        }
    }

    private void copyfiles() {
        try {
            String filepath = datapath + "/tessdata/ara.traineddata";
            AssetManager assetManager = getassets();

            InputStream instream = assetManager.open("tessdata/ara.traineddata");
            OutputStream outstream = new FileOutputStream(filepath);

            byte[] buffer = new byte[1024];
            int read;
            while ((read = instream.read(buffer)) != -1) {
                outstream.write(buffer,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();
        }
    }
}

这是日志错误:

2019-11-09 12:31:15.792 10381-10381/? E/e.myapplicatio: No implementation found for void com.example.myapplication.googlecode.tesseract.android.TessBaseAPI.nativeclassInit() (tried Java_com_example_myapplication_googlecode_tesseract_android_TessBaseAPI_nativeclassInit and Java_com_example_myapplication_googlecode_tesseract_android_TessBaseAPI_nativeclassInit__)
2019-11-09 12:31:15.793 10381-10381/? D/AndroidRuntime: Shutting down VM
2019-11-09 12:31:15.795 10381-10381/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.myapplication,PID: 10381
    java.lang.UnsatisfiedLinkError: No implementation found for void com.example.myapplication.googlecode.tesseract.android.TessBaseAPI.nativeclassInit() (tried Java_com_example_myapplication_googlecode_tesseract_android_TessBaseAPI_nativeclassInit and Java_com_example_myapplication_googlecode_tesseract_android_TessBaseAPI_nativeclassInit__)
        at com.example.myapplication.googlecode.tesseract.android.TessBaseAPI.nativeclassInit(Native Method)
        at com.example.myapplication.googlecode.tesseract.android.TessBaseAPI.<clinit>(TessBaseAPI.java:50)
        at com.example.myapplication.Mainactivity.onCreate(Mainactivity.java:40)
        at android.app.activity.performCreate(activity.java:7335)
        at android.app.activity.performCreate(activity.java:7326)
        at android.app.Instrumentation.callactivityOnCreate(Instrumentation.java:1275)
        at android.app.activityThread.performLaunchactivity(activityThread.java:3119)
        at android.app.activityThread.handleLaunchactivity(activityThread.java:3282)
        at android.app.servertransaction.LaunchactivityItem.execute(LaunchactivityItem.java:78)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
        at android.app.activityThread$H.handleMessage(activityThread.java:1970)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.activityThread.main(activityThread.java:7156)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:975)

为此,请指导我。

谢谢。

zhenzhengdeyu 回答:OCR在Android中使用tesseract

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3133557.html

大家都在问