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

[sociallocker]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

[/sociallocker]

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

  1. Jin Go Son says:

    Cho em xin source code nhận diện cua con với phần trainning hình ảnh của con cua với anh ơi

    • vohungvi says:

      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

  2. Hai Tran says:

    Chào bạn, tôi muốn bạn hướng dẫn chương trình nhận dạng khuôn mặt để “điểm danh” có được không? Cảm ơn.

  3. linh dang says:

    anh ơi anh có thể cho em xin file huấn luyện cascade mặt người được không anh. Em đang cần gấp lắm. Em cám ơn anh trước nga

  4. linh dang says:

    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

  5. linh dang says:

    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

    • vohungvi says:

      nó báo lỗi gì bạn?

    • linh dang says:

      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

  6. Ngay bước tạo file vec thì bị has stopped working anh ạ, giúp em với

  7. 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

  8. Tran Nguyen says:

    cho em hỏi là ảnh dương cũng phải tạo file vec như ảnh âm không?

    • vohungvi says:

      Ả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