【问题标题】:Windows UWP apps via Cordova: convert canvas into stream for InkRecognizer in Javascript通过 Cordova 的 Windows UWP 应用程序:将画布转换为 Javascript 中 InkRecognizer 的流
【发布时间】:2016-05-28 04:11:06
【问题描述】:

我正在使用 Cordova 开发适用于 Android 和 Windows 的应用程序,并且在 Windows 平台 (W10) 上难以识别画布元素中的文本和数字

所以过去几天我浪费时间尝试使用 Windows.Media.OCR 命名空间来识别我的 HTML5 画布涂鸦板上的手写数字,如您所见 here on another SO question

然后我找到了 Windows.UI.Input.Inking 命名空间,并且很少有类可用于 Javascript 解决方案。我发现有一个 InkManager 可以识别它自己的集合中的 InkStrokes 或 InkRecognizerContainer 中的笔划。

InkRecognizerContainer 具有接受输入流的“loadAsync()”方法。所以我想我只是加载转换为流的画布,并使用 InkManager 来识别这个容器。

不幸的是,如果我尝试使用转换为流的 HTML5 画布,它会抛出“WIN RT: Unsepcified Error”但不是在回调中,它只会让应用程序崩溃。

var blob = canvas.msToBlob();
 var randomAccessStream = blob.msDetachStream();

 var inkStrokeContainer = new Windows.UI.Input.Inking.InkStrokeContainer();
 inkStrokeContainer.loadAsync(randomAccessStream).done(function () {
     debugger
 }, function (error) {
    console.log(error);
 });

任何帮助将不胜感激,因为我在这方面花费了太多时间。

【问题讨论】:

    标签: javascript cordova windows-store-apps win-universal-app


    【解决方案1】:

    InkStrokeContainer.LoadAsync 需要具有墨迹信息的文件,而不是任意位图。通常,这将是从以前的 InkStrokeContainer 中保存出来的 ISF(Ink 序列化格式)文件。 ISF 文件将笔画信息作为元数据包含在 gif 文件中,因此它们可以由普通 gif 查看器显示,但典型的 gif 文件不包含 ISF 数据并且无法加载到 InkStrokeContainers。

    InkManager 进行手写识别而不是 OCR。它需要单独的笔画信息并考虑笔画顺序和方向等属性。要使用它,您需要将指针信息传递给 InkManager,通常是在输入发生时,以便 InkManager 可以构建笔画以进行识别。

    Simplified Ink Sample 为例。 JavaScript 版本使用 WinJS 而不是 Cordova,但转换起来应该不会太难。墨迹书写是 Windows 特定的,因此您需要将其放入应用的特定平台部分。

    【讨论】:

    • 谢谢 Rob,您已经基本证实了我的发现,即不只是任何符合 InkStrokeContainer 加载的 GIF。我已经实现了将用户在画布中绘制的任何笔画复制到 InkManager 并启动并运行它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-06
    • 1970-01-01
    • 1970-01-01
    • 2017-12-08
    • 1970-01-01
    • 1970-01-01
    • 2016-01-24
    相关资源
    最近更新 更多