Stai cercando una soluzione che includa una videocamera? Vuoi un'applicazione ad alte prestazioni che ti permetta di agire rapidamente? Allora dovresti dare un'occhiata a WaveMe. WaveMe è una piattaforma che risolve i problemi comuni che si incontrano quando si sviluppano applicazioni di visione che richiedono l'accesso a grafiche di alto livello. WaveMe è la soluzione ideale per chi ritiene che Labview sia troppo pesante e scrivere un'applicazione da zero sia troppo complicato.
Con questo intervento tecnico vorrei approfondire un po’ di più cosa offre WaveMe come ambiente di programmazione generico e perché voi, o Senslogic, poteste costruire uno strumento dalle elevate prestazioni con un minimo di sforzo.
How does WaveMe do that? From the word go, WaveMe was designed to handle fundamentally diverse set of applications with the vision camera as the common component. The core of the platform is a pipeline handled by a pipeline manager which adds and removes modules (that’s your code) with defined in and output types.
Il pipeline, così come il resto dell’applicazione, si basa su un paradigma di produttore-consumatore. Questo vale per tutto, dalle immagini all’allocazione della memoria. Il produttore è solitamente una fotocamera, ma può essere qualsiasi cosa che generi dati. Tutti possono essere produttori nel pipeline. Il consumatore (ultimo) è un compositore che gestisce tutte le attività relative alla visualizzazione delle immagini, alla risposta ai comandi grafici, all’invio di eventi e, infine, alla cancellazione dei dati allocati dal produttore quando non sono più necessari. L’unica cosa speciale del compositore è che funziona in un contesto OpenGL, il che significa che abbiamo accesso a tutto il set di comandi OpenGL.
The platform comes with a whole lot of predefined graphics primitives, like drawing lines, polygons, circles, crosshairs, rendering text, and even displaying Zernike polynomials. If you don’t find what you like, you can easily add your own. That does come with some additional effort, but we are never limited by the platform which. If we need it, exposes the full glory of OpenGL to us.
A WaveMe module is a library that brings it’s own user interface, defines its input and output types and will be added to a live pipeline where appropriate data is available. Modules work as filters and are cooperative. They see all data on the pipeline. A module typically does the following,
When writing a full-fledged GUI application, there are many standard events to handle. WaveMe comes with a template where mouse and keyboard events are predefined so that they cooperate with the rest of the platform. By default, your application lives inside a tab alongside other modules. One of those is the module handling the camera. When you select the camera tab, WaveMe expects modules that currently handle keyboard and mouse events to let go and, conversely, to grab them when the module’s tab is selected. All that is handled by the standard template. All we need to do is the change the name of the template callback functions and add your own code, at least if we want to interact those events.
WaveMe è basato su GTK4 e glib-2.0 per la sua interfaccia utente, e gran parte del modo in cui i moduli interagiscono con il pipeline segue i modelli utilizzati da queste librerie.
Suppone che la fotocamera fornisca un flusso costante di immagini, con i moduli che rispondono generando messaggi in base a ciò che vedono. Questa semantica si adatta bene agli elementi grafici che monitorano alcune proprietà di ogni immagine.
This behaviour may not fit everything so we may need to change it. The compositor, unless told otherwise, assumes all objects it receives are persistent and that another message with the same ID is only a few milliseconds away. There are things we may want to do that do not fit that description. For example, if we want to change a color map, that’s definitely a message that doesn’t need a follow-up. For these types of messages, we must mark the message as one-off. Shoot and forget. The action part of the message will be called once and never again.
Un'ultima cosa che vale la pena menzionare almeno una volta: tutti i messaggi possono avere una funzione di pulizia, e questa funzione viene eseguita all'interno del contesto OpenGL. Se è necessario accedere allo stato OpenGL e rispedirlo all'applicazione, questo è il posto giusto per farlo.
Spero di aver dato un'idea di ciò che WaveMe può fare e come. Alcune cose non sono state trattate, come ad esempio come costruire l'interfaccia utente o almeno le parti dell'interfaccia utente specifiche per WaveMe. Molte di queste cose sono trattate nel template da cui derivano tutti i moduli attualmente disponibili per WaveMe. La filosofia generale è quella di mantenere un template che copra tutte le funzionalità e di ampliarlo con le specifiche di ogni applicazione. Dopo aver scritto un paio di template già, credo che WaveMe sia diventata una piattaforma riutilizzabile da cui molte applicazioni possono essere create rapidamente. Fateci un'idea. Forse anche provatelo. Non esitate a contattarmi contact@senslogic.de if you’d like to see if WaveMe can be a fit for you too.
Le scorciatoie di BeamNotes WaveMe indirizzano i tasti di scelta al plug-in attualmente selezionato e la finestra del compositore li registra. Questo è integrato nel...
Il passaggio al calcolo GPU è molto importante e non è guidato solo dall’intelligenza artificiale. Le capacità di elaborazione parallela dei moderni GPU superano…
L'applicazione Glass Finder è un'estensione di un altro progetto che mira a ampliare il set di servizi già offerti da…
Rust offre un'interessante opzione linguistica per la modellazione in ottica e fisica. Date un'occhiata perché Rust potrebbe essere una soluzione…
Sulla questione lavoriamo. Potreste notare che il blog è stato un po’ silenzioso ultimamente: questo è un focus, non un trascuro. A Senslogic…
Introduzione - Ridisegnare il CAD Quando la maggior parte delle persone sente il termine “CAD”, pensa subito a un software per la progettazione meccanica tridimensionale, come SolidWorks, AutoCAD o…