Evaluation of Logitech C910 webcam for Computer Vision use

I’ve recently been using a pair of PlayStation 3 Eye’s for reading structured light patterns projected onto objects. These particular cameras have had a lot of attention from hackers due to their value/performance.

The PS3Eye is a camera built for machine vision, and can provide ‘lossless’ 640×480 RGB frames at 60 frames per second with low latency, and is therefore particularly relevant for realtime tracking applications (e.g. multi-touch, 3-phase scanning). For OSX there is Maccam driver, and for Windows there is the fully featured CLEye driver from Alexp which supports programatic control of multiple cameras with full support for all camera features and also gives camera identity (through a GUID), and is free for 1 or 2 cameras per system.

But for a recent project, it became apparent that I needed resolution rather than framerate. My first instinct was to move to DSLR’s, and I began working with developing a libgphoto2 extension for openFrameworks called ofxDSLR. This route had the following issues:

  • Relatively expensive (compact cameras do not support remote capture, meaning I would have to use DSLR’s, with the cheapest compatible options at around £350 with lens – Canon 1000D+18-55mm lens)
  • Requires external power supply / recharging
  • Heavier than machine vision cameras
  • Flaky libraries (libghoto2 isn’t really built with CV in mind, and I found it was taking a lot of time to get results. And lack of solutions for Windows)
  • Slow capture (several seconds between send capture command and receive full result)

A DSLR offers:

  • Fantastic resolution
  • Great optics
  • Programmatic control of ISO, Focus, Shutter, Aperture
  • More than 8bits per colour

Due to the above issues, I decided to explore other options. This led me to the Logitech C910 which supports continuous capture at roughly 20x as many pixels as the PS3eye but at 1/120th of the frame rate.

Without further ado, here’s the video documentation (I recommend you chose either 720p or 1080p for viewing).

YouTube Preview Image

Notes:

Capture

Driver

  • UVC device (capture supported on all major desktop OS’s)
  • As of 1st April 2011, there is no way to programatically control the C910 from OSX, but this is likely to come soon (see here and here)
  • Programatic control from Windows through DirectShow. I recommend Theo Watson’s videoInput class for c++, which is included with openFrameworks or available as standalone.
  • I haven’t yet seen a way to uniquely identify a camera (Each PS3Eye can report its GUID identity, which is useful for recognising individual cameras in a multicam system)

Compression options

  • YUY2 (YUV 4:2:2) = lossless luminance, half resolution colour
  • MJPG = lossy, but higher frame rates supported than YUY2, since lower bandwidth required.

Programatic control of

  • Motorised focus
  • Shutter speed (aka exposure)
  • Gain (aka brightness)
  • ‘Hacky’ Region of Interest {ROI} (through digital Zoom, Pan, Tilt)

Focus

  • ~12 discrete focus steps (i.e. focus control is NOT continuous)
  • Furthest focus point is ~70cm, beyond this is classed as ‘infinity’
  • With sharpening turned off (i.e. getting more of the ‘raw’ image), we see a general lack of focus on surfaces other than at discrete steps
  • Closest macro focus at 3.5cm

Focus table [control value 0-255 / distance (cm)]

  • 255 / 3.5
  • 238 / 3.8
  • 221 / 4
  • 204 / 4.3
  • 187 / 5.3
  • 170 / 6.4
  • 153 / 8
  • 136 / 10.5
  • 119 / 15
  • 102 / 25
  • 85 / 40
  • 68 / 51

See also

Tags: , , , , ,

8 Responses to “Evaluation of Logitech C910 webcam for Computer Vision use”

  1. An Augmented Tree, and Free Tools Power 3D Voxel Projection — on Leaves Says:

    […] openFrameworks The GUI used is Kimchi and Chips’ ofxCVgui designed for non-runtime (offline) computer vision tasks. For numerical analysis we created ofxPolyFit For PS3Eye use we created ofxCLeye for Windows (but later moved to Logitech C910 discussed on our blog) […]

  2. Aaron Says:

    Great overview of the Logitech C910

  3. Sam Says:

    This is a very interesting demo. Have you tried experimenting with multiple C910s connected to the same computer?

    I’d really like to buy this camera for stereo vision experiments, but I’m reading conflicting accounts about successfully using it with various capture APIs or wrappers.

  4. Jonathan Says:

    Good overview. I’m particularly interested in the controls you have for the C910. I currently use it to take images of laser diffraction patterns (which sits in a box behind a translucent screen) but can’t input controls into the GUI we designed for capturing and measuring the images.
    Ultimately, i want to permanantly force the focus, contrast, white, colour balance etc to good values, capture still images with no compression (very important) and allow students to modify the exposure time and gain to capture the best images. All of this needs to be done in the GUI, not with the standard Logitech tools on the side.
    Is this sort of thing possible with the tools you used here?

  5. elliot Says:

    hey jonathan
    sorry for the late reply. didn’t see your message before
    which operating system are you running on?
    i found that generally in windows 7 you need to manually uninstall the logitech driver to get to the full settings pane
    (i.e. go into device manager and uninstall the driver, and then it should work with default windows driver)

  6. elliot Says:

    i generally worked with 2 C910’s attached to 1 PC
    For me it works well in windows, but you can’t access the properties in a stable way under osx. not sure about linux

  7. Artur Says:

    Hi Elliot, thanks for the informative review.

    I would like to ask, if you have managed to get 60fps in Windows? I ask, as I have not found any MJPEG settings in videoInput.

  8. elliot Says:

    @Artur – you’re correct, it’s actually non-trivial to get the mjpeg resolutions, but for computer vision they are generally less interesting (sometimes better to have lower res uncompressed than higher res but with artefacts)

    i think you’d have to go deep into theo’s videoInput library to find a way around this, or roll your own DirectShow input code.

    sorry i can’t help more!

Leave a Reply