Nhận diện cua con bằng Haar Cascade

Bài viết này hướng dẫn các bạn cách training Haar Cascade để nhận dạng cua con. Các bạn có thể tìm hiểu kỹ về lý thuyết trong bài Phát hiện đối tượng

Ở các tỉnh ven biển như Cà Mau, Kiên Giang,… hay bán cua giống để nuôi. Mỗi con cua con có 3 kích cỡ, gọi nôm na là cua tiêu, cua dưa và cua me. Bài này sẽ hướng dẫn đếm cua dưa, cua dưa thì nhìn thấy ngoe, càng rõ ràng rồi. Cua tiêu chỉ bé như hạt tiêu, khó thấy nghoe, còn con cua me đã cứng cáp hơn nhiều.


Bước 1: Chuẩn bị

Để nhận diện tốt các bạn cần 500 – 1000 ảnh, càng nhiều ảnh càng học được nhiều đặc trưng. Nhiều đặc trưng thì càng chính xác bù lại thì huấn luyện lâu hơn, nhiều khi chờ muốn mọc râu. Có khi vài tuần chưa xong nếu ảnh khoảng vài ngàn. Link download ảnh cua ở cuối bài.


Bước 2: Khoanh vùng

Các bạn dùng tool Object Locator của mình viết để khoanh vùng chữ nhật bao lấy con cua dưa (link cuối bài), bước này mục đích cho chương trình biết con cua là như thế nào. Sau khi khoanh vùng hết thì được khoảng gần 1000 đối tượng, đủ để openCV học đặc trưng. Nếu làm biếng thì mình có khoanh vùng giùm các bạn, thông tin nằm trong file location.txt nằm trong thư mục ảnh.


Bước 3: Huấn luyện

Sau đó vào thư mục C:\opencv\build\x86\vc10\bin (mình dùng opencv 2.4.9 nên đường dẫn như vậy) để run command line (cmd). Các tham số có ý nghĩa gì thì vào trang document của OpenCV có hướng dẫn hết. Đầu tiên là tạo file vector chứa ảnh cua dưa cái đã. Mở command line lên và gõ lệnh:

cd C:\opencv\build\x86\vc10\bin

opencv_createsamples -info D:\MelonSeedsCrab\location.txt -vec MelonSeedsCrab.vec -num 998 -w 30 -h 30

Câu lệnh trên dùng để tạo file vec với 998 đối tượng với kích thước 30×30 pixel, kết quả là ta thu được file MelonSeedsCrab.vec

Tiếp tục là lệnh huấn luyện

opencv_haartraining -vec MelonSeedsCrab.vec -bg E:\picture\bg.txt -w 30 -h 30 -data D:\training -npos 900 -nneg 3000 -mem 4000


Quá trình huấn luyện

Kinh nghiệm của mình là chỉ định npos nhỏ hơn num khi tạo file vec. Ở trên tạo file vec với 998 đối tượng thì ở dưới mình chỉ định 900 thôi. Còn bao nhiêu thì làm nhiều kinh nghiệm sẽ cho các bạn biết, đối với mình là khoảng 90%.

Sau khi chạy xong với đúng các lâu lệnh như trên thì chương trình sẽ tạo ra file D:\training.xml. Đó là file đặc trưng để nhận biết thế nào là 1 con cua dưa. Để test kết quả có thể dùng tool để kiểm tra. mình treo máy khoảng 1 ngày mới ra được file training.xml


Kết quả

Với đúng những lệnh bên trên thì kết quả phát hiện được như trong hình. Các bạn có thể tăng minHitRate lên và giảm maxFalseAlarm xuống để chính xác hơn (thời gian huấn luyện sẽ lâu hơn).



Kết luận
– Đối với những đối tượng xoay lung tung như cua con không nên dùng HaarCascade
– Nên lấy ảnh có nền đơn giản, hình trên do người khác gửi cho mình , nó có nhiều họa tiết dư thừa

Download

Download ảnh cua dưa

Phần mềm Object Locator

File huấn luyện thành công crab1.xml | crab2.xml

Source code Github

Bộ ảnh âm (negative) dùng để huấn luyện Cascade. Double click vào file _create_bg_file.bat (giải nén ra sẽ thấy) để tạo ra file bg.txt

17 thoughts on “Nhận diện cua con bằng Haar Cascade

    1. Mình đã update link download source code cho bạn rồi. Còn cách training thì không có code, làm theo seri phát hiện đối tượng để training

    1. Dạ em cần file huấn luyện riêng ak chứ hog phải file co sẵn. như file huấn luyện nhận cua của anh vậy ak

    2. File vector hả bạn? Bạn phải làm thủ công thôi, hiện giờ mình đang làm, khi làm xong mình sẽ public cho mọi người

  1. em có làm rồi file vector rồi nhưng mà huấn luyện nó cứ bị treo ak a. chay cả tuần lê mà nó vẫn không ra. trong khi chi có 1000 anh dương và 1500 ảnh âm

  2. opencv_haartraining -data c:\data\face -vec c:\data\vec.vec -bg c:\data\bg.txt -nstages 20 -nsplits 2 -minhitrate 0.999 -maxfalsealarm 0.5 -npos 800 -nneg 1300 -w 30 -h 30 -nonsym -mem 2048 -mode ALL
    anh fix lỗi giúp e với

    1. nó cứ chạy quài như vậy mà nó không ngừng ak a
      “|47602| 0%|-|-15793.757813| 0.981250| 0.837333| 0.383913|
      +—-+—-+-+———+———+———+———+
      |47603| 0%|-|-15793.738281| 0.981250| 0.837333| 0.383913|
      +—-+—-+-+———+———+———+———+
      |47604| 0%|-|-15793.757813| 0.981250| 0.837333| 0.383913|
      +—-+—-+-+———+———+———+———+
      |47605| 0%|-|-15794.757813| 0.981250| 0.837333| 0.383913|
      +—-+—-+-+———+———+———+———+
      |47606| 0%|-|-15794.738281| 0.981250| 0.837333| 0.383913|
      +—-+—-+-+———+———+———+———+
      |47607| 0%|-|-15794.757813| 0.981250| 0.837333| 0.383913|
      +—-+—-+-+———+———+———+———+
      |47608| 0%|-|-15795.757813| 0.981250| 0.837333| 0.383913|
      +—-+—-+-+———+———+———+———+
      |47609| 0%|-|-15795.738281| 0.981250| 0.837333| 0.383913|
      +—-+—-+-+———+———+———+———+
      |47610| 0%|-|-15795.757813| 0.981250| 0.837333| 0.383913|
      +—-+—-+-+———+———+———+———+
      |47611| 0%|-|-15796.757813| 0.981250| 0.837333| 0.383913|
      +—-+—-+-+———+———+———+———+
      |47612| 0%|-|-15796.738281| 0.981250| 0.837333| 0.383913|
      +—-+—-+-+———+———+———+———+
      |47613| 0%|-|-15796.757813| 0.981250| 0.837333| 0.383913|
      +—-+—-+-+———+———+———+———+
      |47614| 0%|-|-15797.757813| 0.981250| 0.837333| 0.383913|
      +—-+—-+-+———+———+———+———+
      |47615| 0%|-|-15797.738281| 0.981250| 0.837333| 0.383913|
      +—-+—-+-+———+———+———+———+”
      chạy cả tuần rồi mà vẫn vậy

  3. Info file name: D:\MelonSeedsCrab\location.txt
    Img file name: (NULL)
    Vec file name: MelonSeedsCrab.vec
    BG file name: (NULL)
    Num: 500
    BG color: 0
    BG threshold: 80
    Invert: FALSE
    Max intensity deviation: 40
    Max x angle: 1.1
    Max y angle: 1.1
    Max z angle: 0.5
    Show samples: FALSE
    Width: 30
    Height: 30
    Create training samples from images collection…
    Unable to open image: D:\MelonSeedsCrab\1.JPG
    OpenCV Error: Unknown error code -9 () in cvSetImageROI, file ..\..\..\..\opencv\modules\core\src\array.cpp, line 3000

    1. Ảnh âm không cần tạo file vec nhé, lưu ý ảnh âm là ảnh không chứa đối tượng

Leave a Reply