Project - ICTrack: A Flexible Toolbox for Tracking
As computers become more powerful, they facilitate the possibility of more sophisticated and more powerful tracking algorithms. The knowledge gap between the novice and the expert continues to widen. Even for experts, there can be a significant time cost to instantiate an algorithm - even if it is for comparison purposes only. Enter ICTrack. Our goal is two fold. For the novice, we create a flexible interface that the novice can use to manipulate advanced algorithms without having to know the sometimes pedantic details. For the expert, we provide a framework for developing new algorithms and testing them verus existing techniques.
The fundamental building block of this project is the module. By modularizing algorithms, the toolbox will facilitate quick tracking experiments with disparate algorithms. Similar to configuring "filters" in Microsoft DirectX, a module can be placed in the workspace and then connected to other modules. Each module will represent a unique type of tracking algorithm. Within each module, it will be possible to configure the settings or choose different flavors of the algorithm. For example, the MeanShift module will allow you to choose from a various implementations including vanilla MeanShift or CamShift. An expert may choose to add different variations to a given module, or add an entirely new module to the framework.
For speed purposes, the entire toolbox will be built in c++. Each module is a c++ class which is inherited from a base class of similar type. In other words, all of the input modules will inherit from the base_input module, even though their outputs may be disparate. Although the modules are confined to a c++ class, the ICTrack toolkit as a whole can draw upon functions from a variety of sources/libraries. OpenCV is a popular computer vision library with a breadth of various algorithms, tools and utilities. Someone who wants to contribute to ICTrack will have access to any of the functions in OpenCV.
For the expert user, it will provide a powerful platform to develop new algorithms. For the novice, it will provide a bridge to complex algorithms. An example of connecting the modules can be seen at the top of this web page. The following are some screen shots from that particular experiment. First, by configuring each module we can select an input template and specify to use CamShift (for one of the modules, we used CamShift, the other MeanShift):
Some of the other modules currently in the toolbox are a camera (using VFW and/or DirectX), a file reader ("FR"), file output ("FO") and a video display ("out display"). After configuring all modules, the user then executes the graph by pressing "Execute". ICTrack then traverses the graph. In this case, it has determined that there are two videos to display. Frame by frame, it correctly displays the results from each branch. The video on the left ("1") is MeanShift and the video on the right is the result of CamShift.
There are many applications for ICTrack. One such scenario would be to track cars in a parking lot. Currently, the ICTrack team is developing the "parking lot scenario" which will add modules to the toolkit such as a frame differencer and a helper to calibrate available cameras. The frame differencer will initially use the Stauffer-Grimson Mixture of Gaussian (MoG) technique to segment foreground vs. background. Of course, there are many high level issues to address that will be part of the scenario but not necessarily the frame differencing module (such as car detection and statistical analysis of available spaces).
Commercial for the Parking Lot Application (based on algorithms embedded in ICTrack) [length = 7:02, 72.1MB, WMV]
Abbreviated Commercial for the Parking Lot Application (based on algorithms embedded in ICTrack) [length = 3:26, 33.9MB, WMV]
Any suggestions or comments are welcome. Please send them to Ted Square.