[英]How to use Microsoft OCR Library ( Microsoft.Windows.Ocr ) in an ASP.Net MVC4 Web API Project?
有谁知道在服务器端 ASP.Net Web 应用程序(如 MV4 Web API)上引用Microsoft.Windows.Ocr
( WindowsPreview.Media.Ocr.dll
) 程序集的方法,并利用该程序集中的 OCR 功能来获取将照片图像作为输入并从中提取文本内容? 如果是,请在回答中提供详细说明。
我正在构建一个 Web 应用程序,它将图像上传到服务器(通过文件上传 UI 屏幕),然后使用OCR读取文本并在下一页上显示文本,就在上传的图像旁边。
由于大多数商业OCR库成本一只胳膊和长度( 超过$ 1,300个我最后一次检查),我想我可以尝试使用Microsoft OCR库Microsoft.Windows.Ocr
是免费的,似乎是非常简单和容易使用。
所以我尝试将Microsoft.Windows.Ocr Nuget 包安装到我的 ASP.Net MVC4 Web API 项目中,并且成功了。
之后,我查看了我的 MVC4 Web API 项目引用,令我惊讶的是,没有找到对Microsoft.Windows.Ocr.dll程序集的引用。
然后我尝试通过浏览到\\packages
文件夹中的该\\packages
来添加对 Microsoft.Windows.Ocr.dll 程序集的 x86 版本的引用,并从\\lib\\win81\\x86
选择了WindowsPreview.Media.Ocr.dll文件夹
注意:程序集名称是 WindowsPreview.Media.Ocr.dll 而不是 Microsoft.Windows.Ocr.dll ,不知道为什么!
当我这样做并单击“确定”时,我收到以下错误消息。
---------------------------
Microsoft Visual Studio
---------------------------
A reference to
'D:\TestProjects\packages\Microsoft.Windows.Ocr.1.0.0\lib\win81\x86\
WindowsPreview.Media.Ocr.dll' could not be added. Please make sure
that the file is accessible, and that it is a valid assembly
or COM component.
---------------------------
OK
---------------------------
然后我从Nuget 页面发现“支持的平台”只有Windows Phone 8、Windows Phone 8.1、Windows 8.1(仅限 Windows 应用商店应用)。
但是可以肯定,必须有一种方法可以在 ASP.Net 应用程序中的服务器端使用此OCR dll ?
Microsoft.Windows.Ocr
( WindowsPreview.Media.Ocr.dll
) 程序集的方法,并利用该程序集中的 OCR 功能来获取将照片图像作为输入并从中提取文本内容?**如果是,请在您的答案中提供详细说明。任何“黑客”和/或示例代码将不胜感激!
谢谢!!
如果您使用的是 Visual Studio 2015 和 Windows 10,则
微软.Windows.Ocr
已移至通用 Windows 平台。 它可以作为
视窗媒体文件
因此,您需要使用启用了 Windows 10 的工具升级您的 VS 2015。
我做了以下操作,并在我的 Web API 中添加了 Windows.Media.Ocr 作为参考。
注意:以下内容仅适用于 VS 2015 和 Windows 10。VS 2015 也应针对通用 Windows 平台(UWP) 进行更新。 检查此示例 OCR。
希望这可以帮助。 更新它已导入到我的参考中,但无法加载。 希望它为人们提供一些开始。 谢谢!。
您可以跳到下面的更新 2 以获得有效的解决方案。
它会抛出一个类型的负载异常。 话虽如此,我发帖是因为我正在尝试做同样的事情,但无法让项目运行。 以下是有关如何将 winrt api 导入非 Windows 应用程序项目的一些基本说明。
http://weblogs.thinktecture.com/cnagel/2012/10/calling-winrt-from-windows-desktop-apps.html
也不要尝试引用 dll,而是引用 winmd 文件。
这是一个引用 ocr 库的示例控制台应用程序,但是当您运行该解决方案时,它会引发类型加载异常。( https://github.com/Xandroid4Net/MicrsoftOcrConsoleApp )它应该可以轻松地从控制台应用程序移植到 asp。净应用。 我不知道如何修复类型加载异常,也许你可以做得比我更远。 如果您确实找到了解决方案,请发布。
更多的挖掘揭示了以下程序集绑定错误。 知道如何为进程设置包 ID 吗?
文件:WindowsPreview.Media.Ocr!WindowsPreview.Media.Ocr.OcrEngine,版本=255.255.255.255,Culture=neutral,PublicKeyToken=null,ContentType=WindowsRuntime.htm
文件内容:
* 组装活页夹日志条目 (12/1/2014 @ 11:48:01 PM) *
操作失败。 绑定结果:hr = 0x80073d54。 该进程没有包标识。
程序集管理器加载自:C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\clr.dll 在可执行文件 C:\\Users\\Wesley\\Documents\\Dev\\ConsoleApplication2\\Program.exe 下运行 --- 详细错误日志如下.
开始:Windows 运行时类型绑定。 END :进程没有包标识。 (来自 HRESULT 的异常:0x80073D54)
这是一个令人讨厌的解决方法,但它适用于我的 Windows 8.1 Surface Pro 3 平板电脑。 WebOcr 是一个 webforms,但它可以很容易地为 MVC 重构
1) 下载https://github.com/Xandroid4Net/CommandLineOcr 。 这是伪商店应用程序。
2) 构建并运行应用程序。 它似乎什么都不做。 没关系,它将使用我们需要的新密钥更新注册表。
3) 下载https://github.com/Xandroid4Net/WebOcr 。
4)在Webocr项目中找到OcrCommandLineCaller.cs。
5) 在 HKEY_CURRENT_USER\\Software\\Classes\\ActivatableClasses\\Package\\Some_Sort_Of_Guid_For_Your_APP\\Server\\App.App....\\AppUserModelId 找到注册表项
如果您需要更多帮助来查找注册表项,请参阅此 SO 问题。 IApplicationActivationManager::ActivateApplication 在 C# 中?
6) 使用在注册表项中找到的奇怪的 guid 应用程序标识符更新 OcrCommandLineCaller.cs 中的 appActiveManager.ActivateApplication 调用。
7) 在 default.aspx.cs 中,将 saveAsPath 替换为您机器上的路径。 在 Windows 商店应用程序中,有一个由 Windows.Storage.ApplicationData.Current.LocalFolder 表示的静态路径。 为简单起见,这是我保存图像的路径。
8) 将任何代码修改为您满意的内容,如果您有任何问题,请告诉我。
这是一个非常粗糙和讨厌的解决方案,但它确实有效。
几年来,我一直在使用与 MS Office 一起打包的 MODI 解决方案,并且对它非常满意(如果您购买了 Office,则它是免费的)。 当它停产时,我相当失望。 我试过 Tesseract ......我真的很想喜欢它,但发现它对于高质量的荷兰机器类型来说速度慢且不准确......和你一样,我无法证明在本质上是一个业余爱好项目上花费 200 美元以北.
经过绝望的搜索,这里有人指给我 TOCR(一种 Transym 产品)。 顿悟紧随其后。 ;-) 我想在这一点上我需要说我与 Transym 没有任何关联,是的,我支付了全价...... 60 英镑! (没有错别字... 60 英镑),其中包括增值税,共计 113 欧元。
它本质上是为集成商设计的(它包括一个扫描/查看器/OCR 应用程序,但这仅仅是一个演示——如果你购买了许可证,你就会得到它的源代码)。 API 已经过时(就 OCR 引擎而言,它是一个相当成熟的代码库),但它快速、稳定且出乎意料地准确。 不像 DokuStar 引擎或其他深奥的引擎那么准确,但对于我的应用程序(荷兰语和英语机器类型),它对各种价格超过 1000 美元的引擎都有自己的影响。 荷兰机器类型的识别准确度非常好(它不会手写)。 在我看来,就性价比而言,它简直是好得离谱。 至于 API:我围绕它编写了一个基本的 .NET 包装器以满足我的需要——这是在几个晚上完成的。
在他们的网站 ( http://www.transym.com/index.htm ) 上有一个 eval 版本。 不,如果你这样做,我不会得到任何钱;-)
我设法通过从 powershell 调用 DLL 来从 Web API 调用 OCR。 我还发现您不能并行调用此 DLL。
我花了几天时间,但这里是 repo。 可作为 nuget 和 Web API 使用 Windows docker https://github.com/MihaiTheCoder/ocr-all-in-one
我主要为这个问题开发了 Web API 项目,所以希望有人会发现它有用。
调用 Windows OCR 的 powershell 在这里: https : //github.com/MihaiTheCoder/ocr-all-in-one/blob/master/Ocr.Wrapper/Resources/Get-Text-Win-OCR.ps1
这是一个 2 个阶段的过程,因为 OCR 引擎的初始化需要更多时间,最好将其缓存。
恕我直言,可能不值得您尝试使用您所针对的平台不支持的库。
您可以查看此答案以获取一些免费替代方案。
我设法使用 uwpdesktop NuGet 使 UWP OCR API 在桌面应用程序上工作。
安装包 uwpdesktop
然后可以调用 UWP API。
我不是律师,但我的理解是该库的 Microsoft 最终用户许可协议不允许在您的场景中使用 Microsoft OCR 库 for Windows Runtime。
具体请阅读第二段,其中禁止在生产环境中的服务器上使用该软件:
"2. 安装和使用权利。
一种。 一般的。 一名用户可以安装和使用该软件的副本来设计、开发、测试和演示您的程序。 您不得在生产环境中的服务器上使用该软件。”
同时,他们还将可分发代码的运行仅限于 Windows Store 或 Windows Phone:
"3. 附加许可要求和/或使用权。
一种。 可分发代码。 如果您遵守以下条款,则该软件包含您被允许在您开发的程序中分发的代码。
一世。 ..
ii. ..
三、 分发限制。 你不可以
..
·分发可分发代码以在 Windows 应用商店或 Windows Phone 以外的平台上运行;”
完整的 EULA 可以在以下位置阅读: https : //www.microsoft.com/web/webpi/eula/windows_runtime_ocr_library_terms_of_use.htm
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.