Phương pháp sắp xếp thứ tự nhận diện kí tự: Sau khi tìm được đường biên của kí tự trong với hàm cv2.findContour(), nhóm sử dụng hàm cv2.boundingRect(). Lúc này thu được ma trận Rects gồm 4 cột và n hàng (n số trên hình). Các giá trị này tạo nên một hình chữ nhật bao quanh kí tự với thứ tự (x, y, w, h).
90 Các cột này tương ứng với tọa đọ x_min, y_min của kí tự, chiều cao và chiều rộng của kí tự.
Hình 3.16: Ý nghĩa của các phần tử trên 1 hàng của ma trận Rects
Bài toán đặt ra lúc này nhóm cần sắp xếp thứ tự của mỗi hàng tương ứng với các kí tự theo chiều từ trên xuống dưới và từ trái qua phải của các kí tự trên hình. Để giải quyết bài toán trên nhóm sắp xếp thứ tự các kí tự theo chiều từ trên xuống dưới bằng cách sắp xếp y_min của mỗi kí tự với điều kiện 𝑦𝑖>𝑦𝑖+1và 𝑦𝑖-𝑦𝑖+1>ℎ𝑖 lúc này thứ tự của kí tự i và i+1 trong ma trân Rects sẽ được đổi lại vị trí cho nhau.
for i in range (0, lenth - 1): for j in range (i + 1, lenth):
if (rects[i][0] > rects[j][0]) and abs(rects[i][1]-rects[j][1]) <(rects[i][3]/10): # Hoán đổi vị trí
tmp = rects[i]
rects[i] = rects[j] rects[j] = tmp
Sau khi các kí tự đã được sắp xếp theo hàng, nhóm tiếp tục sắp xếp các kí tự trong hàng từ trái qua phải với điều kiện: 𝑥𝑖>𝑥𝑖+1 thì hàng I và i+1 của ma trận Rects sẽ dduocj hoán đổi với nhau.
91 for i in range (0, lenth - 1):
for j in range (i + 1, lenth):
if (rects[i][1] > rects[j][1]) and (rects[i][1]-rects[j][1])>rects[i][3]: # Hoán đổi vị trí
tmp = rects[i] rects[i] = rects[j] rects[j] = tmp
Sau khi thực hiện hai lần sắp xếp lại thứ tự của các hàng trong ma trân ta thu được kết quả.
92