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);
}
結果: