我正在为 Android 构建一个在异步调用中使用 Tesseract 库的应用程序。执行 OCR 的方法效果很好,直到我在不同的线程上调用它。我得到的例外是:
*1: java.Lang.Unsatisfiedlinkerror: Library opencv_core not found; 试过 [/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 中使用的图像存储在静态类中。