¿Busca una solución que incluya una cámara de visión? ¿Desea una aplicación de alto rendimiento que le permita llevar la voz cantante? Entonces debería echar un vistazo a WaveMe. WaveMe es una plataforma que resuelve los problemas comunes que se encuentran cuando se construyen aplicaciones de visión que necesitan acceso a gráficos de alta gama. WaveMe es para usted que encuentra que Labview es demasiado pesado, y escribir una aplicación desde cero es demasiado.
Con esta charla técnica, me gustaría profundizar un poco más en lo que WaveMe ofrece como entorno de programación genérico y por qué tú, o Senslogic, podríais construir una herramienta de alto rendimiento con muy poco esfuerzo.
¿Cómo lo consigue WaveMe? Desde el principio, WaveMe se diseñó para manejar un conjunto fundamentalmente diverso de aplicaciones con la cámara de visión como componente común. El núcleo de la plataforma es un pipeline manejado por un pipeline manager que añade y elimina módulos (ese es tu código) con tipos de entrada y salida definidos.
El pipeline, así como el resto de la aplicación, se basa en un paradigma productor-consumidor. Esto se aplica a todo, desde las imágenes hasta la asignación de memoria. El productor suele ser una cámara, pero puede ser cualquier cosa que genere datos. Todo el mundo puede ser productor. El consumidor (último) es un compositor que se encarga de todas las tareas relacionadas con la visualización de imágenes, la respuesta a comandos gráficos, la transmisión de eventos y, finalmente, la retirada de los datos asignados por el productor cuando ya no se necesitan. Lo único especial del compositor es que se ejecuta en un contexto OpenGL, lo que significa que tenemos acceso al conjunto completo de comandos OpenGL.
La plataforma viene con un montón de primitivas gráficas predefinidas, como dibujar líneas, polígonos, círculos, retículas, renderizar texto e incluso mostrar polinomios de Zernike. Si no encuentras lo que te gusta, puedes añadir fácilmente las tuyas propias. Eso viene con un poco de esfuerzo adicional, pero nunca estamos limitados por la plataforma que. Si lo necesitamos, nos expone toda la gloria de OpenGL.
Un módulo WaveMe es una biblioteca que incluye su propia interfaz de usuario, define sus tipos de entrada y salida y se añadirá a un canal en vivo cuando se disponga de los datos adecuados. Los módulos funcionan como filtros y son cooperativos. Ven todos los datos de la canalización. Un módulo suele hacer lo siguiente
Cuando se escribe una aplicación GUI completa, hay muchos eventos estándar que manejar. WaveMe viene con una plantilla donde los eventos de ratón y teclado están predefinidos para que cooperen con el resto de la plataforma. Por defecto, tu aplicación vive dentro de una pestaña junto a otros módulos. Uno de ellos es el módulo que maneja la cámara. Cuando seleccionas la pestaña de la cámara, WaveMe espera que los módulos que actualmente manejan los eventos de teclado y ratón los suelten y, a la inversa, los agarren cuando la pestaña del módulo es seleccionada. Todo eso es manejado por la plantilla estándar. Todo lo que tenemos que hacer es cambiar el nombre de las funciones callback de la plantilla y añadir su propio código, al menos si queremos interactuar con esos eventos.
WaveMe se basa en GTK4 y glib-2.0 para su interfaz de usuario, y gran parte de la forma en que los módulos interactúan con la tubería sigue los patrones utilizados por esas bibliotecas.
Asume que la cámara proporciona un flujo constante de imágenes con módulos que responden generando mensajes basados en lo que ven. Esta semántica encaja bien con los elementos gráficos que rastrean alguna propiedad de cada imagen.
Este comportamiento puede no ajustarse a todo, por lo que puede ser necesario cambiarlo. El compositor, a menos que se le indique lo contrario, asume que todos los objetos que recibe son persistentes y que otro mensaje con el mismo ID está a sólo unos milisegundos de distancia. Hay cosas que podemos querer hacer que no se ajustan a esa descripción. Por ejemplo, si queremos cambiar un mapa de colores, ese es definitivamente un mensaje que no necesita seguimiento. Para este tipo de mensajes, debemos marcar el mensaje como único. Disparar y olvidar. La parte de acción del mensaje se ejecutará una vez y nunca más.
Una última cosa que vale la pena mencionar al menos una vez, todos los mensajes pueden tener una función de limpieza, y la función de limpieza se ejecuta dentro del contexto OpenGL. Si necesitamos echar un vistazo al estado de OpenGL y enviarlo de vuelta a la aplicación, este es el lugar para hacerlo.
Espero haber dado una idea de lo que WaveMe puede hacer y cómo. Algunas cosas no se han cubierto, como la forma en que construimos la interfaz de usuario, o al menos las partes de la interfaz de usuario que son específicas de WaveMe. Gran parte de esto está cubierto en la plantilla de la que derivan todos los módulos actualmente disponibles para WaveMe. La filosofía general es mantener una plantilla que cubra todas las bases y ampliarla con las particularidades de cada aplicación. Habiendo escrito ya un par de ellas, creo que WaveMe ha evolucionado hasta convertirse en una plataforma reutilizable a partir de la cual muchas aplicaciones pueden construirse rápidamente. Piénsalo. Quizás incluso lo intentes. No dude en ponerse en contacto conmigo en contact@senslogic.de si quieres saber si WaveMe también puede encajar contigo.
Litografía óptica de alta gama, de qué se trata La litografía EUV parece ciencia ficción hecha realidad: espejos con suavidad a nivel atómico, luz...
Intro Durante la mayor parte de mi carrera en óptica, he simulado imágenes de moduladores espaciales de luz y, sobre todo, de SLM...
Este Tech-Talk trata sobre el desarrollo tecnológico en general, pero quizá más concretamente sobre el desarrollo tecnológico incremental. Obviamente, está influida por...
Supongo que estoy en una misión, una misión para moderar el asombro que la gente parece sentir por lo relacionado...
Introducción Con esta charla técnica, me gustaría ofrecer algunas perspectivas sobre la construcción de un marco de modelado físico con Open...
Herramientas abiertas para el ecosistema WaveMe A partir de hoy, vamos a trasladar las plantillas WaveMe y todo el código abierto a...