我在Windows XP上使用tessnet2包装到Tesseract 2.04 Source, 将其配置为使用x86。
TessarctTest项目主要功能包含:
Bitmap bmp = new Bitmap(@"C:\temp\New Folder\dotnet\eurotext.tif");
tessnet2.Tesseract ocr = new tessnet2.Tesseract();
// ocr.SetVariable("tessedit_char_whitelist", "0123456789");
ocr.Init(@"C:\temp\tessdata", "eng", false);
// List<tessnet2.Word> r1 = ocr.DoOCR(bmp, new Rectangle(792, 247, 130, 54));
List<tessnet2.Word> r1 = ocr.DoOCR(bmp, Rectangle.Empty);
int lc = tessnet2.Tesseract.LineCount(r1);
当我尝试运行该程序时,它会在ocr.Init
中的以下行崩溃int result = m_myTessBaseAPIInstance->InitWithLanguage((char *)_tessdata.ToPointer(), NULL, (char *)_lang.ToPointer(), NULL, numericMode, 0, NULL);
任何人都有想法?
欣赏!
答案 0 :(得分:24)
对于仍然遇到问题的所有人,请确保您使用tessnet2下载正确的语言文件。
您想要Tesseract(2.00及以上)的英语语言数据,而不是Tesseract 3.01 版本的英语语言数据。我希望这可以节省你几个小时! :)
答案 1 :(得分:14)
对于那些试图在C#中使用Tessnet2程序集用于Tesseract OCR引擎的人以及遇到导致应用程序崩溃的Tesseract.Init()
方法问题的人 - 我发现了一个可能的原因。
首先,我假设你有如下文件:
bin\Debug\MyDotNetApp.exe
bin\Debug\tessdata\eng.DangAmbigs
bin\Debug\tessdata\eng.freq-dawg
bin\Debug\tessdata\eng.inttemp
bin\Debug\tessdata\eng.pffmtable
bin\Debug\tessdata\eng.unicharset
bin\Debug\tessdata\eng.user-words
bin\Debug\tessdata\eeng.word-dawg
正在使用它进行初始化:
using (var ocr = new tessnet2.Tesseract())
{
ocr.Init(null, "eng", false);
...
}
理论上应该有效。对我来说它确实有效 - 但它并没有突然间......即使我没有改变任何会影响它的东西。
对我来说,解决方法是搜索注册表(使用regedit)并删除对tesseract的所有引用。当我安装Tesseract 3.00安装程序(tesseract-ocr-setup-3.00.exe)时,我认为可能已经创建了一些可疑条目。
当我删除这些条目并重新启动时(我在删除reg条目之前尝试重新启动,仅供参考),一切都恢复了。
注册表项是否导致问题?谁知道。但它确实解决了我的问题。
答案 2 :(得分:3)
Project + Properties,Debug选项卡,向下滚动,勾选“启用非托管代码调试”复选框。现在您可以设置断点并对其进行调试。
如果您的IDE不支持混合模式调试,您可以使用this post中列出的技术附加调试器。
答案 3 :(得分:1)
答案 4 :(得分:1)
就我而言,dkr88的答案完成了这项工作,非常感谢。我认为当tesseract作为独立安装之前有一些依赖性损坏。此外,OCR质量似乎比MODI更好,尽管后者的倾斜校正在更极端的环境下工作(垂直文本)。
我现在对tessnet2非常满意。只有一个缺点:我需要更改我的app.config(如互联网上所述)并添加以下内容:
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>
答案 5 :(得分:1)
我的问题是我没有运行具有管理员权限的应用程序。
当我右键单击运行并选择本地管理员时,它可以工作。
答案 6 :(得分:0)
在我的情况下,我做了以下更改以使其工作:)
ocr.Init("D:\MyApplication\MyApplication\Debug", "eng", false);
到
ocr.Init(null, "eng", false);
答案 7 :(得分:0)
在我的情况下,我将tessdata文件设置为始终复制,然后它没有在init行崩溃。