【问题标题】: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);
}
结果: