FLASH INFORMATIQUE FI

FI spécial été 2007 - Images


VMS : une architecture logicielle pour le développement rapide d’applications de traitement de l’image ou du son




Aïcha RIZZOTTI


Motivation et choix initiaux

Le développement et le test de nouveaux algorithmes de traitement du son et/ou de l’image nécessitent de pouvoir développer rapidement une application permettant de tester une large gamme de conditions. Actuellement cela est obtenu la plupart du temps à l’aide d’un logiciel de simulation genre Matlab ou à l’aide d’un petit démonstrateur écrit en C++.
La première solution permet un prototypage rapide, mais ne permet pas de s’approcher des conditions réelles d’utilisation (contraintes de mémoire, puissance de calcul, ...). De plus, le résultat ne peut pas être mis à disposition tel quel pour des questions de licences.
La deuxième solution est plus facile à mettre à disposition et se rapproche des conditions réelles d’utilisation de l’application, mais nécessite de redévelopper à chaque fois beaucoup de code n’étant pas directement lié aux algorithmes à tester, telle que l’interface utilisateur, ou les fonctions permettant l’accès au matériel.
De plus, chaque démonstrateur utilisant sa propre logique, outils et formats de stockage, il est très difficile de combiner plusieurs de ces algorithmes. Les choses empirent encore lorsque l’algorithme nécessite un traitement synchronisé de plusieurs canaux audio et/ou vidéo (traitements multimodaux, vision stéréo, ...), ou lorsque des calculs lourds nécessitent une parallélisation sur plusieurs machines. Pour ces cas là, l’architecture nécessite des spécialistes du calcul réparti ou de la synchronisation et ne peut en général pas être conçue par la personne qui développe les algorithmes, ce qui rend déjà très complexe le développement d’un premier démonstrateur.
Le projet VMS (Visual Media Studio) vise le développement d’une architecture logicielle réutilisable sous la forme d’un cadre de travail bien conçu qui permettrait la réutilisation facilitée des modules précédemment développés, en gardant toutes les possibilités d’interfaçage et de temps réel d’un langage de programmation. Il devient alors rentable de passer du temps à développer des modules stables et documentés, dans la mesure où ces derniers pourront être réutilisés plusieurs fois.

JPEG - 6 ko
combinaisons de modules

JPEG - 5.9 ko
schéma d’une application multimodale simple

Pour pouvoir remplir son rôle, VMS doit avoir les caractéristiques suivantes :

Modulaire :
afin d’assurer une bonne réutilisabilité du code et la mise en oeuvre rapide de nouveaux algorithmes. Une nouvelle application doit pouvoir être créée en combinant plusieurs modules selon une configuration décrite dans un document XML. Chaque module de l’application pouvant être un module d’acquisition, de traitement, d’affichage,... Un module peut avoir une ou plusieurs entrées, un module peut avoir une ou plusieurs sorties.
Parallélisable :
VMS doit faciliter la répartition des calculs entre plusieurs machines pour les applications nécessitant une grande puissance de calcul, ce qui est très fréquent lors de traitement de flux vidéo.
Multimodal :
VMS facilite le traitement simultané de plusieurs flux différents (audio, vidéo ou autre).
Synchronisation des flux :
le fait d’avoir des applications multimodales, réparties, voire parallélisées, nécessite dans bien des cas de synchroniser les données. Par exemple, si un module reçoit un flux vidéo et un flux sonore, il devra pouvoir synchroniser les deux flux afin de leur appliquer un traitement synchrone. Le framework VMS répond à cette attente, premièrement par la possibilité d’attacher aux données des différents flux une indication temporelle, mais également en mettant à disposition des outils ou des techniques de synchronisation des flux audio ou vidéo.
Open Source :
dans le but d’assurer la pérennité du système et de simplifier les problèmes de licences.
Afin de rendre la parallélisation la plus performante possible, VMS utilise le langage POP-C++ développé à l’école d’ingénieurs de Fribourg. POP-C++ est une extension au langage C++ et il ne diffère de lui que de peu syntaxiquement. Mais de nouveaux concepts rendent POP-C++ adapté aux applications parallèles.
Si l’utilisation de POP-C++ s’avère la meilleure et la plus adéquate au niveau performance et fiabilité, nous allons également offrir la possibilité d’implémenter des modules sous forme de services Web lorsque la portabilité prime ou si ce module doit être utilisé hors VMS.
Nous avons évalué plusieurs librairies de traitement d’images pouvant être utilisées pour la réalisation de modules VMS et avons finalement choisi de développer les premiers modules à l’aide de la librairie OpenCV qui est Open Source, très complète, et s’est révélée être également très performante. Cette librairie n’est cependant pas imposée par VMS et un développeur peut très bien choisir de développer de nouveaux modules en utilisant d’autres librairies.
Nous avons évalué les librairies suivantes, toutes (et d’autres) sont utilisables avec VMS :
Intel IPP :
complète et performante mais licence payante, elle ne nous a servi que comme référence pour la comparaison.
Intel OpenCV :
librairie Open Source plutôt performante et très complète, offrant également des fonctionnalités de Machine learning. Cette librairie a la particularité d’utiliser IPP à l’exécution si cette dernière est installée.
IDIAP Torch3Vision :
librairie Open Source développée à Martigny par l’IDIAP, il s’agit d’une extension de la librairie de Machine Learning Torch3 au domaine de la vision.
LTI-Lib :
une autre librairie Open Source qui pourrait être intéressante, malheureusement la documentation est insuffisante et le support incertain.
Matrox MIL :
librairie performante, mais payante.
Euresys Evision :
librairie payante orientée vision industrielle.

Lorsque nous parlons du framework VMS nous incluons les éléments suivants :

  • une bibliothèque de modules en POP-C++ pouvant être incluse dans n’importe quelle nouvelle application et servant de modèles pour le développement rapide de nouveaux modules ;
  • un outil VMSDesigner permettant de construire une application de manière graphique par combinaison de modules existants ;
  • un environnement d’exécution basé sur POP-C++ permettant l’exécution des modules en environnement distribué.

Historique et état du projet

L’idée d’un tel développement est née en 2004 de réflexions entre le prof. Jean-Philippe Thiran de l’Institut de traitement de signaux de l’EPFL et quelques professeurs de la Haute École Arc Ingénierie, à St-Imier. Les premiers tests de faisabilité ont été réalisés dans le cadre de travaux d’étudiants.
Ce projet étant bien en phase avec les activités de l’institut des Systèmes d’Information et de Communication de la HE-Arc (ISIC-Arc) et le framework résultant pouvant servir aussi bien pour des activités R&D que comme support d’enseignement, il a été décidé de continuer le développement en cherchant une source de financement complémentaire, ce qui a finalement abouti à un financement de 24 mois par la réserve stratégique de la HES-SO (RCSO-TIC) en 2006.
Le projet passe donc la vitesse supérieure en juin 2006, en impliquant les 5 établissements de la HES-SO. Actuellement le framework comprend :

  • quelques modules d’acquisition, de traitement ou de stockage d’images pouvant facilement être utilisés comme base pour l’écriture de nouveaux modules ;
  • un outil graphique VMS Designer permettant de combiner plusieurs modules, de les configurer, puis de générer l’application ;
  • un environnement d’exécution permettant l’exécution des modules répartie sur différentes machines.

Une première application Mélanome a été développée à l’aide de VMS, elle est détaillée plus loin. Les prochaines étapes seront :

  • possibilité d’intégrer à une application des modules écrits sous forme de Services Web afin d’offrir une ouverture maximum sur le monde ;
  • prise en charge de flux audio et synchronisation entre flux permettant le développement d’applications multimodales ;
  • possibilité d’intégrer à une application des modules s’exécutant sur une plate-forme spécialisée DSP.

En parallèle à la mise en place de ces améliorations nous allons continuer à développer de nouveaux modules de base pour étendre la bibliothèque existante et allons développer d’autres applications dans des domaines tels que surveillance automatique ou indexation semi-automatique d’images.

L’outil VMSDesigner

JPEG - 4.7 ko
VMSDesigner

VMSDesigner est l’outil graphique permettant de construire une application par combinaison de modules existants. VMSDesigner est un outil développé en Java afin de pouvoir être utilisé sous MS-Windows ou sous Linux, il utilise les librairies JDOM pour la manipulation des fichiers XML et JGraph pour la génération des diagrammes.
La fenêtre principale est séparée en deux parties. Celle de droite contient le schéma de l’application du projet en cours. Cette partie de l’interface permet à l’utilisateur de lier les modules entre eux et de donner ainsi la structure voulue à l’application multimédia à réaliser. La partie de gauche permet de paramétrer le module sélectionné sur le schéma.
VMSDesigner permet au développeur de combiner facilement plusieurs modules écrits sous forme de classes parallèles POP-C++ ou de Web services. Chaque module ou application est représenté par les fichiers XML correspondants.
Un module est représenté sous la forme graphique d’un composant. Les attributs du composant correspondent aux paramètres du module, ainsi la valeur machineURL correspond à l’emplacement sur lequel le module devra être exécuté. Les entrées des modules sont représentées par les interfaces requises du composant. Le nom de l’entrée est inscrit en dessous. La couleur de l’interface correspond au type de données requis par cette interface. Lorsqu’une entrée n’est pas liée à une sortie, son nom est écrit en une couleur spécifique. Les sorties des modules sont représentées par les interfaces fournies du composant comme pour les entrées.
L’utilisateur peut lier une entrée d’un module à une sortie d’un autre module afin de définir le flux. Les liens entre les modules sont des associations entre les interfaces fournies et requises des composants. Une sortie peut être associée à plusieurs entrées, ce qui veut dire que les données sont envoyées à plusieurs modules. Par contre, une entrée ne peut être liée qu’à une seule sortie.
VMSDesigner offre encore une multitude de fonctionnalités comme le paramétrage ou la configuration d’un module.

Générer les sources

Une fois tous les modules connectés il est possible de générer les fichiers sources de l’application POP-C++ puis de lancer la compilation. La génération des fichiers sources se base sur les différents fichiers XML contenant la configuration des modules et l’ensemble des interconnexions.
Le premier fichier généré est VMSApplication.cc qui contient toute la logique de connexion des modules. Il reste ensuite à générer quelques fichiers servant de colle entre les modules.

Exemple d’application : cartographie pour le dépistage du mélanome

Le mélanome malin est le plus grave des cancers de la peau, car il donne lieu à des métastases. La moitié des cas apparaît en peau saine et l’autre moitié sur des grains de beauté existants.
L’objectif de cette application est de dresser une cartographie des grains de beauté de la peau afin de permettre un suivi de leurs évolutions. Cette application est donc destinée à devenir une aide au diagnostic pour le praticien. Les méthodologies utilisées sont respectivement l’acquisition d’image, le traitement d’image (filtrage, segmentation, analyse multirésolution et recalage) afin d’extraire les grains de beauté et l’analyse statistique afin de déterminer si leurs évolutions sont anormales. Cette application est développée par l’école d’ingénieurs de Genève pour les Hôpitaux Universitaires Genevois.
L’application doit prendre en entrée une paire d’images et fournir en sortie une liste de lésions suspectes. Le système doit éviter totalement les faux négatifs et minimiser les faux positifs. En pratique, seules les lésions de plus de 5mm sont intéressantes pour le praticien.
La première étape consiste à détecter les lésions sur chaque image, pour cela il faut tout d’abord convertir les couleurs dans l’espace HSV (Hue Saturation Value). Le canal S (saturation) permet une bonne séparation entre les lésions et la peau, mais il faut une analyse supplémentaire sur la forme et la luminosité pour obtenir une détection robuste.
La deuxième étape consiste à mettre en correspondance les lésions détectées sur chacune des 2 images en se basant sur les centres de gravité des lésions et des diagrammes polaires de voisinage.
Il reste ensuite à mesurer les changements pour chaque lésion et à marquer celles qui semblent suspectes.

JPEG - 4 ko
test des algorithmes de dépistage de mélanome avec VMS

JPEG - 5.4 ko
correspondance des lésions et détection de changement



Cherchez ...

- dans tous les Flash informatique
(entre 1986 et 2001: seulement sur les titres et auteurs)
- par mot-clé

Avertissement

Cette page est un article d'une publication de l'EPFL.
Le contenu et certains liens ne sont peut-être plus d'actualité.

Responsabilité

Les articles n'engagent que leurs auteurs, sauf ceux qui concernent de façon évidente des prestations officielles (sous la responsabilité du DIT ou d'autres entités). Toute reproduction, même partielle, n'est autorisée qu'avec l'accord de la rédaction et des auteurs.


Archives sur clé USB

Le Flash informatique ne paraîtra plus. Le dernier numéro est daté de décembre 2013.

Taguage des articles

Depuis 2010, pour aider le lecteur, les articles sont taggués:
  •   tout public
    que vous soyiez utilisateur occasionnel du PC familial, ou bien simplement propriétaire d'un iPhone, lisez l'article marqué tout public, vous y apprendrez plein de choses qui vous permettront de mieux appréhender ces technologies qui envahissent votre quotidien
  •   public averti
    l'article parle de concepts techniques, mais à la portée de toute personne intéressée par les dessous des nouvelles technologies
  •   expert
    le sujet abordé n'intéresse que peu de lecteurs, mais ceux-là seront ravis d'approfondir un thème, d'en savoir plus sur un nouveau langage.