Video-based transportation data collection
Sommaire
Methods for detection and tracking of road users
- Feature-based tracking is the main and a relatively easy detection and tracking algorithm
- my paper http://n.saunier.free.fr/saunier/stock/saunier06feature-based.pdf and the paper it is based upon http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.49.599&rep=rep1&type=pdf
- Some slightly older information http://wiki.polymtl.ca/transport/index.php/FeatureBasedTracking
- Background subtraction: the most common method is based on a mixture of Gaussians and available in OpenCV http://www.ai.mit.edu/projects/vsam/Publications/stauffer_cvpr98_track.pdf; lit review in http://staff.it.uts.edu.au/~massimo/BackgroundSubtractionReview-Piccardi.pdf
- Object detection/classification: http://lear.inrialpes.fr/people/triggs/pubs/Dalal-cvpr05.pdf, available in OpenCV, which can be used for tracking by detection, e.g. in http://www.vision.ee.ethz.ch/showroom/tracking/
Software Development
Because I am relying on OpenCV for computer vision functionality, and because C++ is fast, the previous software was written in C++. For the same reasons, the core most computationally intensive functions should be written in C++ (although the python wrappers are more and more usable). The most up to date documentation is at http://opencv.itseez.com.
The platform of choice for development is Linux (e.g. the Ubuntu distribution). I would like to have the code cross-platform, ie the C++ should compile at least under Windows and Linux, which is not too difficult if using the right tools (g++, make or CMake).
I am If you are not familiar with any of the following topic, please read more:
dedicated to developing quality software that can be easily maintained over the long term.
- C++ The faq lite is a great resource http://www.parashift.com/c++-faq-lite/ I recommend the use of smart pointers for ease of memory management (avoiding memory leaks in a program meant to process hours of video without crashing is essential) See Boost shared pointers http://www.boost.org/doc/libs/1_46_1/libs/smart_ptr/smart_ptr.htm
- Version Control: I refuse to work in teams without software version control. I use mercurial which has a fairly low barrier to entry and good documentation. http://mercurial.selenic.com/
- Test-driven development: writing tests takes a bit more time when developing, but helps in testing and ensures that the software still matches its specifications when refactoring later. I have used the Boost test library and it does the job http://www.boost.org/doc/libs/1_47_0/libs/test/doc/html/index.html, Google test is getting famous and is used in OpenCV.
- Computer vision algorithms: see above
- Python is nice for visualization, and the binding to OpenCV seem now pretty robust (less important)
I would like to make use of a project I supervised in the Google Summer of Code 2010 on a library for trajectory management, with I/O functions and a lot of distances implemented (https://bitbucket.org/trajectories/trajectorymanagementandanalysis). I also have a preliminary open source project at https://bitbucket.org/Nicolas/trafficintelligence/wiki/Home, but it has very little in computer vision.
Installation
- OpenCV: http://opencv.willowgarage.com/wiki/InstallGuide
- Traffic Intelligence: Coming soon
Resources
- Open source computer vision projects
- OpenCV http://opencv.willowgarage.com/wiki/
- http://code.google.com/p/opencv-feature-tracker/ (Warning: many bugs, not a good basis to build upon)
- https://bitbucket.org/Nicolas/trafficintelligence
- https://bitbucket.org/trajectories/trajectorymanagementandanalysis
- Version Control http://mercurial.selenic.com/
- C++