如何在ASP.Net MVC4 Web API项目中使用Microsoft OCR库(Microsoft.Windows.Ocr)?

时间:2014-11-29 03:50:30

标签: c# asp.net asp.net-mvc ocr microsoft-ocr

TL; DR:

是否有人知道在服务器端ASP.Net Web应用程序(如MV4 Web API)上引用Microsoft.Windows.Ocr(/ WindowsPreview.Media.Ocr.dll)程序集的方法,并使用OCR功能该程序集将照片图像作为输入并从中提取文本内容? 如果是,请在答案中提供详细说明。

问题详情(以及我到目前为止所尝试的内容)

我正在构建一个Web应用程序,将上传到服务器的图像(通过文件上传UI屏幕),然后使用 OCR 读取文本,并在下一页显示文本,然后下一页到上传的图片。

由于大多数商业OCR库花费了一个臂和长度(over $1,300 last time I checked),我想我可以尝试使用免费 Microsoft OCR库 Microsoft.Windows.Ocr / strong>并且似乎是very simple并且可以直接使用。

所以我尝试将 Microsoft.Windows.Ocr Nuget Package安装到我的ASP.Net MVC4 Web API项目并且成功了。

install the Microsoft.Windows.Ocr Nuget Package

之后,我查看了我的MVC4 Web API项目参考资料,令我惊讶的是,没有找到对 Microsoft.Windows.Ocr.dll 程序集的引用。

reference to Microsoft.Windows.Ocr.dll missing

然后我尝试通过浏览到\packages文件夹中的该程序集添加对Microsoft.Windows.Ocr.dll程序集的x86版本的引用,并选择 WindowsPreview.Media.Ocr来自\lib\win81\x86文件夹

的.dll

注意:程序集名称是WindowsPreview.Media.Ocr.dll而不是Microsoft.Windows.Ocr.dll,不确定原因!

browse to and select Microsoft.Windows.Ocr.dll OCR Assembly

当我点击确定时,我收到了以下错误消息

---------------------------
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   
---------------------------

Microsoft OCR Library Error adding to Project

然后我从the Nuget Page发现了#34;支持的平台"仅 Windows Phone 8,Windows Phone 8.1,Windows 8.1(仅限Windows应用商店应用)。

microsoft ocr library nuget error

但当然,必须有一种方法可以在ASP.Net应用程序的服务器端使用这个 OCR dll 吗?

有没有人知道在服务器端ASP.Net Web应用程序(如MV4 Web API)上引用Microsoft.Windows.Ocr(/ WindowsPreview.Media.Ocr.dll)程序集的方法,并使用该程序集中的OCR功能将照片图像作为输入并从中提取文本内容?** 如果是,请在答案中提供详细说明。

任何" hacks"和/或示例代码将非常感谢!!

谢谢!

7 个答案:

答案 0 :(得分:4)

您可以跳到下面的更新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.net应用程序。我不知道如何修复类型加载异常,也许你可以比我更远。如果找到解决方案,请发布。

更新1(12/1/2014)

更多挖掘揭示了以下程序集绑定错误。知道如何为进程设置包ID吗?

文件:WindowsPreview.Media.Ocr!WindowsPreview.Media.Ocr.OcrEngine,Version = 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下运行 ---详细的错误日志如下。

BEGIN:Windows运行时类型绑定。 END:该进程没有包标识。 (HRESULT异常:0x80073D54)

更新2(12/03/2014)

这是一个讨厌的解决方法,但它适用于我的Windows 8.1 Surface Pro 3平板电脑。 WebOcr是一个webforms,但它很容易被重构为MVC

1)下载https://github.com/Xandroid4Net/CommandLineOcr。这是psuedo商店应用程序。

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 in C#?

6)使用注册表项中找到的奇怪的guid应用程序标识符更新OcrCommandLineCaller.cs中的appActiveManager.ActivateApplication调用。

7)在default.aspx.cs中,将saveAsPath替换为计算机上的路径。在Windows应用商店应用中,有一个由Windows.Storage.ApplicationData.Current.LocalFolder表示的静态路径。这是我保存图像的简单方法。

8)修改任何代码到您心中的内容,如果您有任何问题,请告诉我。

这是一个非常粗略和令人讨厌的解决方案,但确实有效。

答案 1 :(得分:4)

如果您使用的是Visual Studio 2015和Windows 10,则

  

Microsoft.Windows.Ocr

已移至Universal Windows Platform。它可以

  

Windows.Media.Ocr

因此,您需要使用支持Windows 10的工具升级VS 2015。

我做了以下操作,并在我的Web API中添加了Windows.Media.Ocr作为参考。

  1. 在Web API项目的引用中,右键单击任何引用,然后单击“在对象浏览器中查看”。您的对象浏览器看起来像这样 enter image description here
  2. 有一个' ...'按钮旁边的"浏览:所有组件"框。工具提示读取"编辑自定义组件集"。点击!
  3. 在"编辑自定义组件集"框单击浏览选项卡并导航到" C:/ Program Files(x86)/ Windows Kits / 10 / References / Windows.Foundation.UniversalApiContract / 1.0.0.0" 并单击结果的winmd文件,然后单击“添加”。
  4. 点击确定!
  5. 现在点击图标,其中显示"添加到解决方案资源管理器中所选项目中的引用"(这是' ...'按钮旁边的第三个按钮"浏览:&#34)。您可以看到Windows.Media.Ocr可供使用。
  6. 注意:以下内容仅适用于VS 2015和Windows 10.对于Universal Windows Platform(UWP),还应更新VS 2015。检查this是否有样本OCR。

    希望这会有所帮助。 的更新 它已导入我的参考但是无法加载。希望它为人们提供一些启动。 谢谢!。

答案 2 :(得分:3)

我使用与MS Office一起打包的MODI解决方案已有几年了,并且非常满意(如果您购买了Office,则免费)。当它停止时我很失望。 我已经尝试过Tesseract ......我真的很喜欢它,但发现荷兰机器质量好而且速度慢且不准确...而且和你一样,我无法证明花200美元以上的东西是基本的爱好项目。

经过绝望的搜索,有人在这里向我指出了TOCR(Transym产品)。不久后顿悟。 ;-) 我想我现在需要说的是,我与Transym没有任何联系,是的,我支付了全价...... 60磅!(没有错字......六十几岁),包括增值税在内,达到113欧元。

它主要用于集成商(它包括一个扫描/查看器/ OCR应用程序,但这仅仅是一个演示 - 如果您购买许可证,您将获得其源代码)。 API过时了(就像OCR引擎一样,它是一个相当成熟的代码库),但它快速,稳定且出乎意料地准确。不像DokuStar引擎或其他神秘的引擎那么准确,但对于我的应用程序(荷兰语和英语机器类型),它拥有自己对抗1000美元以上的各种引擎。荷兰机器类型的识别准确性非常好(它不会做手写)。 在我看来,就物有所值而言,它简直太可笑了。 至于API:我在它周围编写了一个基本的.NET包装器以满足我的需求 - 这是在几个晚上完成的。

他们的网站上有一个评估版本(http://www.transym.com/index.htm)。不,如果你这样做,我就不会得到任何金钱; - )

答案 3 :(得分:2)

我设法通过从powershell调用DLL从Web API调用OCR。我还发现您不能并行调用此DLL。

我花了几天时间,但这是仓库。 Windows docker https://github.com/MihaiTheCoder/ocr-all-in-one

可作为nuget和Web API一起使用

我主要针对此问题开发了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引擎的初始化会花费更多的时间,因此最好对其进行缓存。

答案 4 :(得分:1)

恕我直言,可能不值得您尝试使用您所定位的平台不支持的库。

您可以查看this answer以获取一些免费的替代方案。

答案 5 :(得分:0)

我设法使用uwpdesktop NuGet在桌面应用上运行UWP OCR API。

Install-Package uwpdesktop

然后,您可以调用UWP API。

答案 6 :(得分:-1)

我不是律师,但我的理解是该库的Microsoft最终用户许可协议不允许在您的方案中使用Microsoft OCR Library for Windows Runtime。

具体来说,请阅读第二段,禁止在生产环境中的服务器上使用该软件:

  

“2。安装和使用权利。

     

一个。一般。一个用户可以安装和使用该软件的副本   设计,开发,测试和演示您的程序。 您可能不会使用   生产环境中服务器上的软件。“

同时,他们还将可分发代码的运行限制为Windows Store或Windows Phone:

  

“3。附加许可要求和/或使用权利。

     

一个。可分发代码。该软件包含您的代码   如果您遵守,则允许在您开发的程序中分发   以下条款。

     

我。 ..

     

II。 ..

     

III。分配限制。你可能不会

      ..
     

·分发可分发代码以在其他平台上运行   比Windows应用商店或Windows Phone ;“

完整的EULA可在以下网址阅读:https://www.microsoft.com/web/webpi/eula/windows_runtime_ocr_library_terms_of_use.htm