Cách tìm contours cho từng đối tượng mình cần (remove các contours noise trong opencv + python)

computer-vision

#1

Mỗi người ai từng làm về nhận diện đáp án cho bài thi thì giúp em các thắc mắc sau với ạ (trả về đáp án tô đậm, số báo danh, mã đề ) :

  • Làm thế nào để remove các contours noise ko cần thiết
  • Form bài bị lệch (các đáp án bị lệch ko thẳng hàng )và khi detect đáp án các contours cho đáp án ( mình ngồi xem height, width của nó ạ, hay có cách nào khác ko ạ
  • Bài này em đang cách làm là vì contours lớn nhất là số báo danh thì em crop hình số báo danh ra detect riêng nhưng xảy ra là có quá nhiều contours nhiễu nên ko tìm được contours là contours của các khanh tròn

Mong mọi người giải đáp cho em với ạ !

Em xin cảm ơn nhiều ạ

photo_2021-02-27_10-05-41


#2

Cách dễ nhất là làm một cái template xác định vị trí của các ô. Khi có được template rồi thì thực hiện như sau:

  1. Lấy vị trí của 4 hình neo (marker). Như trường hợp này là 4 hình chữ nhật đen ở mỗi góc.
  2. Thực hiện biến đổi để đưa về dạng chuẩn (perpective transform)
  3. Lấy từng ô ra kiểm tra. Đơn giản chỉ cần kiểm tra ô đó được tô bao nhiêu phần trăm. Nếu lớn hơn một ngưỡng nào đó thì xác định đó là đáp án.

#3
  • Để xác định được vị trí các ô trong hình ( xác định được vị trí thì dựa vào contours) mà contours đang bị nhiễu nhiều nên mình ko biết cái nào mới là contours mà ( giả dụ về số báo danh )
  • Còn về đáp án, ảnh của mình bạn có thể thấy đáp án nó sắp xếp bị lệch luôn trong hình , crop ra vẫn bị lệch
  • Còn perpective transform ( mình thấy thường là xác định đối tượng trên 1 nền nào đó, nhưng đáp án ở dưới nó ko có khung bao quanh nên phải làm sao hả bạn)
  • Bạn có thể code thử với mình của mình rồi có thể show cho mình hình ảnh bạn làm được ra ko, bạn thử làm thử xem, tại mình có làm bế tắc quá

#4

Đán án bị lệch là sao nhỉ. Phương án của mình là: mình định nghĩa sẵn một template, chỗ nào là ô mã đề, ô đáp án. Sau đó cắt ảnh dựa vào 4 cái marker kia rồi transform. Cuối cùng chỉ việc lấy từng ô ra kiểm tra xem đã đánh dấu chưa là được


#5

Không cần đâu bạn, nay mình làm được rồi, nhưng thủ công lắm, crop hình đáp án ra xử lý, rồi dùng perpective transform để cho hình nó thẳng hàng ngay ngắn, rồi chia ra làm 5 phần, xử lý 10 câu 1 \


#6

Không liên quan lắm nhưng tiện cho mình hỏi chút bên Computer vision. Với sự phát triển của các thuật toán hiện nay bên Deep learning có còn nhiều cơ hội cho OpenCv giải quyết các bài toán Computer vision không ạ? Bạn có thể chia sẻ thêm về hiện trạng thực tế được không, các ứng dụng trong cuộc sống. Cám ơn bạn.


#7

Mình cũng mới thực tập mảng này nên cũng không rõ lắm bạn à, nhưng mình thấy opencv nó như là 1 thư viện giúp mình triển khai xử lý ảnh dễ dàng hơn chứ nó có phải thuật toán đâu bạn, thuật toán mà dùng đằng sau opencv mình nghĩ chính là các thuật toán deep learning học đó mà, bạn có thể triển khai các thuật toán bằng cách ko dùng thư viện thì chính là code chay đó, còn dùng opencv thì nó tiện lợi hơn như kiểu bạn dùng các thư viện trong python ý bạn


#8

À ý mình ở đây là Opencv hay sử dụng để extract feature sau đó dùng Machine learning truyền thống, nó cũng mới được bổ sung một số tính năng mới. Còn khi mình train model bằng NN thì trong quá trình đó nó tự extract features cho mình.