2017-01-10 2 views
5

Я использую Microsoft Computer Vision для чтения квитанций, пытаясь найти альтернативу OCR от Abby, поскольку существует существенная разница в цене.Microsoft Computer Vision OCR: отключить группировку текста по областям

Результаты, которые я получаю, всегда сгруппированы по регионам. Это, очевидно, значительно затрудняет идентификацию соответствующих полей с их суммами.

Есть ли способ через Microsoft Vision или вообще, что я могу достичь того же выровненного вывода, что и у Эбби?

Вот изображение с результатами работы и получение

Ocr Результаты

enter image description here

ответ

1

Я понимаю, что это не полное решение, но я думаю, что это достаточно, чтобы вы начали.

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); 
} 

Результат:

enter image description here

Смежные вопросы