【问题标题】:Will there ever be a libdc1394-like API for USB3 Vision and/or GigE Vision cameras?是否会有用于 USB3 Vision 和/或 GigE Vision 相机的类似 libdc1394 的 API?
【发布时间】:2015-06-21 14:36:46
【问题描述】:

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

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

对于火线相机,开发人员可以访问 libdc1394 跨平台的高级 API。他们不必担心谁制造了相机,也不必编写单独的驱动程序。 USB3 Vision 和 GigE Vision 是否也能做到这一点?如果有,谁来开发?

【问题讨论】:

    标签: camera computer-vision standards


    【解决方案1】:

    至少对于 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 支持至少只是一个基于软件的界面。

    【讨论】:

    • Aravis 还支持 USB3 视觉设备。 PixeLINK 和 Flir (Point-Grey) 都将 libusb-1.0 用于 U3V 设备。没有专有驱动程序。它只有三个端点。 GenTL 是更高层,如 TCP/IP。 IP 可以在 TokenRing、以太网、PPP 等上工作。下面的层都有很好的文档记录。我同意供应商不希望人们使用其他产品的观点。但是,可以创建一个适用于多个供应商设备的程序。
    【解决方案2】:

    我对 libdc1394 不是很熟悉,但我对所有其他接口都了解一点。 USB3 Vision、GigE Vision 和所有其他标准可以使用一个通用接口连接:GenICam

    GenICamTM 的目标是提供一个通用的编程接口 适用于各种相机和设备。不管是什么界面 技术(GigE Vision、USB3 Vision、CoaXPress、Camera Link HS、 Camera Link、1394 DCAM 等)他们正在使用或他们是什么功能 实现,应用程序编程接口(API)应该是 总是一样的。

    GenICamTM 标准由多个模块组成,根据 主要任务:

    GenApi:配置相机。

    标准 功能命名约定 (SFNC):标准化名称和类型 常见的设备功能。包括像素格式命名约定 (PFNC)。

    GenTL:传输层接口,抓取图像。

    CLProtocol:用于 Camera Link 的 GenICam。

    GenCP:通用控制协议。

    GenTL SFNC:传输层接口的推荐名称和类型。

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

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

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

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

    【讨论】:

    • 这个帖子已经有一年多了,但我有几个问题。 “GenTL 提供者”是指传输层实现吗?我是 GenICam 的新手,所以我不确定谁实现了传输层。我是否希望符合 GenICam 的相机供应商提供 XML 文件描述符和传输层实现?
    • 大多数相机供应商提供他们的 GenTL 实现(cti 文件)和 xml 文件。 GenTL 标准描述了如何接收 xml 文件。有关更多详细信息,您应该阅读此处提供的标准规范:emva.org/standards-technology/genicam/genicam-downloads
    【解决方案3】:

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

    它将核心 USB3 Vision 规范实现为内核驱动程序。要控制摄像头,您仍然需要在其周围封装一些用户模式逻辑,将其连接到 GenApi(GenICam 的参考实现),并处理排队/取消排队到驱动程序的缓冲区。

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

    【讨论】:

    • 我不会推荐这个内核模块。它主要用于国家labview计划。使用更新的 Linux 内核 libusb-1.0 和 libusb_dev_mem_alloc。您可以使用 payload count 将应用程序缓冲区拆分为 Linux 将使用 CMA 分配或配置的数量。不需要这个内核模块。
    【解决方案4】:

    一个旧线程,但以防其他人来看......

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-01-10
      • 2020-09-28
      • 1970-01-01
      • 2017-05-09
      • 2012-12-05
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多