Как связать файлы liblept и libtesseract в Linux

#c# #linux #.net-core #tesseract

#c# #linux #.net-ядро #тессеракт

Вопрос:

Я использую .net core c # код для извлечения текста из изображения с помощью Tesseract. Я добавил Tesseract 3.3.0 в свой проект с помощью команды пакета NuGet. Этот код отлично работает на моем компьютере с 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, Binder binder, 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

Ответ №1:

Первая ошибка, которую вы допустили, — это притвориться, что версия библиотеки tesseract 4.x является версией tesseract 3.x (путем создания символической ссылки). Это никогда не сработает. библиотека 3.x устарела и не поддерживается, поэтому лучшее, что вы можете сделать, это обновить ваше приложение до 4.x / 5.x tesseract.