#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.