Vous recherchez une solution impliquant une caméra de vision ? Vous voulez une application performante qui vous permet de prendre les commandes ? Alors vous devriez jeter un coup d'œil à WaveMe. WaveMe est une plate-forme qui résout les problèmes courants que vous rencontrez lors de la création d'applications de vision nécessitant l'accès à des graphiques haut de gamme. WaveMe est destiné à ceux qui trouvent que Labview est trop lourd et qu'écrire une application à partir de zéro est trop exigeant.
Avec ce discours technique, j'aimerais plonger un peu plus profondément dans ce que WaveMe offre comme environnement de programmation générique et pourquoi vous, ou Senslogic, pourriez construire un outil de haute performance avec très peu d'effort.
Comment WaveMe y parvient-il ? Dès le départ, WaveMe a été conçu pour gérer un ensemble d'applications fondamentalement diverses avec la caméra de vision comme composant commun. Le cœur de la plateforme est un pipeline géré par un gestionnaire de pipeline qui ajoute et supprime des modules (c'est votre code) avec des types d'entrée et de sortie définis.
Le pipeline, ainsi que le reste de l'application, est basé sur un paradigme producteur-consommateur. Cela vaut pour tout, des images à l'allocation de mémoire. Le producteur est généralement un appareil photo, mais il peut s'agir de tout ce qui génère des données. Tout le monde peut être producteur dans le pipeline. Le consommateur (ultime) est un compositeur qui gère toutes les tâches liées à l'affichage des images, à la réponse aux commandes graphiques, à la gestion des événements et, enfin, au retrait des données allouées par le producteur lorsqu'elles ne sont plus nécessaires. La seule particularité du compositeur est qu'il fonctionne dans un contexte OpenGL, ce qui signifie que nous avons accès à l'ensemble des commandes OpenGL.
La plateforme est livrée avec un grand nombre de primitives graphiques prédéfinies, comme le dessin de lignes, de polygones, de cercles, de réticules, le rendu de texte et même l'affichage de polynômes de Zernike. Si vous ne trouvez pas ce que vous aimez, vous pouvez facilement ajouter les vôtres. Cela demande quelques efforts supplémentaires, mais nous ne sommes jamais limités par la plateforme qui. Si nous en avons besoin, elle nous expose toute la gloire d'OpenGL.
Un module WaveMe est une bibliothèque qui apporte sa propre interface utilisateur, définit ses types d'entrée et de sortie et sera ajouté à un pipeline en direct lorsque les données appropriées sont disponibles. Les modules fonctionnent comme des filtres et sont coopératifs. Ils voient toutes les données du pipeline. En règle générale, un module effectue les opérations suivantes
Lors de l'écriture d'une application GUI complète, il y a beaucoup d'événements standards à gérer. WaveMe est livré avec un modèle où les événements souris et clavier sont prédéfinis afin qu'ils coopèrent avec le reste de la plateforme. Par défaut, votre application vit à l'intérieur d'un onglet avec d'autres modules. L'un d'entre eux est le module qui gère la caméra. Lorsque vous sélectionnez l'onglet de la caméra, WaveMe s'attend à ce que les modules qui gèrent actuellement les événements du clavier et de la souris les lâchent et, inversement, à ce qu'ils les récupèrent lorsque l'onglet du module est sélectionné. Tout cela est géré par le modèle standard. Tout ce que nous avons à faire est de changer le nom des fonctions de rappel du modèle et d'ajouter votre propre code, du moins si nous voulons interagir avec ces événements.
WaveMe est basé sur GTK4 et glib-2.0 pour son interface utilisateur, et une grande partie de la façon dont les modules interagissent avec le pipeline suit les modèles utilisés par ces bibliothèques.
Elle suppose que la caméra fournit un flux constant d'images et que les modules réagissent en générant des messages basés sur ce qu'ils voient. Cette sémantique s'adapte bien aux éléments graphiques qui suivent certaines propriétés de chaque image.
Ce comportement peut ne pas convenir à tout le monde et il se peut donc que nous devions le modifier. Le compositeur, sauf indication contraire, suppose que tous les objets qu'il reçoit sont persistants et qu'un autre message avec le même identifiant ne se trouve qu'à quelques millisecondes de distance. Il y a des choses que nous pouvons vouloir faire qui ne correspondent pas à cette description. Par exemple, si nous voulons changer une carte de couleurs, c'est un message qui n'a pas besoin d'être suivi. Pour ces types de messages, nous devons marquer le message comme étant unique. Tirez et oubliez. La partie action du message sera appelée une fois et jamais plus.
Une dernière chose qui mérite d'être mentionnée au moins une fois, tous les messages peuvent avoir une fonction de nettoyage, et la fonction de nettoyage s'exécute dans le contexte OpenGL. Si nous avons besoin de jeter un coup d'œil dans l'état d'OpenGL et de le renvoyer à l'application, c'est ici qu'il faut le faire.
J'espère avoir donné un aperçu de ce que WaveMe peut faire et comment. Certaines choses n'ont pas été abordées, comme la façon dont nous construisons l'interface utilisateur, ou du moins les parties de l'interface utilisateur qui sont spécifiques à WaveMe. La plupart de ces aspects sont couverts par le modèle à partir duquel tous les modules actuellement disponibles pour WaveMe sont dérivés. La philosophie générale est de garder un modèle qui couvre toutes les bases et de l'étendre en fonction des spécificités de chaque application. Ayant déjà écrit quelques modules, je pense que WaveMe a évolué vers une plateforme réutilisable à partir de laquelle de nombreuses applications peuvent être construites rapidement. Pensez-y. Peut-être même l'essayer. N'hésitez pas à me contacter à l'adresse suivante contact@senslogic.de si vous souhaitez voir si WaveMe peut vous convenir.
Lithographie optique haut de gamme : de quoi s'agit-il ? La lithographie EUV ressemble à de la science-fiction devenue réalité : des miroirs...
Intro Pendant la majeure partie de ma carrière en optique, j'ai simulé l'imagerie des modulateurs spatiaux de lumière, et plus particulièrement des SLM...
Ce Tech-Talk porte sur le développement technologique en général, mais peut-être plus spécifiquement sur le développement technologique incrémental. Il est évidemment influencé par...
Je crois que je suis en mission, une mission pour modérer l'admiration que les gens semblent éprouver à l'égard...
Introduction Avec cette présentation technique, j'aimerais offrir une perspective sur la construction d'un cadre de modélisation physique avec Open...
Outils ouverts pour l'écosystème WaveMe A partir d'aujourd'hui, nous déplaçons les modèles WaveMe et tout le code open-source vers un...