问题描述
我正在使用.net core C#代码使用Tesseract从图像中提取文本。我已使用NuGet软件包命令将Tesseract 3.3.0添加到我的项目中。这段代码在我的Windows机器上运行正常。但是,这在Linux计算机上失败。经过互联网研究后,我知道需要链接 liblept 和 libtesseract 文件。因此,我在下面进行链接文件的操作。
ln -s /usr/lib/x86_64-linux-gnu/liblept.so.5 /xxx/yyy/zzzz/project/x64/liblept1753.so
ln -s /usr/lib/x86_64-linux-gnu/libtesseract.so.4 /xxx/yyy/zzzz/project/x64/libtesseract3052.so
但是我仍然遇到错误。
+++++++StackTrace+++++++
at System.RuntimeMethodHandle.InvokeMethod(Object target,Object[] arguments,Signature sig,Boolean constructor,Boolean wrapExceptions)
at System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr,Binder binder,Object[] parameters,CultureInfo culture)
at System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr,Object[] args,CultureInfo culture)
at InteropDotNet.InteropRuntimeImplementer.CreateInstance[T]()
at Tesseract.Interop.TessApi.Initialize()
at Tesseract.Interop.TessApi.get_Native()
at Tesseract.TesseractEngine..ctor(String datapath,String language,EngineMode engineMode,IEnumerable`1 configFiles,IDictionary`2 initialOptions,Boolean setonlyNonDebugVariables)
at Controller.OCRImage(String image_path,Int32 page_id,String page_img_path) in Controller.cs:line 710
+++++++InnerException+++++++
System.Exception: dlsym: /xxx/yyy/zzzz/project/x64/libtesseract3052.so: undefined symbol: TesspDFRendererCreateTextonly
at InteropDotNet.UnixLibraryLoaderLogic.GetProcAddress(IntPtr libraryHandle,String functionName)
at InteropDotNet.LibraryLoader.GetProcAddress(IntPtr dllHandle,String name)
at InteropRuntimeImplementer.TessApiSignaturesInstance.TessApiSignaturesImplementation..ctor(LibraryLoader loader)
+++++++Data+++++++
System.Collections.ListDictionaryInternal
+++++++Source+++++++
System.Private.CoreLib
+++++++HResult+++++++
-2146232828
+++++++TargetSite+++++++
System.Object InvokeMethod(System.Object,System.Object[],System.Signature,Boolean,Boolean)
+++++++Message+++++++
Exception has been thrown by the target of an invocation.
+++++++HelpLink+++++++
下面是实际错误,不确定如何继续。 我被困在这里,任何帮助将不胜感激。
/xxx/yyy/zzzz/project/x64/libtesseract3052.so: undefined symbol: TesspDFRendererCreateTextonly
解决方法
您所做的第一个错误是假装tesseract库4.x版本是tesseract 3.x(通过创建符号链接)。这将永远行不通。 3.x库已过时,不支持,因此,您可以做的最好的事情就是将应用程序升级到4.x / 5.x tesseract。