Hello Friends,
I have received a bunch of emails on this special Topic of vehicle detection(Thank you all for your feedback). So, here is the much demanded and simplest Vehicle Detection System using OpenCV.
I noticed that there are many other websites that are offering vehicle detection System but none of them provide it for three specific things:
a) Windows 10
b) 64- bit program
c) OpenCV 3.2 & above
Therefore, i decided to write my own program based on these requirements. OpenCV comes with an in-built trainer as well as detector. If you want to train your own classifier for any object like car, planes etc. you can use OpenCV to create one. Its full details are given here: Cascade Classifier Training.
Here is how the program looks like when it runs:
Let’s get started. For this program, we are going to be use our same build environment that we created using the following post: Configure OpenCV 3.3 on Windows 10 x64 with Visual Studio 2015
Pre-requisites:
1) OpenCV 3.2 & above build environment
2) Patience !! 🙂
Step I: Launch Visual Studio
-> Create a new project and name it “vehicle tracking”
-> Create a new file “main.cpp” under Source Files of your project
-> Set your build environment from the top navbar of Visual Studio to Win64
-> Right click the properties of your project and add the OpenCV includes and Libraries. if you are unsure on how to do that, follow this tutorial. Configure OpenCV 3.3 on Windows 10 x64 with Visual Studio 2015
Remember, we are looking for following Libs to be added:
opencv_core320.lib
opencv_highgui320.lib
opencv_imgproc320.lib
opencv_imgcodecs320.lib
opencv_video320.lib
opencv_videoio320.lib
opencv_objdetect320.lib
This completes your initial setup.
Step II : Compiling the code
Copy the below source to your main.cpp file and compile it using either Ctl+F5(debug) or simply F5(without debug)
//Code from pythonopencv.com
//Vehicle detection program
#include
#include
const int KEY_SPACE = 32;
const int KEY_ESC = 27;
CvHaarClassifierCascade *cascade;
CvMemStorage *storage;
void detect(IplImage *img);
int main(int argc, char** argv)
{
std::cout width*input_resize_percent) / 100), (int)((frame1->height*input_resize_percent) / 100)), frame1->depth, frame1->nChannels);
int key = 0;
do
{
frame1 = cvQueryFrame(capture);
if (!frame1)
break;
cvResize(frame1, frame);
detect(frame);
key = cvWaitKey(33);
if (key == KEY_SPACE)
key = cvWaitKey(0);
if (key == KEY_ESC)
break;
} while (1);
cvDestroyAllWindows();
cvReleaseImage(&frame);
cvReleaseCapture(&capture);
cvReleaseHaarClassifierCascade(&cascade);
cvReleaseMemStorage(&storage);
return 0;
}
void detect(IplImage *img)
{
CvSize img_size = cvGetSize(img);
CvSeq *object = cvHaarDetectObjects(
img,
cascade,
storage,
1.1, //1.1,//1.5, //-------------------SCALE FACTOR
1, //2 //------------------MIN NEIGHBOURS
0, //CV_HAAR_DO_CANNY_PRUNING
cvSize(0, 0),//cvSize( 30,30), // ------MINSIZE
img_size //cvSize(70,70)//cvSize(640,480) //---------MAXSIZE
);
std::cout total total : 0); i++)
{
CvRect *r = (CvRect*)cvGetSeqElem(object, i);
cvRectangle(img,
cvPoint(r->x, r->y),
cvPoint(r->x + r->width, r->y + r->height),
CV_RGB(255, 0, 0), 2, 8, 0);
}
cvShowImage("video", img);
}
Step III: Running the program
Once you hit F5, and everything is configured properly, you’ll notice that the program runs and exits immediately. This happens because we have to pass arguments in order to run it properly.
Navigate to the project directory by right clicking on the project and click on “Open in Windows Explorer” and find the project .exe file.
Following is the syntax to run this program.
In our case, it would be:
vehicle_tracking.exe cars.xml video1.mov
Here is the link to download cars.xml .
Also, if you want dummy videos to test, you can use either of the below video files:
Enjoy and happy coding!!