Windows UWP 应用程序通过 Cordova:在 Javascript 中将画布转换为 InkRecognize

Windows UWP apps via Cordova: convert canvas into stream for InkRecognizer in Javascript

本文关键字:布转换 转换 InkRecognize 应用程序 UWP Cordova Javascript Windows      更新时间:2023-09-26

我正在为Android和Windows开发Cordova应用程序,并在Windows平台上为识别画布元素中的文本和数字而苦苦挣扎(W10)

所以最近几天我浪费了时间尝试使用 Windows.Media.OCR 命名空间来识别我的 HTML5 画布涂鸦板上的手写数字,正如您在另一个 SO 问题中看到的那样。

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

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

不幸的是,如果我尝试使用转换为流的 HTML5 画布,它会抛出"WIN RT:未分离的错误",但不是在回调中,它只会使应用程序崩溃。

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);
 });

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

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

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

有关

示例,请查看简化墨迹示例。JavaScript版本使用WinJS而不是Cordova,但转换起来应该不会太难。墨迹书写是特定于 Windows 的,因此需要将其放在应用的特定于平台的部分。