Video-based transportation data collection
Because I am relying on OpenCV http://opencv.willowgarage.com/wiki/ 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 look nicer and nicer).
I have started a wiki page with some resources on the project: http://wiki.polymtl.ca/transport/index.php/FeatureBasedTracking. It was meant for a potential collaboration with Carleton and for a student I am currently working with (he finishes at the end of August and I am not sure yet that we will build upon what he did). There are resources and recommendations. 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: 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 We are also interested in other techniques such as 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) and object detection/classification (http://lear.inrialpes.fr/people/triggs/pubs/Dalal-cvpr05.pdf, available in OpenCV) which can be used for tracking by detection (http://www.vision.ee.ethz.ch/showroom/tracking/).
- 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.
In term of platform, 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, which I haven't delved into yet).
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++