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
File huấn luyện thành công crab1.xml | crab2.xml
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
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
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
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.
bạn liên hệ mình qua skype: vohungvi nhé
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
Trong opencv có sẵn đó bạn: https://github.com/opencv/opencv/tree/master/data
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
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
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
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
nó báo lỗi gì bạn?
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
Ngay bước tạo file vec thì bị has stopped working anh ạ, giúp em với
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
Liên hệ mình qua FB nhé: https://www.facebook.com/vohungvi
cho em hỏi là ảnh dương cũng phải tạo file vec như ảnh âm không?
Ảnh âm không cần tạo file vec nhé, lưu ý ảnh âm là ảnh không chứa đối tượng