Search code examples
computer-visioncamerastandardsgigevision

Will there ever be a libdc1394-like API for USB3 Vision and/or GigE Vision cameras?


As firewire cameras are becoming obsolete because of their bandwidth limitations, it seems as though camera manufacturers are switching to USB 3.0 or Gigabit Ethernet interfaces. Both have standards USB3 Vision and GigE Vision, which many manufacturers are adhering to.

However, it seems as though each manufacturer - Basler, Pointgrey, Ximia, and others - has its own SDK for interfacing with their cameras. When developing an application, developers would need to learn and interface with each API which is a pain, or stick to one manufacturer. I may be misunderstood but, in that case, what is the point of an industry standard if developers need to use manufacturer dependent APIs?

For firewire cameras, developers have access to libdc1394 cross-platform, high level API. They do not need to worry about who manufactures the camera and do not have to write separate drivers. Is something like this even possible for USB3 Vision and GigE Vision? If so, who would develop it?


Solution

  • I'm not very familiar with libdc1394, but I know a little bit most of all other interfaces. USB3 Vision, GigE Vision and all other standards may be connected using one common interface: GenICam :

    The goal of GenICamTM is to provide a generic programming interface for all kinds of cameras and devices. No matter what interface technology (GigE Vision, USB3 Vision, CoaXPress, Camera Link HS, Camera Link, 1394 DCAM, etc.) they are using or what features they are implementing, the application programming interface (API) should be always the same.

    The GenICamTM standard consists of multiple modules according to the main tasks to be solved:

    GenApi: configuring the camera.

    Standard Feature Naming Convention (SFNC): standardized names and types for common device features. Includes Pixel Format Naming Convention (PFNC).

    GenTL: transport layer interface, grabbing images.

    CLProtocol: GenICam for Camera Link.

    GenCP: generic control protocol.

    GenTL SFNC: recommended names and types for transport layer interface.

    Most of the biggest camera producers supplies GenTL providers to work with their cameras.

    Unfortunately I don't know any open source High Level Api for GenICam. I know 2 image processing libraries with GenICam support: Adaptive Vision Library and Halcon but they are not cost free.

    Another less popular in industry common image grabbing interface is: DirectShow. DirectShow is supported for example by: Ximea, Net-Gmbh, Basler and almost all web cameras.

    So in my opinion if you want to use one common interface for all cameras you should consider using GenICam interface.