Microsoft Computer Vision OCR:禁用按区域分组文本

Zud*_*io8 6 c# ocr service microsoft-cognitive

我一直在使用微软计算机视觉阅读收据,试图寻找替代艾比的OCR,因为价格差异很大.

我得到的结果总是按地区分组.这显然使得用它们的金额识别相应的字段变得更加困难.

有没有办法通过Microsoft Vision或者无论如何我可以实现与Abby相同的对齐输出?

这是包含结果和收据的图像

Ocr结果

在此输入图像描述

Mar*_*ari 2

我意识到这不是一个完整的解决方案,但我认为这足以让您开始。

计算机视觉 API 返回带有属性的JSON 结果lines,该结果只是带有boundingBox属性的对象数组。

这些boundingBoxes 是每个短语的“方块”的左上角和右下角坐标的 X、Y 坐标。

您基本上需要处理该数组并根据该属性对项目进行“排序”。

在此JSFiddle中,您将看到我按 Y 坐标对线进行排序,然后对它们进行分组。

剩下要做的就是“更智能”地进行分组 - 如果 Y 坐标是 201 和 202,您可以假设它们位于同一行,只需将它们添加到同一行,按 X 坐标升序排序。

代码:

if (jsonResponse.status == 'Succeeded') {

  var result = '';
  // Sort lines by Y coordinate
  jsonResponse.recognitionResult.lines.sort(function(a, b) {
    var topLeftYCoordA = a.boundingBox[1];
    var topLeftYCoordB = b.boundingBox[1];
    if (topLeftYCoordA > topLeftYCoordB) {
      return 1;
    }
    if (topLeftYCoordA < topLeftYCoordB) {
      return -1;
    }
    return 0;
  })

  // group lines by Y coordinate
  var grouped = {};

  jsonResponse.recognitionResult.lines.map(function(line) {
    var topLeftYcoordinate = line.boundingBox[1];
    if (!grouped[topLeftYcoordinate]) {
      grouped[topLeftYcoordinate] = line;
    } else {
      grouped[topLeftYcoordinate] += line;
    }
  });
  Object.keys(grouped).forEach(function(yCoordinate) {
    result += yCoordinate + ' - ' + grouped[yCoordinate].text + '</br>';
  })
  $(".right").html(result);
}
Run Code Online (Sandbox Code Playgroud)

结果:

在此输入图像描述