2017-01-10 23 views
5

Tôi đã sử dụng Microsoft Computer Vision để đọc biên lai, cố gắng tìm một giải pháp thay thế cho OCR của Abby vì có sự chênh lệch đáng kể về giá.Máy tính Microsoft Vision OCR: Tắt tính năng nhóm văn bản theo vùng

Kết quả tôi nhận được luôn được nhóm theo khu vực. Điều này rõ ràng làm cho nó khó khăn hơn nhiều để xác định các lĩnh vực tương ứng với số tiền của họ.

Có cách nào thông qua Microsoft Vision hoặc dù sao đi nữa, tôi có thể đạt được kết quả tương tự như Abby's?

Dưới đây là một hình ảnh với cả hai kết quả và nhận

OCR Kết quả

enter image description here

Trả lời

1

Tôi nhận ra đây không phải là một giải pháp hoàn chỉnh nhưng tôi nghĩ rằng nó là đủ để giúp bạn bắt đầu.

API tầm nhìn máy tính trả lại một JSON result với thuộc tính lines chỉ là một mảng đối tượng có thuộc tính boundingBox.

Đây là các tọa độ X, Y của tọa độ trên cùng bên trái và dưới cùng bên phải của "hình vuông" của từng cụm từ.

Về cơ bản, bạn cần xử lý mảng này và "sắp xếp" các mục dựa trên thuộc tính này.

Trong số này JSFiddle bạn sẽ thấy rằng tôi đang sắp xếp các đường theo Y phối hợp và sau đó nhóm chúng lại.

Việc cần làm là "thông minh hơn" về nhóm - nếu tọa độ Y là 201 và 202, bạn có thể giả định rằng chúng nằm trên cùng một dòng và chỉ thêm chúng vào cùng một dòng, được sắp xếp theo tọa độ X tăng dần.

Code:

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

Kết quả:

enter image description here

Các vấn đề liên quan