在异步方法中使用Tesseract代码

时间:2012-09-19 09:18:53

标签: android asynchronous xamarin.android tesseract

我正在为Android构建一个在异步调用中使用Tesseract库的应用程序。 执行OCR的方法很有效,直到我在另一个线程上调用它。我得到的例外是:

  

* 1:java.Lang.Unsatisfiedlinkerror:未找到库opencv_core;试过[/vendor/lib/libopencv_core.so,/system/lib/libopencv_core.so]

     

2:System.TypeInitializationException:Emgu.CV.CvInvoke的类型初始值设定项引发了异常*

我正在使用的代码:

protected override void OnStart()
{
    base.OnStart();
    ImageView testimage = FindViewById<ImageView>(Resource.Id.TestImage);
    testimage.SetImageBitmap(ScanImage);

    ThreadPool.QueueUserWorkItem(state => {
        PerformOCR();
    });
}

protected void PerformOCR() //object state
{
    //Get the tesseract directory
    Java.IO.File myDir = Android.OS.Environment.ExternalStorageDirectory;
    Tesseract _ocr = new Tesseract(myDir.ToString() + "/tesseract/", "eng", Tesseract.OcrEngineMode.OEM_TESSERACT_CUBE_COMBINED);

    //Image optimization
    Image<Gray, Byte> passport = new Image<Gray, Byte>(ScanImage);
    Image<Gray, float> sobel = passport.Sobel(1, 0, 5);
    sobel.Add(passport.Sobel(0, 1, 5));
    passport = passport.Add(sobel.Convert<Gray, byte>());           

    _ocr.Recognize(passport);
    string text = _ocr.GetText();
    RunOnUiThread(() => SpecificationsText.Text = text); 
}

OCR中使用的图像存储在静态类中。

0 个答案:

没有答案