我一直在使用Microsoft Computer Vision阅读收据,试图找到替代Abby的OCR,因为价格存在很大的差异。
我得到的结果总是按地区分组。这显然使得用它们的金额识别相应的字段变得更加困难。
有没有办法通过Microsoft Vision或者无论如何我可以实现与Abby相同的对齐输出?
这是包含结果和收据
的图片Ocr结果
答案 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);
}
<强>结果:强>