Common Vision Blox 15.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Friends Modules Pages
What is GenICam?

Definition

GenICam (abbreviated for Generic Interface for Cameras) is a generic programming interface for machine vision (industrial) cameras. The goal of the standard is to decouple industrial camera interfaces technology (such as GigE Vision, USB3 Vision, CoaXPress or Camera Link) from the user application programming interface (API). For details, see Wikipedia and EMVA.

GenICam defines a GenTL (Generic Transport Layer) interface as an entry point. Implementations of this interface are referred to as GenTL producers, whereas users of this interface are referred to as GenTL consumers. CVB implements two main producers one for GigE Vision and one for USB3 Vision cameras but can consume any third party GenTL producer.

For generic device configuration CVB comes with a custom-built of an official GenApi version, therefore it is possible to run CVB alongside other GenICam-compliant third-party SDKs.

The CVB API does not directly expose the interfaces defined by GenICam, as they are complex and inconsistent in terms of ABI stability but offers a C-API/ABI for long term stability and object-oriented wrappers on top of it for .NET, C++ and Python.

GenICam Browser

For discovering, configuring and acquisition testing the CVB GenICam Browser can be used. GenICam Browser can also configure the legacy INI file to directly load the GenICam.vin in an application.

The GenICam Browser is available in the CVB installation folder, located at %CVB%Applications.

Use Cases

The following high-level use cases are supported in a hardware platform and transport layer technology independent way by CVB using GenICam interface. They can be tested with the GenICam Browser and are also available through the API.

Device Discover

Enumerate or discovery is based on the GenTL interface and is divided into different levels or modules. The first level refers to the different producer implementations available on the system. The second refers to interface (e.g. NIC, USB host controllers or frame grabbers). The third layer refers to devices, and the fourth layer to data streams delivering data. By default, CVB focusses on discovering accessible ready to use devices, but can also be used to discover other module layers. For more details see Device Discover.

Configuration of Camera Features

Once devices are discovered and opened, they can be configured through the GenApi. CVB presents all camera features as nodes in a tree-structure called node map. This node map is automatically constructed from an XML file provided by the camera. This way CVB can offer safe register access and handle self-describing devices. For aligned access configuration every GenTL module layer offers a node map (XML).

To reach true camera hardware independence many of these features are defined in the SFNC (standard feature naming convention). Such features are referred to as standard features and must follow defined naming and behavior on all devices that implement them.

Vendor- or device-specific features are referred to as custom features. These features may deliver a sophisticated description in the XML file.

Loading and Saving User Sets

Depending on the number of features available on a device and their relation configuring a device can be complex. Therefore, many devices offer User Sets to save and restore a set of features through selector and command nodes.

Down- and Uploading Files

The GenApi is also used to transfer files from and to the device. This is done by a standardized file transfer protocol involving several nodes. Note that the data transferred does not have to be an actual file, it could also be raw memory data. CVB node maps offer a convenient method for up and downloading to the device that does not require knowledge of the file transfer protocol. File down- and uploading is often used for calibration files or firmware updates, to avoid vendor-specific software. Note that there is also a different standardized way for firmware updates (see GenApi).

Streaming Images

In addition, most often GenTL producers also provide a data stream to fill buffers with acquired payload. In most common cases this data can be interpreted as images. Using the image stream class, CVB automatically interprets the data as an image.

Be aware that device configuration affects the payload types and required buffer sizes. For safety reasons some nodes will be read only when the stream is active. This access handling is done automatically by CVB (see also Acquisition and Streaming).

Streaming Generic Data

Beyond streaming images some devices deliver more complex data e.g. containing point clouds, multiple images, meta data (chunk data) or a combination of those. Analogous to image streams CVB also offers a point cloud stream to automatically interpret the payload. For manual interpretation or generic acquisition, CVB offers a composite stream (see also Acquisition and Streaming).

Camera Connection Monitoring

Depending on the transport technology, the GenTL producer can also send device events. These events can not only be used to detect configuration changes on nodes, but also to detect device disconnects and possible reconnects. CVB offers a platform and technology independent way to react to connection state changes by registering a callback on the device.

Frame Grabbers with Line-Scan Cameras

Using line-scan cameras with frame grabbers and GenTL producers is different from using USB3 Vision or GigE Vision producers. As such line-scan cameras do not deliver a 2D image the height is usually defined by the interface module (frame grabber) and requires a non-standard configuration through a custom node to define the image height.