H. G. Dietz
Department of Electrical and Computer Engineering
Center for Visualization & Virtual Environments
University of Kentucky, Lexington, KY 40506-0046
Initial release: May 29, 2007
Although nearly every camera that directly supports tethered remote control of any kind comes with software providing access to that functionality, that software is usually in the form of a GUI-based application for Windows. What we want is camera control not by a human operating the computer, but by programs implementing intelligent control with little or no human intervention... and the GUIs are ill suited to this. There is very little standardization of the software interfaces, so even when a vendor SDK is available, using it tends to tie the software to a particular vendor and, often, a particular camera model. Also, we don't all run Windows.
The following software packages all make it fairly easy to have a program under Linux (and perhaps other operating systems) control one or more cameras. The primary problem is that there isn't one package that knows how to control everything.
This package is about as close to a generic camera control system as anybody has yet written. Quite a few digital still cameras are supported, although only a small fraction can capture images under tethered control. The current list is at gPhoto Doc :: Remote controlling cameras. There is often a significant time lag between a camera being introduced and it being supported by gPhoto2, so you'll usually want to grab the latest source code, compile, and install it rather than to trust that the default .rpm or .deb of gPhoto2 is recent enough.
Especially in the timeframe when most digital still cameras talked to computers via RS232C serial links rather than USB, there was somewhat of a defacto industry standard for camera control. PhotoPC thus works well with many RS232C cameras and, in this version, also with a modest number that use the same protocol with USB transport.
Capture claims to be preferable to gPhoto2 only in that it more efficiently handles the camera in capture of sequences of images, but I have found that it works for some cameras where gPhoto2 doesn't. For example, it can capture images using a Canon PowerShot G5. It only works with certain Canon still cameras.
This rather old program implements enhanced (as compared to gphoto) control of Kodak DC21x digital cameras. The quality of images from my DC210 is not great by current standards, but if you've got one collecting dust, it does make an interestingly feature-full toy for computer control. I'm not sure where to find the official release of this software on the web, so here's a local copy of digicam-1.20.tar.gz.
FujiPlay can control certain (old) RS232C Fuji cameras, including provision for taking a picture under computer control. This is probably obsoleted by PhotoPC..
If you are fortunate enough to have an IEEE 1394 (FireWire) Digital Camera (not to be confused with a FireWire video camera), then things are relatively straightforward in that the IEEE specification standardizes the control protocol. Of course, not eveything is implemented on all cameras, nor with the same parameter ranges. Anyway, Coriander will work with any compliant digital camera.
Although FireWire supports Digital Cameras (see Coriander above), it is most commonly used for DV camcorders. The IEEE 1394 (FireWire) AV/C specification standardizes the control protocol for these video devices -- which has nothing to do with the DC protocol. LibAVC provides the control programming interface for AV/C (Audio/Video Control) devices. Software using that interface ranges from the very simple dvcont to various video editing applications, such as kino.
Webcams may be cheap and very common, but they are not a true commodity -- there really isn't a standard software interface for their control. Many, but still not most, have been given the appearance of a standardized interface by drivers for video4linux (either the original v4l or v4l2). This also is the prefered way to access video digitizers under Linux and Coriander allows IEEE 1394 cameras to generate a v4l2 stream.
Assuming v4l2 supports your camera, the key problem is that v4l2 has to deal with a huge number of different types of image feeds. The result is that v4l2 is to video streams what TIFF is to still images: it is more of a standard wrapper describing how data is formatted than a standard for how the data is formatted. Thus, many programs that use v4l2 don't work unless the data happens to be in one of the formats that tool knows. There are, however, lots of v4l2 programs to pick from: xawtv, camorama, camsource, fswebcam, gcam, sonic-snap, iCam2, ....
This is still around? Yup! If any of you (like me) still have one of the old Color QuickCam webcam-like cameras that talks via the parallel port, cqcam is just what you need.
qcread can control capture from any of a variety of old parallel-port Connectix QuickCams, both color and monochrome.
XFqcam is yet another package for control of old QuickCam parallel port cameras (the monochrome ones).
mcamip simply grabs images from a network camera. I have found it to be very stable over an extended period of use with a D-Link DCS-900.
ipcam simply grabs images from a network camera.
PfControl controls parameters and capture using "pixelfly" cameras.
The only thing set in stone is our name.