找回密码
 立即注册

QQ登录

只需一步,快速开始

druidAAAA

注册会员

11

主题

36

帖子

95

积分

注册会员

积分
95
druidAAAA
注册会员   /  发表于:2017-1-11 18:00  /   查看:7056  /  回复:13
背景:
   我通过.net调用OCR引擎来分析图片,  之前试过 Advantage引擎, 能用但是识别不出我想要的图片
   然后我想试试 Profession 引擎.
   引用里面已经引用了 Forms.OCR.Professiton

问题:
代码编译没错, 而在识别的时候出现一个奇怪的错误:

   System.IO.FileNotFoundException”类型的未经处理的异常在 mscorlib.dll 中发生
   其他信息: 未能找到文件“C:\Users\Administrator\AppData\Local\Temp\20018b3cf3b04c1abc4a78d92f7de4fc.tmp”。



初始化代码:
public OCR()
        {
            if (!licenseSet)
                SetLeadToolsLC();

            //ocrEngine =  OcrEngineManager.CreateEngine(OcrEngineType.Advantage, true);
            ocrEngine = OcrEngineManager.CreateEngine(OcrEngineType.Professional, true);

            // Start the engine using default parameters
            //ocrEngine.Startup(null, null, null, @"C:\LEADTOOLS 19\Bin\Common\OcrAdvantageRuntime");
            ocrEngine.Startup(null, null, null, @"C:\LEADTOOLS 19\Bin\Common\OcrProfessionalRuntime");

        }


出错的代码段:  (运行时错误)
public string Read(System.IO.MemoryStream img)
        {
            // Create an OCR document
            using (IOcrDocument ocrDocument = ocrEngine.DocumentManager.CreateDocument())
            {
                // Add a page to the document
                img.Position = 0;
                IOcrPage ocrPage = ocrDocument.Pages.AddPage(img, null);

                // Recognize the page
                // Note, Recognize can be called without calling AutoZone or manually adding zones. The engine will
                // check and automatically auto-zones the page
                ocrPage.Recognize(null);

                System.IO.MemoryStream stream = new System.IO.MemoryStream();
                ocrDocument.Save(stream, DocumentFormat.Text, null);

                byte[] buff = stream.ToArray();
                string rsl = System.Text.Encoding.Default.GetString(buff);

                return rsl;
            }
        }


请问这是因为什么原因呢?  似乎少了一个文件
但是用 Advatange 引擎则正常.

多谢前辈们

13 个回复

倒序浏览
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-1-12 10:41:42
沙发
看到好像是找不到临时文件,
逐行调试的话具体是哪一行报错,ocr引擎是正常启动了已经
回复 使用道具 举报
druidAAAA
注册会员   /  发表于:2017-1-12 14:07:14
板凳
Richard.Ma 发表于 2017-1-12 10:41
看到好像是找不到临时文件,
逐行调试的话具体是哪一行报错,ocr引擎是正常启动了已经

是在调用到  ocrDocument.Save(stream, DocumentFormat.Text, null);
的时候出错的
说少了个临时文件, 我很是不解
(副图)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-1-12 16:04:06
地板
按照代码在这边测试没有问题,如果确实无法解决的话,可以把你的demo和图片传上来,这边做重现
回复 使用道具 举报
druidAAAA
注册会员   /  发表于:2017-1-12 16:20:18
5#
Richard.Ma 发表于 2017-1-12 16:04
按照代码在这边测试没有问题,如果确实无法解决的话,可以把你的demo和图片传上来,这边做重现

因为是公司的, 我要想想办法看怎么传才不违规,
先多谢版主不厌其烦的讲解测试
我还问下, 这个文件难道在你们的硬盘中存在吗?
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-1-12 17:20:06
6#
缓存文件,这个应该是MemoryStream产生的,所以也是在save 的时候报错,可能每个机器确实不一样
回复 使用道具 举报
druidAAAA
注册会员   /  发表于:2017-1-13 11:28:27
7#
本帖最后由 druidAAAA 于 2017-1-13 11:31 编辑
Richard.Ma 发表于 2017-1-12 17:20
缓存文件,这个应该是MemoryStream产生的,所以也是在save 的时候报错,可能每个机器确实不一样

我重装了LEADTOOLS后
诡异地...... 错误变成了这个

我初步猜测是LEADTOOLS和我电脑八字不合
有没可能绕过这句
ocrDocument.Save(stream, DocumentFormat.Text, null);
输出MemoryStream?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
druidAAAA
注册会员   /  发表于:2017-1-13 14:33:35
8#
本帖最后由 druidAAAA 于 2017-1-13 16:11 编辑
Richard.Ma 发表于 2017-1-12 16:04
按照代码在这边测试没有问题,如果确实无法解决的话,可以把你的demo和图片传上来,这边做重现

我做个了测试版本的程序发上来.
请直接解压就可以用了.

包括:
1) .zip的源程序
2) 放在"c:\"下的test.pnp
3) 源程序里面为了混合编程模式而修改过的 app.config
     加了代码
      <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v2.0.50727"/>
     </startup>

使用方法:
我在OCR类里面设置了一个断点,  在断点前读取 c:\test.pnp, 然后分析
在OCR类里面的初始函数可以设置使用 Advantage或Professional引擎

回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-1-13 14:39:23
9#
如果是要得到文档的话,可以选择保存为想要的格式的文档
如果只是要得到文字结果的话可以参考\LEADTOOLS 19\Examples\DotNet\CS\OcrMultiEngineDemo

这个功能以及对应的源代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
druidAAAA
注册会员   /  发表于:2017-1-13 14:52:08
10#
Richard.Ma 发表于 2017-1-13 14:39
如果是要得到文档的话,可以选择保存为想要的格式的文档
如果只是要得到文字结果的话可以参考\LEADTOOLS 1 ...

不要文档, 我只要读取出string, 因为我的程序需要1秒扫描10次左右, 需要效率.
我把源代码发上来啦, 在上面
请过目
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部