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

时间:2017-01-10 06:21:49

标签: c# service ocr microsoft-cognitive

我一直在使用Microsoft Computer Vision阅读收据,试图找到替代Abby的OCR,因为价格存在很大的差异。

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

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

这是包含结果和收据

的图片

Ocr结果

enter image description here

1 个答案:

答案 0 :(得分:2)

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

Computer Vision API返回JSON result,其lines属性只是一个具有boundingBox属性的对象数组。

这些boundingBox es是" square"的左上角和右下角坐标的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);
}

<强>结果:

enter image description here