2011-08-29 7 views

Trả lời

31

Bộ phân loại xếp tầng Haar hoặc LBP là kỹ thuật phổ biến được sử dụng để phát hiện hoặc các đối tượng cứng nhắc. Vì vậy, đây là hai điểm chính để đào tạo tầng thác của riêng bạn:

  1. Cascades đến với OpenCV không bao gồm tất cả các loại đối tượng có thể. Vì vậy, bạn có thể sử dụng một trong các thác OpenCV nếu bạn định tạo một ứng dụng nhận diện khuôn mặt nhưng không sẵn sàng sử dụng các thác nếu bạn cần phát hiện các con chó ví dụ.

  2. Và thác từ OpenCV là tốt nhưng chúng không phải là tốt nhất có thể. Đây là một nhiệm vụ đầy thách thức nhưng có thể đào tạo một tầng thác có tỷ lệ phát hiện cao hơn và tạo ra ít tích cực giả và âm tính giả.

Và một nhận xét chính: ứng dụng haartraining được sử dụng trong hướng dẫn của bạn hiện được coi là không được đội OpenCV phản đối. opencv_traincascade là phiên bản mới hơn và có 2 tính năng quan trọng: hỗ trợ tính năng LBP và hỗ trợ tính năng đa luồng (TBB). Sự khác biệt điển hình trông giống như thế này

haartraining + singlecore> 3 tuần cho một trình phân loại.
traincascades + multicore < 30 phút cho một trình phân loại.

Nhưng điều tồi tệ nhất là tôi không biết bất kỳ hướng dẫn hay nào giải thích cách sử dụng opencv_traincascade. Xem this thread để biết chi tiết.

+0

Trả lời poster hoặc bất kỳ ai biết nếu điều này đã thay đổi, tức là nếu có bất kỳ hướng dẫn nào có sẵn trên opencv_traincascade, bây giờ sau 3 năm? – icarus74

+2

Bạn đã xem http://docs.opencv.org/doc/user_guide/ug_traincascade.html chưa? –

+0

Thật vậy, tôi đã không. Tôi đã thấy việc sử dụng Haar Cascade nhưng không phải là cách để luyện tập. Cảm ơn đã chỉ ra điều đó. – icarus74

2

Tôi có thể cung cấp cho bạn một ví dụ về Linux. Mã và kỹ thuật được lấy từ nhiều nguồn khác nhau. Nó theo sau this example nhưng với một phiên bản python của mergevec, do đó bạn không phải biên dịch tệp mergevec.cpp.

Giả sử rằng bạn có hai thư mục với cắt & sẵn sàng & hình ảnh tiêu cực dương (.png file trong ví dụ này), bạn tạo ra hai tập tin văn bản với tất cả các tên hình ảnh trong:

find positive_images -iname "*.png" > positives.txt 
find negative_images -iname "*.png" > negatives.txt 

Sau đó, sử dụng createsamples.pl kịch bản được cung cấp bởi Naotoshi Seo (trong OpenCV/thư mục bin), trong đó có hai tập tin văn bản và một thư mục đầu ra, và tạo ra các tập tin .vec:

perl createsamples.pl positives.txt negatives.txt 'output' 1500 "opencv_createsamples -bgcolor 0 -bgthresh 0 -maxzangle 0.5 -w 50 -h 50" 

Follow rằng với một scri python pt tạo ra bởi Blake Wulfe gọi mergevec.py, mà sẽ tạo ra một tập tin output.vec bằng cách kết hợp tất cả các file trong thư mục con .vec

python mergevec.py -v samples -o output.vec 

Giả sử đó là tất cả được thực hiện, sử dụng opencv_traincascade như sau sẽ giúp:

opencv_traincascade -data classifier -vec output.vec -bg negatives.txt \ 
    -numStages 10 -minHitRate 0.999 -maxFalseAlarmRate 0.5 -numPos 200 \ 
    -numNeg 400 -w 50 -h 50 -mode ALL 

Nếu tất cả mọi thứ diễn ra tốt đẹp, hãy sử dụng tầng mới được tạo của bạn (classifier/cascade.xml) với thứ gì đó giống như facesetect.py từ các mẫu opencv:

opencv-3.0.0-rc1/samples/python2/facedetect.py --cascade classifier/cascade.xml test_movie.mp4