Sorting Contour Hasil Segmentasi Nomor Pelat Mobil
Bismillah,
Masih inget pada postingan yang sebelumnya hasil segmentasi nomor pelat yang masih terbalik sehingga ketika dilakukan pengenalan nomor pelat hasilnya juga tidak benar. Kasusnya kira-kira ditampilkan pada gambar di bawah ini
Dari hasil segmentasi dan pengenalan di atas ditunjukkan bahwa yang akan dilakukan pengenalan AB 1267 N, tetapi karena ketika segmentasi masih ngacak sehingga urutannya pun BA61N27. Yang harus kita lakukan adalah melakukan urutan contour tersebut, urutan berdasarkan koordinat sumbu x dari kiri ke kanan atau dari sumbu x yang nilainya terkecil ke terbesar. Dengan menggunakan python dapat dilakukan menggunakan perintah sederhana seperti di bawah ini
def sort_contours(contours, method="left-to-right"):
reverse = False
index = 0
if method == "right-to-left" or method == "bottom-to-top":
reverse = True
if method == "top-to-bottom" or method == "bottom-to-top":
index = 1
bounding_boxes = [cv2.boundingRect(c) for c in contours]
contours, bounding_boxes = zip(*sorted(zip(contours, bounding_boxes), key=lambda b: b[1][index], reverse=reverse))
return contours, bounding_boxes
Sebenarnya yang paling penting dari perintah di atas adalah 3 baris terakhir, pertama yang kita lakukan adalah buat sebuah variabel untuk menyimpan list box dan kita manfaatkan fungsi sorted bawaan python untuk mengurutkan 2 list sekaligus contours dan bounding_boxes. Untuk lebih jelasnya silakan bisa membaca di sini.
Dari gambar di atas menunjukan bahwa hasil segmentasi sudah sesuai urutan karakternya, perlu diingat bahwa untuk melakukan sorting countour sebaiknya setelah contour tersebut sudah difilter terlebih dahulu setelah itu baru diurutkan. Tujuannya adalah biar tidak mengurangi waktu pre-processing untuk melakukan sorting, silakan cek di github saya source code terkait hal tersebut
Demikian sedikit trik untuk mempercantik hasil segmentasi nomor pelat, semoga bermanfaat dan terus tidak menyerah untuk belajar computer vision. Happy python…:)