2017-01-10 52 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