Tesseract ClickOnce 部署失败

Tesseract ClickOnce Deployment fails

我正在为一个小型研究项目使用 tesseract OCR 识别。 运行 并在本地测试它工作正常。不幸的是,当我使用 Tesseract OCR .NET Wrapper 时,部署 (WPF ClickOnce-Deployment) 出现问题。当我 运行 我的程序(安装后)时出现以下错误:

Exception has been thrown by the target of an invocation.
    at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
    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, Object[] activationAttributes, StackCrawlMark& stackMark)
   at System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
   at System.Activator.CreateInstance(Type type, Object[] args)
   at InteropDotNet.InteropRuntimeImplementer.CreateInstance[T]()
   at Tesseract.Interop.LeptonicaApi.Initialize()
   at Tesseract.Interop.TessApi.Initialize()
   at Tesseract.Interop.TessApi.get_Native()
   at Tesseract.TesseractEngine..ctor(String datapath, String language, EngineMode engineMode)
   at WindowsContextTracker.Helpers.OcrEngine..ctor()
   at WindowsContextTracker.Helpers.OcrEngine.GetInstance()
   at WindowsContextTracker.Daemon.RunContextRecognition(Object sender, EventArgs e)
   at System.Windows.Threading.DispatcherTimer.FireTick(Object unused)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)

我的代码:

var path = @"C:\ProgramData\myProgram\tessdata";
_tEngine = new TesseractEngine(path, "eng", EngineMode.Default);

我试过various combinations of the path(动态、静态)。在路径所在的位置,有一个目录tessdata,包含9个文件(eng.cube.bigrams、eng.traineddata等)。

对于解决我的问题的任何提示,我将不胜感激。谢谢!

很遗憾,我没有找到解决问题的好方法。 WPF ClickOnceDeployments 始终存储在用户 AppData 的 'temporary' 文件夹中。这是文件夹,您还需要(手动)复制 tessdata 文件夹以使 tesseract api 工作。然后,您也不需要再添加 tessdata 文件夹的路径。在我看来,这条路似乎行不通...

这不是真正的解决方案,而是我找到的唯一解决方法运行...因此,如果您知道更好的方法,请告诉我!

编辑:感谢 Sicos1977(在 Github), I found a solution to this second problem. He pointed me to a Whosebug page 上我学会了如何在安装过程中将整个文件夹复制到安装位置。