5
我一直在使用Microsoft Computer Vision阅读收据,试图找到替代Abby的OCR,因为价格差异很大。我得到的结果总是按地区分组。这显然使得用它们的数量来确定相应的字段变得更加困难。Microsoft Computer Vision OCR:禁用按区域分组文本
有没有通过微软视觉或任何方式的方式,我可以达到与Abby's相同的对齐输出?
这里有两个结果的图像和收据
OCR结果
我一直在使用Microsoft Computer Vision阅读收据,试图找到替代Abby的OCR,因为价格差异很大。我得到的结果总是按地区分组。这显然使得用它们的数量来确定相应的字段变得更加困难。Microsoft Computer Vision OCR:禁用按区域分组文本
有没有通过微软视觉或任何方式的方式,我可以达到与Abby's相同的对齐输出?
这里有两个结果的图像和收据
OCR结果
我知道这是不是一个完整的解决方案,但我认为这是足以让你开始。
计算机视觉API返回JSON result与lines
属性,该属性只是具有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);
}
结果: