2017-01-10 23 views
5

我一直在使用Microsoft Computer Vision阅读收据,试图找到替代Abby的OCR,因为价格差异很大。我得到的结果总是按地区分组。这显然使得用它们的数量来确定相应的字段变得更加困难。Microsoft Computer Vision OCR:禁用按区域分组文本

有没有通过微软视觉或任何方式的方式,我可以达到与Abby's相同的对齐输出?

这里有两个结果的图像和收据

OCR结果

enter image description here

回答

1

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

计算机视觉API返回JSON resultlines属性,该属性只是具有boundingBox属性的对象数组。

这些boundingBox es是每个短语的“正方形”的左上角和右下角坐标的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