Tesseract “托管”已退出_解决方案

       Tesseract “托管”已退出的现象出现在Vs2008建立的控制台应用程序中,具体表现为:编译过程中不报错,运行时有一个黑框一闪而过,输出框显示”‘托管’已退出,返回值为1“,在ocr.Init之后的语句添加断点时无法正常进入调试状态。

       昨晚用在NydusVPN中的签到积分换取了3天免费使用时间,今天我便开始在Google code中学习Tesseract的相关资料,因为时间短暂,所以倍感珍惜,将能下载的相关程序,语言包等资料都先进行下载,然后再根据名称的吸引力依次学习。在学习过程中,打开并运行了很多个Tesseract相关的VS工程,并且尝试安装了Tesseract3的安装档。一番瞎折腾后,我开始准备尝试用新下载的中文语言包验证Tesseract识别中文的能力,这时问题来了:昨天还能正常运行的程序出现了”托管”问题,得不到结果,无法正常设置断点调试。


       接下来,我就删除工程,重启电脑,新建工程反复重试,结果都一样;后来我卸载Tesseract3,用360清理电脑与注册表垃圾,重启,新建,还是依旧。于是我开始遍寻网络寻找良方,有的人说要取消“启用非托管代码调试”,无效;有人说要手动关闭相关进程再试,无效;更有甚者,有人说要重装VS,重装系统,这个太狠,我没试。

       后来终于在某个角落看到有人提到要手动删除Tesseract相关的注册表信息,于是我将Tesseract与tessnet2所有相关的注册表信息全部删除,重启电脑,然后问题就解决了。原因如下所述:The problem is that if you have Tesseract installed there is an environment variable set (TESSDATA_PREFIX)which contains the path of the tessdata. To use your own path it is
necessary to uninstall Tesseract and delete the environment variable.

       结论:1.ocr.Init初始化不成功会造成”托管”问题,初始化不成功一般是因为语言包路径不对或版本不匹配。所以Tesseract3卸载并用360清除注册表时,360并未清除相关部分,这件事告诉我:以后如果已经怀疑到注册表,那么一定要亲自检查注册表相关信息是否确实已被删除。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Fork me on GitHub