People Detection and Tracking

2019-03-14 00:57发布

问题:

I want to do pedestrian detection and tracking.

Input: Video Stream from CCTV camera.

Output:

  1. #(no of) people going from left to right
  2. # people going from right to left
  3. # No. of people in the middle

What have i done so far: For pedestrian detection I am using HOG and SVM. The detection is decent with high false positive rate. And its very slow as i am running in android platform.

Question: After detection how to do I calculate the required values listed above. Can anyone tell me what is the tracking algorithm I have to use and any good algorithm for pedestrian detection.

Or should I use tracking algorithm? Is there a way to do without it?

Any references to codes/blogs/technical papers is appreciated.

Platform: C++ & OpenCV / android.

--Thanks

回答1:

This is somehow close to a research problem.

You may want to have a look to this website which gathers a lot of references. In particular, the work done by the group from Oxford present therein is pretty close to what you are doing, since their are using HOG for detection. (That work has been extremely illuminating for me). EPFL and Julich have as well work done in the field.

You may also want to give a look to this review which describes several detection/tracking techniques, often involving variants of the HOG algorithm.



回答2:

Along with @Acorbe response, I suggest the publications section of this website.

A recent work at the end of last year also released a code base here: https://bitbucket.org/rodrigob/doppia

There have also been earlier pedestrian detector works that have released code as well: https://sites.google.com/site/wujx2001/home/c4 http://www.vision.caltech.edu/Image_Datasets/CaltechPedestrians



回答3:

The best accurate way is to use tracking algorithm instead of statistic appearance counting of incoming people and detection occurred left right and middle.. You can use extended statistical models.. That produce how many inputs producing one of the outputs and back validate from output detection the input.

My experience is that tracking leads to better results than approach above. But is also little bit complicated. We talk about multi target tracking when the critical is match detection with tracked model which should be update based on detection. If tracking is matched with wrong model. The problems are there.

Here on youtube I developed some multi target tracker by simple LBP people detector, but multi model and kalman filter for tracking. Both capabilities are available in opencv. You need to when something is detected create new kalman filter for each object and update in case you match same detection. Predict in case detection is not here in frame and also remove the Kalman i it is not necessary to track any more. 1 Detect 2 Match detections with kalmans, hungarian algorithm and l2 norm. (for example) 3 Lot of work. Decide if kalman shoudl be established, remove, update, or results is not detected and should be predicted. This is lot of work here. Pure statistic approach is less accurate, second one is for experience people at least one moth of coding and 3 month of tuning.. If you need to be faster and your resources are quite limited. You can by smart statistic achieve your results by pure detection much faster and little bit less accurate. People are judge the image and video tracking even multi target tracking is capable to beat human. Try to count and register each person in video and count exits point. You are not able to do this in some number of people. It is really repents on, what you want, application, customer you have, and results you show to customers. If this is 4 numbers income, left, right, middle and your error is 20 percent is still much more than one bored small paid guard should achieved by all day long counting..

https://www.youtube.com/watch?v=d-RCKfVjFI4

You can find on my BLOG Some dataset for people detection and car detection on my blog same as script for learning ideas, tutorials and tracking examples.. Opencv blog tutorials code and ideas



回答4:

You can use KLT for this purpose as this will tell you the flow of person traveling from left to right then you can compute that by computing line length which in given example is drawn using cv2.line you can use input parameters of this functions to compute your case, little math involved. if there is a flow of pixels from left to right this is case 1 or right to left then case 3 and for no flow case 2. Or you can use this basic tutorial to track object movement. LINK