我正在Tesseract
尝试使用Linqpad
OCR软件。我做了以下步骤:
1)我使用
中的安装程序安装了Tesseract 3.02https://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
的方式有关。
如何解决此问题?
答案 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);
}
}
}