图像识别

理解印象笔记的图像识别流程并访问识别数据


印象笔记可以索引在图片中的文字和词语,这是我们最为出彩的功能之一。在本文中,我们会描述其是如何工作的以及第三方开发者应如何获取通过印象笔记的图像识别生成的识别信息。

工作原理

从用户角度看,整个流程:在用户同步了一个附有图片 Resource 笔记后,图像被发送到一个小型的图像处理服务器集群上。这里的服务器会识别出手写、打印的文本并将结果数据插入到笔记的主体中(以 recoIndex 元素的形式)。扩增后的笔记会在下次笔记同步的时候发送给用户。

理解 recoIndex

在处理完成之后,笔记的 XML 会在笔记末尾包含一个或多个 recoIndex 元素。这些元素通过印象笔记的 recoIndex DTD 进行验证并,对资源中可能出现的文本的大小、位置进行描述。

例如,当我们将这条笔记.enex 格式导出后,我们可以在文档末端查看 recoIndex 元素:

recoIndex 元素包括几个属性;如果对细节感兴趣的话,你可以放心大胆地去研读在上方给出了链接的 recoIndex.dtd 文档。child 子元素会包含图像处理的结果。

item 元素

recoIndex 的每一个 item 子元素表示的是印象笔记图像处理服务器认为的资源中的一段单独的文本。item 元素包含以下四个属性:

  • x - 此项的左上角的 x 轴坐标。
  • y - 此项的左上角的 y 轴坐标。
  • w - 此项的宽度。
  • h - 此项的高度。

这四个值建立起了包含有此段文本的一个矩形。

item 元素会包含一个或多个 t 元素。每一个元素包含图像处理服务器识别的文本和文本的权重值。 t 元素是根据 weight 属性的值降序排列的。简单来说,weight 属性是以数值表示的印象笔记图像处理系统识别出的这段文本的可信度。

编程实现对识别数据的访问

识别数据可以用两种方法从印象笔记云 API 上获取下来:使用NoteStore.getNote 或者 NoteStore。下面是一个使用 getNote 的例子。

正如你看到的, API 会返回前面给出过链接的示例笔记的每一张图片的 recoIndex 原始 XML。如果上面例子中的笔记包含有多个自语,那么输出会是每个资源一个 recoIndex

如果你知道你想要的 Resource 的 GUID,那么这部分数据可以通过 NoteStore.getResourceRecognition 很快获取到。下面的例子会产生跟上面相同的输出:

总结

如果一个 Resource 发生了变化,那么很显然这些数据也会改变。所以当你放手去大胆实践的时候,请确保你调用的是最新的数据。

如果你还有任何的问题,尽管与印象笔记开发者支持联系。