在C#中无法加载DLL 'tesseract.dll'

3

我正在尝试按照这些步骤使用OCR:http://tesseract.patagames.com/help/html/baa0aa10-7805-4ae6-b6e9-9df777c4678c.htm

我遇到了一个未处理的异常,提示:

在 Patagames.Ocr.dll 中发生了类型为 'System.Exception' 的未处理异常。

额外信息:无法加载 DLL 'tesseract.dll':指定的模块无法找到。请确保将其复制到应用程序文件夹中。或者,您可以在TessBaseAPICreate方法中使用specificPath参数指定完整路径到 tesseract.dll 文件。

因此,我按照一些说明指定了完整路径,但仍然无法工作。

OcrApi.PathToEngine = @"d:\MyApp\tesseract.dll";
using (var api = OcrApi.Create())
{
    api.Init();
}

有没有其他方法可以让这个工作?


2
请您能否提供“确切”的错误信息。 - RB.
发生了类型为“System.Exception”的未处理异常,位于Patagames.Ocr.dll中。附加信息:无法加载DLL“tesseract.dll”:找不到指定的模块。 请确保将其复制到应用程序文件夹中。 或者,您可以在TessBaseAPICreate方法中使用specificPath参数指定tesseract.dll文件的完整路径。 - Nelson Francisco Ruiz
你的应用程序是32位、64位还是AnyCPU?你确定已经匹配了正确的DLL吗? - RB.
很明显 - 路径 d:\MyApp\tesseract.dll 无效。将 tesseract.dll 复制到 bin 文件夹并将 OcrApi.PathToEngine 更改为 = @"tesseract.dll"。 - blogprogramisty.net
tesseract.dll是一个.NET DLL还是传统的DLL?如果是后者,您是否尝试运行DEPENDS.EXE来检查它的依赖关系是否缺失? - Jens Meinecke
显示剩余5条评论
2个回答

2

来自文档:

有些情况下,库初始化程序无法找到tesseract.dll库进行加载。这种情况的典型例子是Web应用程序。Web应用程序在IIS工作目录中运行,不同于传统的应用程序。因此,在加载过程中,标准的LoadLibrary函数无法找到该dll。

在这种情况下,您必须通过此属性显式指定tesseract.dll文件的完整路径。

初始化算法如下:

  • 尝试从PathToEngine属性接收的路径加载dll。
  • 尝试从x64或x86文件夹加载dll。必要的文件夹根据进程编译模式和操作系统自动检测。
  • 尝试从调用初始化的进程的工作目录加载dll。
  • 尝试从放置调用初始化的程序集相同目录加载dll,否则将出现初始化错误。

http://tesseract.patagames.com/help/html/P_Patagames_Ocr_OcrApi_PathToEngine.htm


1
使用这种方法对我有效:

OcrApi.PathToEngine = @"d:\MyApp\tesseract.dll"; 

但主要问题是在构建之前将这些文件夹(tessdata、x64、x86文件)复制到您的项目根目录中(右键单击根项目>使用Windows资源管理器打开文件夹),并确保您已经在项目中添加了Patagames.Ocr引用,然后转到\bin\Debug\并在此处粘贴,完成后运行项目并看到魔术 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接