【问题标题】:Microsoft Computer Vision OCR : Disable grouping text by regionsMicrosoft Computer Vision OCR:禁用按区域分组文本
【发布时间】:2017-05-24 13:26:18
【问题描述】:

我一直在使用 Microsoft 计算机视觉来读取收据,试图找到 Abby 的 OCR 的替代品,因为价格差异很大。

我得到的结果总是按地区分组的。这显然使得识别相应字段的数量变得更加困难。

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

这是一张包含结果和收据的图片

Ocr 结果

【问题讨论】:

    标签: c# service ocr microsoft-cognitive


    【解决方案1】:

    我知道这不是一个完整的解决方案,但我认为它足以让你开始。

    计算机视觉 API 返回带有 lines 属性的 JSON result,它只是带有 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);
    }
    

    结果:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-09
      • 1970-01-01
      • 2017-02-21
      相关资源
      最近更新 更多