OCR running error ....SOS !!!!!!!!!!!!!!!!!!!!

josxhn 2012-07-15 04:29:34
昨天加班到晚上11点也没搞定,急死了。。。

开发环境 Win7 + Office2007 + VisualStudio2008

其中 Office2007 已安装 MODI 组件,并且打过修复补丁,从 “Office工具” 中运行 Microsoft Office Document Imaging 识别 tif 图片中的汉字一切正常。

然后我在代码中引用了 MODI 对象进行图像文字识别,结果每次运行到 MODI.OCR(MODI.MiLANGUAGES.miLANG_CHINESE_TRADITIONAL , false , false); 就会报错: OCR running error...

百度谷歌了很多方法都没解决,比如修改计算机高级设置里的程序数据保护;还有说什么截图尺寸导致这个错误,我自己试验无论尺寸大小均会报此错误。

下面是报错代码


private void btnTest_Click(object sender , EventArgs e)
{
MODI.Document md = new MODI.Document();
// The Create method grabs the picture from disk snd prepares for OCR.Create
string strFileName = Environment.CurrentDirectory + "\\temp484.tif";
md.Create(strFileName);
// Do the OCR
//断点跟踪到这里报错
md.OCR(MODI.MiLANGUAGES.miLANG_CHINESE_TRADITIONAL , false , false);
//lx120715

// This string will contain the text.
string strText = String.Empty;

// Get the first (and only image)
MODI.Image image = (MODI.Image) md.Images[0];
// Get the layout
MODI.Layout layout = image.Layout;

// Loop through the words.
for (int j = 0 ; j < layout.Words.Count ; j++)
{
// Get this word.
MODI.Word word = (MODI.Word) layout.Words[j];
// Add a blank space to separate words.
if (strText.Length > 0)
{
strText += " ";
}
// Add the word.
strText += word.Text;
}
// Close the MODI.Document object.
md.Close(false);
// Create the dialog that displays
// the OCRed text.
ShowText st = new ShowText();
// The the dialog's text.
st.m_strOCRText = strText;
// Show the dialog.
st.ShowDialog();
}

...全文
918 点赞 收藏 12
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
u012557335 2014-04-12
ocr识别英文比较高! 但是识别中文繁体好像只有30%
回复
_haochen 2013-04-06
想请教一下,各位知道那种ocr的识别率比较高么,英文的?最好是for java 或者python的。
回复
zhzhzhchch 2013-03-20
不错的解决方案,对我很有帮助的,谢谢啦
回复
zhzhzhchch 2013-03-20
不错的解法方法,
回复
dhy8084 2012-12-20
楼主把我害惨了,试用你的方法,系统直接崩掉,启动就蓝屏,害我装了一天系统加软件,别误人子弟啊!
回复
josxhn 2012-10-29
不知道,那个项目停了。。。
回复
cjwlz 2012-10-09
我现在也遇到 OCR running error的问题了 ,就是当我截取识别区域较短时出现 OCR running error的问题,是不是跟开发环境有关系呢 求指导!
回复
sanmao3 2012-08-28
[align=center]
[/align]
回复
cjwlz 2012-08-26
md.OCR(MODI.MiLANGUAGES.miLANG_CHINESE_TRADITIONAL , false , false);这句改成:
md.OCR(MODI.MiLANGUAGES.miLANG_CHINESE_SIMPLIFIED, true, true);
得解~
回复
ToSurpassTesla 2012-07-16
嗯嗯!!很厲害!!想問一下樓主,你的那OCR能夠取識別中文嗎? 求教......
回复
artoriar 2012-07-15
LZ 不错!
回复
josxhn 2012-07-15
唉。。。今天加班到9:30终于解决了,发上来造福后人把。。。


由于直接执行Mircosoft Office Document Imaging 可以成功运行程序并进行抓图识别,而在VS代码中则不行,因此分析不会是MODI组件本身的问题;又将某确定的tif文件带入程序测试,故排除截图后生成临时文件的权限问题;推测可能是win7系统导致。

在网上查阅后得到线索,有可能是数据执行保护(DEP)阻碍了代码中MODI对象的运行,需要在计算机-高级-数据执行保护中进行修改,然而进行修改后问题依旧。又考虑到直接执行MODI并无问题,估分析可能是DEP对VS工程产生了阻碍。于是在刚才的地方解除对VS工程.exe的DEP保护,结果提示“该程序无法取消DEP”,可见关键问题在此!

于是继续查找DEP相关资料,找到文章《Windows_7下的DEP(数据执行保护)》,其中介绍了如何在win7下完全解除对所有程序的DEP保护,描述如下:

——我们可以使用微软提供的命令行工具bcdedit.exe来编辑BCD文件。我们在命令提示符下运行不带有任何参数的bcedit命令,可以看到当前的启动配置,如图所示显示了在Windows 7下运行bcdedit的结果,其中最后一行显示nx OptIn,表示当前的DEP保护级别为1,如果显示为OptOut则表示当前的EDP保护级别为2。如果我们要关闭EDP,只需将nx设置为Always0ff即可。在命令行下执行命令“bcdedit /set nx alwaysoff”,重启系统后Windows 7的EDP就关闭了。反之,如果要开启所有服务和应用程序的DEP,执行命令“bcdedit /set nx alwayson”就可以了。

最后执行完上述操作后,再运行vs工程,OCR running error就消失了!
回复
相关推荐
发帖
C#
创建于2007-09-28

10.6w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2012-07-15 04:29
社区公告

让您成为最强悍的C#开发者