使用Tesseract OCR软件时,在Linqpad中找不到例外

时间:2015-12-07 09:57:56

标签: dll tesseract linqpad

我正在Tesseract尝试使用Linqpad OCR软件。我做了以下步骤:

1)我使用

中的安装程序安装了Tesseract 3.02

https://code.google.com/p/tesseract-ocr/downloads/detail?name=tesseract-ocr-setup-3.02.02.exe&

2)我在Linqpad中通过nuget添加了对Tesseract的引用,正好是以下包:tesseract-ocr的.Net包装器

3)我在PATH变量中添加了Tesseract二进制文件的路径,其中还包含两个本机dll库

4)我安装了Visual Studio x86&

中建议的x64运行时

https://github.com/charlesw/tesseract/wiki/Error-2

但是,当我尝试在tesseract中使用Linqpad时,我收到以下错误:

  

DllNotFoundException:找不到库" liblept168.dll"对于平台x86

我认为问题与在Linqpad中使用native dll的方式有关。

如何解决此问题?

1 个答案:

答案 0 :(得分:0)

LINQpad 和 Tesseract nuget 包之间的不兼容是由于 InteropDotNet 库在运行时加载本机程序集的方式。

您可以将以下方法添加到添加了 Tesseract nuget 包的 LINQpad 查询中,并且它应该允许 InteropDotNet 库找到它需要的本机程序集。

static void CopyTessLibraries(string tessVersion, string platform)
    {
        var destFolder = Path.Combine(Environment.CurrentDirectory,platform);
    
        Directory.CreateDirectory(destFolder);
    
        var tessNugetFolder = new LINQPad.ObjectModel.NuGetReference("Tesseract")
                                    .GetPackageFolders()
                                    .First(folderName => folderName.Contains($@"Tesseract\{tessVersion}"));
    
        var platformFiles = Directory.GetFiles(Path.Combine(tessNugetFolder,platform));
        foreach (var file in platformFiles)
        {
            var fileInfo = new FileInfo(file);
            var destFile = Path.Combine(destFolder, fileInfo.Name);
            if (!File.Exists(destFile))
            {
                fileInfo.CopyTo(destFile, true);
            }
        }
    }