是否会有用于 USB3 Vision and/or GigE Vision 相机的类 libdc1394 API?

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

由于火线相机因其带宽限制而变得过时,相机制造商似乎正在转向 USB 3.0 或千兆以太网接口。两者都有许多制造商都遵守的 USB3 Vision 和 GigE Vision 标准。

但是,似乎每个制造商(Basler、Pointgrey、Ximia 等)都有自己的 SDK 来连接他们的相机。在开发应用程序时,开发人员需要学习并与每个 API 进行交互,这很痛苦,或者坚持一个制造商。我可能会被误解,但在那种情况下,如果开发人员需要使用依赖于制造商的 APIs,那么行业标准的意义何在?

对于火线相机,开发人员可以访问 libdc1394 跨平台、高级 API。他们不需要担心谁制造了相机,也不必编写单独的驱动程序。 USB3 Vision 和 GigE Vision 甚至可能实现这样的功能吗?如果可以,谁来开发?

我对libdc1394不是很熟悉,但是其他的接口我都知道一点点。 USB3 Vision、GigE Vision 和所有其他标准可以使用一个通用接口连接: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.

大多数最大的相机生产商都提供 GenTL 提供商来使用他们的相机。

不幸的是,我不知道 GenICam 的任何开源高级 Api。我知道 2 个支持 GenICam 的图像处理库:Adaptive Vision Library and Halcon 但它们不是免费的。

另外一个不太流行的行业通用图片抓取接口是:DirectShow。 例如,Ximea、Net-Gmbh、Basler 和几乎所有网络摄像头都支持 DirectShow。

所以在我看来,如果您想为所有相机使用一个通用接口,您应该考虑使用 GenICam 接口。

至少对于 GigEVision,让我提一下 Aravis 项目可用于 linux。它本来是一个 GenTL/GenICam 库,但由于下面概述的驱动程序限制问题,目前仅支持 GigE。

首先,我同意 Martin 的观点,即出于竞争和支持原因,创建通用 SDK 不符合相机制造商自身的利益。制造商结合他们的 SDK 开发专有的 USB 驱动程序(用于 USB3Vision)和 NIC 过滤器驱动程序(对于 GigE 是可选的,但强烈推荐)。它激励他们将用户锁定在他们的生态系统中,并将他们与竞争对手区分开来。

这就是我不同意 AdamF 的原因 - 我认为 GenTL 并未得到相机制造商的广泛支持,尤其是对于 GigE 或 USB3Vision 相机。支持 GenTL 将有效地允许用户使用任何通用 SDK ,同时仍然利用制造商的专有驱动程序

我认为此时 OpenCV 支持 GenTL 而不是 GigE/U3V 会更容易,因为跨可用硬件平台开发 GigE/U3V 驱动程序存在巨大障碍。在这一点上,GenTL 支持至少只是一个基于软件的界面。

查看 https://github.com/ni/usb3vision

它将核心 USB3 Vision 规范作为内核驱动程序实现。要控制相机,您仍然需要围绕它包装一些用户模式逻辑,将其连接到 GenApi(GenICam 的参考实现)以及处理缓冲区 queued/de-queued 到驱动程序。

此外,关于您关于是否可以实现独立于供应商的驱动程序的问题,当然可以。这确实是标准的重点。大多数相机供应商出于各种原因为其相机提供自己的专有 SDK,但也有独立的 SDK 可与任何符合标准的 GigE Vision 和 USB3 Vision 相机配合使用。这些是否是开源的是一个很好的问题,我不知道有没有。上述USB3 Vision驱动使用的是National Instruments的IMAQdx驱动,商业闭源

一个旧线程,但万一有人来看...

加 1 用于 Aravis 开源和 Linux。在我撰写此回复时,该项目现在支持 USB3 Vision 相机,尽管有些比其他的更好。目前 Github 的 repo 上有很多 activity

在付费方面(至少在 windows 中)有一个 API 称为 ActiveUSB(用于 USB3 摄像头)和 A&B Software 的 ActiveGigE。我没有使用 GigE 软件的经验,但使用过他们提供的 USB3 视觉库,只要它们符合 GeniCam 标准,它就适用于不同的相机。它还提供试用期,让您决定它是否适合您。它可用于 Python、C、C# 和 VB 语言。如果您正在开发商业产品/解决方案,那么值得一看。另一方面,如果您不想或无力花钱,那么 Aravis 就是您的不二之选。

还值得注意的是,一些制造商开始提供用 Python 编写的演示,可用于创建您自己的 API。如前所述,这仅限于与制造商的相机一起使用,并且除非您具有良好的代码编写技能,否则不容易互换。