在VS 2013中使用JS/jQuery与Microsoft OCR库

37

我目前正在开发一个Windows 8.1应用程序,使用的是Web语言和大多数jQuery(Cordova类型项目),因为它可能会在其他平台上使用。 我需要使用Microsoft OCR库(而不是Tesseract或任何其他库,虽然我了解它们,但现在我确实需要用这个)来分析图像,并在我的应用程序中使用提取的文本。

我从MSDN下载了JavaScript示例应用程序并启动了它:它完全正常工作(当然,在VS 2013中安装OCR插件后)。

现在,我正在尝试将OCR引擎集成到我的应用程序中(我也在我的项目中安装了OCR插件),但它根本不起作用。 实际上,当我尝试在我的计算机上启动我的应用程序时,执行失败并返回了这个错误消息:

ms-appx://io.cordova.blankcordovaapp2 /www/scripts/myscript.js中第11行,第5列出现无法处理的异常

0x800a1391 - JavaScript执行错误:“WindowsPreview”未定义"

以下是“有缺陷”的代码部分(它位于我的脚本非常开头):

$(document).ready(function () {

"use strict";

// Keep objects in-scope across the lifetime of the scenario.
var FileToken = "";

// Define namespace and API aliases.
var FutureAccess = Windows.Storage.AccessCache.StorageApplicationPermissions.futureAccessList;

// Should be initialising the OCR engine
var OCR = WindowsPreview.Media.Ocr;
var ocrEngine = new OCR.OcrEngine(OCR.OcrLanguage.french);
document.addEventListener("deviceready", onDeviceReady, false);

我尝试以与Microsoft OCR示例相同的方式初始化OCR引擎。根据官方文档,VS似乎找不到应该存在的WindowsPreview.Media.Ocr:

Windows Runtime的Microsoft OCR库包含WindowsPreview.Media.Ocr命名空间。该库作为NuGet软件包分发 - 它未包含在Windows软件开发工具包(SDK)中。

我已经使用NuGet命令行在项目中安装了插件,所以不知道为什么它没有被识别并且无法初始化。

非常感谢您的帮助,如果我表达得不够清楚,请随时询问更多细节。


1
顺便说一下,我手动添加了对WindowsPreview.Media.Ocr.winmd(来自包)的引用,并在OcrEngine处得到了指定的模块无法找到的错误提示。 - Eonasdan
2
你好Eonasdan!不,我还没有弄清楚,但我仍在努力工作,希望能找到解决方案。这可能也会对其他人有所帮助,那就太好了。但是,正如你所看到的,我的MSDN帖子还没有得到很大的进展。 - ColonelMoumou
1
是的,我也对位于Projects'Myappname'\packages\Microsoft.Windows.Ocr.1.0.0\lib\win81\x64\WindowsPreview.Media.Ocr.winmd(以及x86文件,以防万一)执行了相同的操作,但它仍然无法正常工作,并显示与您收到的略有不同的错误消息。我的错误似乎找不到WindowsPreview(与我之前描述的错误相同,这很奇怪,因为我已经添加了引用...)。 - ColonelMoumou
1
只是好奇 - 你的平台是什么 - x86、x64 还是 ARM? - potatopeelings
1
我正在使用x64。该引用未通过NuGet包添加。即使是微软的示例应用程序也无法正常工作(至少对我来说是这样)。 - Eonasdan
显示剩余2条评论
1个回答

3
这似乎是关于Apache Cordova的VS工具(TACO)问题。
解决方法是打开platforms\windows\CordovaApp.sln,将架构切换为x64,在CordovaApp.Windows项目引用中添加Nuget包,保存(由于PreBuild事件存在问题,构建将失败)。
<PreBuildEvent>
    cd /d $(MSBuildThisFileDirectory)
    node -e "require('C:\\Users\\{username}\\AppData\\Roaming\\npm\\node_modules\\vs-tac\\lib\\hooks.js').updateAppxManifest('C:\\ocrTest\\ocrTest\\platforms\\windows','C:\\ocrTest\\ocrTest\\platforms\\windows\\..\\..\\')"
</PreBuildEvent>

你也可以尝试暂时清除它以启用底层项目的构建)。

然后打开父级Cordova项目 - 现在应该可以工作了。

这只适用于一个架构,因此对于ARM和Windows Phone,您可能需要另一个副本(将CordovaApp.Phone设置为启动项目,向其添加Nuget包并切换到ARM)。

注意:我是在VS 2015&Cordova工具更新1上进行测试的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接