我使用Document AI Invoice Processor处理扫描的发票。我正在使用Java客户端库。我最近注意到,当输入图像从默认读取方向ccw旋转90度。
当向服务提供发票图像时,发票图像从垂直(读取(方向逆时针旋转90度,返回的边界多边形不正确。假设发票id字段位于发票图像右上角附近的某个位置当它处于阅读方向时。如果(由于某种原因,例如,使用将发票文档放错了扫描仪上(我将此发票的90度ccw旋转图像发送给服务,它仍然可以很好地检测到发票id字段(事实上,所有字段(,但尽管我希望边界多边形在左上角的某个位置(由于旋转(,但引擎返回仍在右上角的边界多边形角正如文档所示,返回的边界多边形在很大程度上是相对于垂直(读取(方向的图像的,而不是相对于我实际上传到服务的图像(即90度ccw旋转的图像(。
请注意,我通过以下引用链获得边界多边形:Document->Entity->PageAnchor->PageRef->BoundingPoly
。如果我想要一个段落的边界多边形,我会遵循这个参考链:Document->Page->Pargraph->Layout->BoundingPoly
。请注意此链中的最后一步是Document.Page.Layout对象,该对象(连同边界多边形(具有"orientation"属性,该属性指定此布局对象相对于页面方向的方向。不幸的是,在获取提取实体的边界多边形时,参照链不包括Layout对象。相反,它会经过一个PageRef对象,该对象有一个边界多边形,但方向不允许我理解返回的边界多边形。
那么,为了回答我的问题,这是一个bug吗?返回的实体边界多边形是相对于上传的图像,还是观察到的行为正确,我应该以某种方式变换多边形?那么,提取实体的方向如何?为什么它没有在PageRef对象中传达(就像通过Document.Page.Layout对象为块、行、令牌等传递一样(?这是将来要添加的内容吗?
对于每一页,在处理之前,图像都可以自动旋转到估计的自然阅读方向。如果扫描是倾斜的(页面将自动取消倾斜(,这也会起作用。
回复中:
document.page[].image
包含页面图像(取消桌面处理,如果不需要预处理,则为原始图像(。坐标是相对于此图像的document.page[].transforms
指示所应用的变换(如果没有应用变换,则为空(
示例:
{ // document.page[0]
// The image for the page. All coordinates are relative to this image.
"image": { "content": "…", "mime_type": "image/png", "width": 1335,… },
// Here, 1 transformation matrix was applied to rotate the page.
"transforms": [ { "rows": 2, "cols": 3,… } ]
}
简而言之:
- API响应是自给自足的。您不需要参考您的输入文档
- 如果要在页面上绘制结果,请使用
document.page[].image
我希望这能回答你的问题。