Skip to main content

build a cascade of boosted classifiers based on Haar-like features

Step 1 -


Tools Needed:
You can find these executables as part of the opencv default installation. they are located in the BIN folder

Samples:
you should have alot of positive and negative images.
Take note that compressed images such as jpeg have certain issues therefore selecting a BMP image is recommended.

Create folders for the Negative and Positive images and include an info file aswell

Basically there should be four sets of images that you work on:
- a positive sample set representing your object that you want to train
- another positive sample set for testing purpose
- a negative sample set (or so-called backgrounds) for training
- and another negative sample set for testing, too

so your 2 folders containing the images are:
/opencv/project/negative
/opencv/project/positive
as well as the info file:
-train.txt
-test.txt

To work with these images in the utilities, a list of the files is needed. Using Win32 as host OS,
you can get the list via command promt. Move to the folder where the info file will be stored and
type “dir /b /s > infofile.txt”. Open “infofile.txt” and make the paths relative to the
info file (i.e. find “C:\Temp\negatives\” and replace with “”).

Step 2 - Test Creation
Once your done preparing you need to create a vec-file in the data folder. This is done by createsamples.exe by calling:
opencv_createsamples.exe -info positives/train.txt -vec data/positives.vec -num 1300 -w 20 –h 20
the numbers show 1300 samples with a width and height of 20
double check if the vec file really contains the desired images.

Step 3 Training
Im assuming the following the default values of hitrate (0.995), maxfalsealarm (0.5), weighttrimming (0.95) and boosting type (GAB, “Gentle Ada Boost”) are good in most cases we use the following call:"

haartraining.exe -data data/cascade -vec data/positives.vec -bg negatives/train.txt
-npos 1300 -nneg 5000 -nstages 30 -mem 1300 -mode ALL -w 20 -h 20
- 1300 positive images
- 5000 negative images
- 30 stages
- 1300 MB of RAM

Step 4 Testing

the test of hitrate and falsealarm will be done by calling

performance.exe -data data/cascade -info positives/testing/testing.txt -w 20 -h 20 -rs 30

Thats it, tell me how it goes.,,,

Comments

Popular posts from this blog

Computing Entropy of an image (CORRECTED)

entropy is a measure of the uncertainty associated with a random variable. basically i want to get a single value representing the entropy of an image. 1. Assign 255 bins for the range of values between 0-255 2. separate the image into its 3 channels 3. compute histogram for each channel 4. normalize all 3 channels unifirmely 5. for each channel get the bin value (Hc) and use its absolute value (negative log is infinity) 6. compute Hc*log10(Hc) 7. add to entropy and continue with 5 until a single value converges 5. get the frequency of each channel - add all the values of the bin 6. for each bin get a probability - if bin 1 = 20 bin 2 = 30 then frequency is 50 and probability is 20/50 and 30/50 then compute using shannon formula  REFERENCE: http://people.revoledu.com/kardi/tutorial/DecisionTree/how-to-measure-impurity.htm class atsHistogram { public:     cv::Mat DrawHistogram(Mat src)     {         /// Separate the image in 3 places ( R, G and B )    

Blob Detection, Connected Component (Pure Opencv)

Connected-component labeling (alternatively connected-component analysis, blob extraction, region labeling, blob discovery, or region extraction) is an algorithmic application of graph theory, where subsets of connected components are uniquely labeled based on a given heuristic. Connected-component labeling is not to be confused with segmentation. i got the initial code from this URL: http://nghiaho.com/?p=1102 However the code did not compile with my setup of OpenCV 2.2, im guessing it was an older version. so a refactored and corrected the errors to come up with this Class class atsBlobFinder     {     public:         atsBlobFinder()         {         }         ///Original Code by http://nghiaho.com/?p=1102         ///Changed and added commments. Removed Errors         ///works with VS2010 and OpenCV 2.2+         void FindBlobs(const cv::Mat &binary, vector < vector<cv::Point>  > &blobs)         {             blobs.clear();             // Fill the la

Region of interest selection ROI

#include <stdlib.h> #include <stdio.h> #include <math.h> #include <string.h> #include<opencv2\opencv.hpp> #include <opencv2\highgui\highgui.hpp> int main(int argc, char *argv[]) { CvCapture *capture = 0; IplImage *frame = 0; int key = 0; /* initialize camera */ capture = cvCaptureFromCAM( 0 ); /* always check */ if ( !capture ) { printf("Cannot open initialize webcam!\n" ); exit(0); } /* create a window for the video */ cvNamedWindow( "result", CV_WINDOW_AUTOSIZE ); while( key != 'q' ) { /* get a frame */ frame = cvQueryFrame( capture ); /* always check */ if( !frame ) break; /* sets the Region of Interest*/ cvSetImageROI(frame, cvRect(150, 50, 150, 250)); /* create destination image */ IplImage *img2 = cvCreateImage(cvGetSize(frame), frame->depth, frame->nChannels); /* * do the main processing with subimage here. * in this example, we simply invert the subimage