camera - ¿Alguna vez habrá una API similar a libdc1394 para las cámaras USB3 Vision y/o GigE Vision?
computer-vision standards (3)
No estoy muy familiarizado con libdc1394, pero sé un poco más que otras interfaces. USB3 Vision, GigE Vision y todos los otros estándares se pueden conectar usando una interfaz común: GenICam :
El objetivo de GenICamTM es proporcionar una interfaz de programación genérica para todo tipo de cámaras y dispositivos. No importa qué tecnología de interfaz (GigE Vision, USB3 Vision, CoaXPress, Camera Link HS, Camera Link, 1394 DCAM, etc.) estén usando o qué funciones estén implementando, la interfaz de programación de aplicaciones (API) debe ser siempre la misma.
El estándar GenICamTM consta de múltiples módulos de acuerdo con las principales tareas a resolver:
GenApi: configuración de la cámara.
Convención de nomenclatura de funciones estándar (SFNC): nombres y tipos estandarizados para las características comunes del dispositivo. Incluye la convención de nombres de formato de píxeles (PFNC).
GenTL: interfaz de la capa de transporte, captura de imágenes.
CLProtocol: GenICam para Camera Link.
GenCP: protocolo de control genérico.
GenTL SFNC: nombres y tipos recomendados para la interfaz de la capa de transporte.
La mayoría de los principales productores de cámaras suministra proveedores de GenTL para trabajar con sus cámaras.
Lamentablemente, no conozco ninguna fuente abierta de nivel alto Api para GenICam. Conozco dos bibliotecas de procesamiento de imágenes con soporte GenICam: Adaptive Vision Library y Halcon, pero no son gratuitas.
Otra interfaz de captura de imágenes común menos popular en la industria es: DirectShow . DirectShow es compatible, por ejemplo, con: Ximea, Net-Gmbh, Basler y casi todas las cámaras web.
Entonces, en mi opinión, si desea utilizar una interfaz común para todas las cámaras, debería considerar usar la interfaz GenICam.
Como las cámaras Firewire se están volviendo obsoletas debido a sus limitaciones de ancho de banda, parece que los fabricantes de cámaras están cambiando a interfaces USB 3.0 o Gigabit Ethernet. Ambos tienen los estándares USB3 Vision y GigE Vision, a los que se adhieren muchos fabricantes.
Sin embargo, parece que cada fabricante (Basler, Pointgrey, Ximia y otros) tiene su propio SDK para interactuar con sus cámaras. Al desarrollar una aplicación, los desarrolladores tendrían que aprender e interactuar con cada API, lo cual es un problema, o apegarse a un fabricante. Puede que me malinterpreten pero, en ese caso, ¿qué sentido tiene un estándar de la industria si los desarrolladores necesitan usar API dependientes del fabricante?
Para las cámaras firewire, los desarrolladores tienen acceso a libdc1394 multiplataforma, API de alto nivel. No necesitan preocuparse por quién fabrica la cámara y no tienen que escribir controladores separados. ¿Algo así es posible incluso para USB3 Vision y GigE Vision? Si es así, ¿quién lo desarrollaría?
Al menos para GigEVision, permítanme mencionar que el proyecto Aravis está disponible para Linux. Está destinado a ser una biblioteca GenTL / GenICam pero solo es compatible con GigE en este momento debido a los problemas de limitación de controladores que se detallan a continuación.
En primer lugar, estoy de acuerdo con el punto de Martin de que la creación de un SDK general no beneficia a los propios fabricantes de cámaras por razones competitivas y de soporte. Los fabricantes desarrollan controladores usb propietarios (para USB3Vision) y controladores de filtro NIC (opcional para GigE pero muy recomendado) junto con sus SDK. Los incentiva a encerrar a los usuarios en su ecosistema y separarlos de la competencia.
Esta es la razón por la que no estoy de acuerdo con AdamF: no creo que GenTL cuente con el amplio apoyo de los fabricantes de cámaras, especialmente para las cámaras GigE o USB3Vision. El soporte de GenTL permitiría efectivamente a los usuarios usar cualquier SDK de propósito general a la vez que aprovechando los controladores propietarios del fabricante
Creo que sería más fácil para OpenCV admitir GenTL en lugar de GigE / U3V en este punto porque el gran obstáculo para desarrollar controladores GigE / U3V en todas las plataformas de hardware disponibles. El soporte de GenTL al menos solo sería una interfaz basada en software en este punto.
Consulte https://github.com/ni/usb3vision
Implementa la especificación core USB3 Vision como un controlador de kernel. Para controlar una cámara, aún tendría que ajustar la lógica de modo de usuario que la conecta a GenApi (la implementación de referencia de GenICam), así como manejar los búferes en cola / eliminados en cola para el controlador.
Además, con respecto a su pregunta sobre si es posible implementar un controlador independiente del proveedor, por supuesto que sí. Ese es, de hecho, el objetivo de los estándares. La mayoría de los proveedores de cámaras ofrecen su propio SDK de propiedad con sus cámaras por varias razones, pero hay SDK independientes que funcionarán con cualquier cámara GigE Vision y USB3 Vision que cumpla con los estándares. Si alguno de estos son de código abierto es una buena pregunta, y no conozco ninguno que lo sea. El controlador de visión USB3 arriba mencionado es utilizado por el controlador IMAQdx de National Instruments, que es comercial y de código cerrado.