Camunits consists of an image acquisition library, algorithms, and tools designed specifically for machine vision researchers. It was originally designed and used by Team MIT for real-time vision-based lane estimation in the 2007 DARPA Urban Challenge, and is now being developed and released as an open source project.
Camunits is written in C and uses GLib.
Features
Camunits is divided into several pieces.
| libcamunits | Provides the core functionality of Camunits, which includes classes for acquiring images from USB and Firewire cameras, logging and replaying image streams, performing colorspace conversions and image compression/decompression, and connecting image processing elements together |
| libcamunits-gtk | Provides GTK widgets for libcamunit objects for easily adding GUI elements. |
| camview | Debugging tool and general purpose Camunits application |
| camunits extra | Provides image processing and acquisition plugins that may contain nonstandard dependencies, or algorithms for special interest purposes. |
Requirements
Camunits currently works on the GNU/Linux and OS X operating systems. libcamunits has a few main dependencies
- GLib
- OpenGL
- libjpeg
IEEE 1394 Digital Camera support is provided as a plugin, and requires libdc1394 version 2.x:
Documentation
- DownloadingAndInstalling
- Tutorial
- API Reference (partially complete)
- Core plugins
- Frequently Asked Questions (FAQ)
- To ask questions, submit patches, and contact the developers, use the camunits mailing list, accessible at http://groups.google.com/group/camunits
News
Apr 20, 2009 - Release 0.2.1
This is a maintenance release.
- libcamunits:
- remove usage of libc math functions
- unit manager unset singleton on finalize
- core plugins:
- input.dc1394: re-init dc1394 unit when packet size changes.
- convert.fast_debayer: fix regression (auto-setting of tiling control)
- convert.to_rgb8: add UYVY as acceptable input
- camunits-extra:
- add ipp.filter-sobel
- build system:
- set AM_CFLAGS instead of CFLAGS
Mar 11, 2009 - Release 0.2.0
This release features a wide-ranging API overhaul, and breaks the old API in many ways.
- Most classes have had all of their fields moved away from the public structs
and into private structs. This is so that future changes do not result in any API or ABI incompatibilities, and is in keeping with GTK+3 plans. Currently, the only classes that still have publicly exposed fields in their structs are: CamUnitFormat, CamFrameBuffer
- CamUnitManager has been converted to follow a singleton pattern
- CamUnitControl has been modified so that enumerated controls no longer have
integer values implicitly assigned by ordering. integer values associated with enumerated controls are now explicitly assigned, using arrays of CamUnitControlEnumValue structs.
- All core units have been converted to plugins. All functions specific to
core units have been removed from the API.
- when adding an output format, max_data_size is no longer specified.
- convert.to_rgb now uses IPP and Framewave JPEG decompression plugins from
camunits-extra if they are available
Camunits Core
- new functions:
- cam_unit_manager_get_and_ref
- cam_unit_add_output_format
- cam_unit_control_get_enum_values
- cam_unit_control_get_name
- cam_unit_control_get_id
- cam_unit_control_get_control_type
- cam_unit_control_get_control_type_str
- new structs:
- CamUnitControlEnumValue
- removed functions:
- cam_unit_manager_new
- cam_unit_chain_new_with_manager
- cam_unit_chain_get_manager
- cam_unit_add_output_format_full (changed, renamed: cam_unit_add_output_format)
- cam_unit_set_id
- cam_unit_set_name
- cam_unit_control_get_type_str (renamed: cam_unit_control_get_control_type_str)
- all functions related to core units have been removed.
- modified functions: (parameter list has changed)
- cam_unit_add_control_enum
- cam_unit_control_new_enum
- cam_unit_control_modify_enum
- cam_unit_set_preferred_format (new parameter added: const char *name)
Camunits GTK
- removed functions:
- cam_unit_manager_set_manager
- modified functions: (parameter list has changed)
- cam_unit_manager_widget
Feb 15, 2009 - Release 0.1.2
Camunits changes:
- add plugin example
- add jpeg decompress to grayscale
- add --plugin-path command line option to camview and camlog
- modify convert:fast_debayer to handle data that's not already 16-byte aligned
- convert CamInputV4L to plugin.
- disable V4L plugin by default. V4L2 is still enabled by default.
This also marks the first release of Camunits-extra, which has the following plugins:
- Intel IPP
- JPEG Decompress
- JPEG Compress
- Resize
- Pyramid Downsample Gaussian
- Gaussian Fixed Filter
- AMD Framewave
- JPEG Decompress
- JPEG Compress
- Resize
- OpenCV
- Canny Edge demo
- GoodFeaturesToTrack demo
- Undistort
- Utilities
- image throttling
- snapshot
- convert to grayscale
- dump images as files
- LibCVD
- FAST features demo
- KLT (Birchfield)
- KLT feature tracker demo
- Lightweight Communications and Marshalling (LCM)
- image publish
- image receive
- synchronize Camunits log file input with LCM
Screenshots
Click on each image for a higher resolution version
camview
Camview, running with a Logitech Quickcam 5000 Pro
lane_finder
lane_finder, a real-time lane-detection application developed with libcamunits and libcamunits-gtk for the 2007 DARPA Urban Challenge.

