Conception et développement d'un logiciel de Vision par ordinateur



Documents pareils
Annexe : La Programmation Informatique

DA MOTA Anthony - Comparaison de technologies : PhoneGap VS Cordova

Chapitre 1 : Introduction aux bases de données

Logiciel EV3 LEGO MINDSTORMS Education

PC Check & Tuning 2010 Optimisez et accélérez rapidement et simplement les performances de votre PC!

Informatique industrielle A Systèmes temps-réel J.F.Peyre. Partie I : Introduction

DUT. Informatique, orientation Imagerie Numérique. Domaine : Sciences, Technologies, Santé. Mention : Informatique

Leica Application Suite

AJAX. (Administrateur) (Dernière édition) Programme de formation. France, Belgique, Suisse, Roumanie - Canada

modélisation solide et dessin technique

Programme de formation

1 JBoss Entreprise Middleware

Projet Active Object

Livre blanc Mesure des performances sous Windows Embedded Standard 7

1. Considérations sur le développement rapide d'application et les méthodes agiles

Télécom Nancy Année

La mesure des écarts en Sciences de l'ingénieur

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

LANGAGUE JAVA. Public Développeurs souhaitant étendre leur panel de langages de programmation

GANTTPROJECT. Julien TENDERO

ÉCONOMIE ET GESTION LYCÉES TECHNOLOGIQUE ET PROFESSIONNEL

Qu'est-ce que le BPM?

Windows 8 Installation et configuration

Projet de Veille Technologique

ManageEngine IT360 : Gestion de l'informatique de l'entreprise

Note technique. Formats de compression vidéo utilisés par CamTrace V11 avantages et inconvénients.

Institut Supérieure Aux Etudes Technologiques De Nabeul. Département Informatique

MODELISATION UN ATELIER DE MODELISATION «RATIONAL ROSE»

Service de réplication des données HP pour la gamme de disques Continuous Access P9000 XP

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

Bénéficiez d'un large choix d'applications novatrices et éprouvées basées sur les systèmes d'exploitation i5/os, Linux, AIX 5L et Microsoft Windows.

GESTION DE PROJET SÉANCE 2 : LES CYCLE DE VIE D'UN PROJET

Conception d'un système d'information WEB avec UML Par Ass SERGE KIKOBYA

Jade. Projet Intelligence Artificielle «Devine à quoi je pense»


Java 7 Les fondamentaux du langage Java

Architecture distribuée

Les clusters Linux. 4 août 2004 Benoît des Ligneris, Ph. D. benoit.des.ligneris@revolutionlinux.com. white-paper-cluster_fr.sxw, Version 74 Page 1

Brique BDL Gestion de Projet Logiciel

Conservation des documents numériques

Quel PC pour quels usages? 1) PC de Bureau ou Portable? Les différents types de portables. - Les ultra-portables. - Les portables généralistes

Le stockage local de données en HTML5

Environnement logiciel open source pour la création d œuvres artistiques interactives

Microsoft Application Center Test

Travail collaboratif. Glossaire

CAHIER DE S CHARGE S Remote Workload Manager

SOUTIEN INFORMATIQUE DEP 5229

Éditions QAD On Demand est disponible en trois éditions standard : QAD On Demand is delivered in three standard editions:

Microsoft Dynamics AX 2012 Une nouvelle génération de système ERP

Préparer la synchronisation d'annuaires

Projet de programme pour l enseignement d exploration de la classe de 2 nde : Informatique et création numérique

Qlik Sense Desktop. Qlik Sense Copyright QlikTech International AB. Tous droits réservés.

Documentation utilisateur. [EIP] TransLSF

TRAAM STI Acquisition et exploitations pédagogiques des données sur un système pédagogique

PFE Télécommunications. Pré-rapport à l'issue des 6 premières semaines de stage. Page 1 sur 5 1 %

Projet : PcAnywhere et Le contrôle à distance.

Business Intelligence avec SQL Server 2012

v7.1 SP2 Guide des Nouveautés

Intervenants. Thomas d'erceville Project Manager. Christian NGUYEN Practice Manager IT Quality

Master Energie spécialité Energie électrique

Nouveau Web Client marquant, Cumulus Video Cloud, optimisations de la base de données, et plus..

Évaluation et implémentation des langages

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

EIP 2012 Projet Livepad. Documentation technique 1.5

µrv : Realité Virtuelle

ACTIVITÉ DE PROGRAMMATION

Chapitre 1 Introduction

Nécessité de concevoir un outil de recherche PDF Présentation des fonctionnalités d'indexation et de recherche... 3

UN EXEMPLE DE CYBERENSEIGNEMENT EN CHIMIE

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

CA ARCserve Backup. Avantages. Vue d'ensemble. Pourquoi choisir CA

Retrouver de vieux programmes et jouer sur VirtualBox

DÉVELOPPEMENT INFONUAGIQUE - meilleures pratiques

Business Intelligence avec SQL Server 2012

1. Développement embarqué. André KPOZEHOUE DOMAINES DE COMPETENCES CONNAISSANCES TECHNIQUES

WEA Un Gérant d'objets Persistants pour des environnements distribués

Auteur LARDOUX Guillaume Contact Année 2014 DEVELOPPEMENT MOBILE AVEC CORDOVA

Sage CRM. 7.2 Guide de Portail Client

Découverte des tablettes tactiles (ipad d'apple et Galaxy Tab de Samsung

Logiciel de télégestion ACS série 700

Sybase PowerAMC 16. Guide des nouvelles fonctionnalités générales. DOCUMENTATION

Digicomp 2. Bienvenue à la présentation «Windows 10 What's new»

Questions fréquentes sur les tarifs et les licences Windows Server 2012

Peregrine. AssetCenter. Product Documentation. Solution Asset Tracking. Part No. DAC-441-FR38. Build 49

Retrospect 7.7 Addendum au Guide d'utilisation

ABACUS vi Version Internet (release 2010)

TAGREROUT Seyf Allah TMRIM

Service d'installation et de démarrage de la solution de stockage réseau HP StoreEasy 1000/3000

CINEMATIQUE DE FICHIERS

LICENCE : INFORMATIQUE GENERALE

Types de REA produites dans le cadre de la séquence pédagogique

Distinguer entre «Enregistrer» et «Sauvegarder»

Galaxy est une plateforme de traitements (bio)informatiques accessible depuis l'url : (en précisant votre login et mot de passe LDAP «genotoul»).

Sébastien Sougnez 24/12/ / s.sougnez@areaprog.com 2 ans et demi d expérience

Gestion du centre de données et virtualisation

Analyse comparative entre différents outils de BI (Business Intelligence) :

DESIGN WEB & INTERACTIF INTERACTIVE DESIGN HIGHER NATIONAL DIPLOMA EN MÉDIAS INTERACTIFS

Transcription:

Florent Perrocheau Licence d'informatique Université de Franche-Comté Stage de troisième année Du 15/03/2010 au 15/08/2010 Conception et développement d'un logiciel de Vision par ordinateur Maitre de stage : Laurent Lebocq Responsable de stage : Jean-marc Nicod

2

Remerciements Je tiens à remercier : Laurent Lebocq et David Hériban pour m'avoir permis de réaliser ce stage et m'avoir accompagné dans différentes tâches de la réalisation du projet. Jean-Marc Nicod pour s'être déplacé et m'avoir apporté des conseils. toute l'équipe de l'as2m pour leur accueil. 3

4

Table des matières 1.Introduction...6 2.Contexte du stage...7 2.1 Percipio-Robotics...7 2.2 Micro-manipulation...7 2.3 Vision par ordinateur...8 2.4 Le système de micro-assemblage...9 3.Présentation du stage...10 3.1 Sujet...10 3.2 Définition des besoins...11 4.Déroulement du stage...13 4.1 Planning...13 4.2 Outils utilisés...14 Framework Qt...14 Multi-Threading...15 Plugin...16 Librairie de traitement d'images : OpenCv...16 4.3 Conception...17 4.3.1 Les demandes de traitements...17 Protocole de communication...19 4.3.2 Architecture...20 4.3.2.1 Diagramme de classe...20 4.3.2.2 Les chaînes de traitements...21 4.3.2.3 Les plugins...22 4.4 L'interface utilisateur...23 Version de développement...23 Version finale...23 4.5 Résultats...24 5.Perspectives...25 6.Bilan...27 Bibiliographie et netographie...28 Glossaire...29 Annexe...30 I.Protocole de communication...30 II.Exemple de traitement de vision...32 III. Interface du logiciel...34 5

1.Introduction La licence informatique nous offre l'opportunité de réaliser un stage en entreprise afin de concrétiser la première partie de notre formation et de mettre en pratique nos connaissance dans un cadre professionnel. Avec comme objectif d'élargir mes connaissances en programmation orienté objet, j'ai décider d'effectuer mon stage au sein de Percipio-Robotics, entreprise en devenir lié au monde de la recherche, où j'ai en charge la conception et le développement en C++ d'un logiciel de vision par ordinateur. J'exposerais dans ce rapport la première partie de mon expérience qui se déroule jusqu'au 15 aout 2010. Tout d'abord je présenterais rapidement le contexte de ce stage, l'entreprise et son domaine d'activité. Puis j'aborderais le projet qui m'est confié et les moyen mis en œuvre afin de mener à bien sa réalisation. Enfin je conclurais par un bilan technique et humain de cette expérience. 6

2.Contexte du stage 1)Percipio-Robotics Mon stage prends place au sein de Percipio-Robotics, projet d'entreprise innovante qui a pour ambition la valorisation de travaux de recherches réalisés à l'institut FEMTO-ST. Elle a pour secteur d activité la manipulation et l assemblage robotisé de micro-composants. Elle conçoit des systèmes robotisés de micro-assemblage permettant de manipuler des composants microtechniques de tailles caractéristiques comprises entre 10 micromètres et quelques millimètres, grâce à des inovations comme une micropince à actionnement piézoélectrique lauréat de deux microns d or au salon international des microtechniques MICRONORA 2002 et 2008 et brevetée depuis 2002. Le projet Percipio-Robotics est entré à l Incubateur d Entreprises Innovantes de Franche- Comté (IEI.FC) en août 2009. Cette structure associative, créée par les établissements d enseignement supérieur de la région Franche-Comté, a pour mission de favoriser la création d entreprises innovantes valorisant les résultats de la recherche publique. La création de Percipio- Robotics est prévue pour le second semestre 2010. Son effectif se compose actuellement de trois personnes : le porteur de projet David HERIBAN qui développe le système de micro-manipulation au cœur du projet, le co-porteur de projet et ingénieur étude UFC Laurent LEBOCQ, ingénieur en vision par ordinateur sur le projet, qui sera mon encadrant durant mon stage, ainsi que Michaël GAUTHIER, futur associé, chargé de recherche CNRS. Cette structure est pour le moment située au département AS2M (Automatisme et Système Micro-Mécatronique), laboratoire situé à l'ensmm (École Nationale Supérieure de Mécanique et de Microtechniques de Besançon), où furent menés les travaux de recherche à l'origine du système de micro-manipulation mis au point par Percipio-Robotics. 2)Micro-manipulation À l heure actuelle, encore beaucoup de tâches de micro-manipulation sont réalisées à la main par des opérateurs humains. Cela pose un vrai problème pour l industrie. C est un travail pénible, et de ce fait ces opérateurs ne peuvent travailler que très peu dans une journée. De plus, les tâches qu ils peuvent accomplir sont limitées. C est pourquoi la micro-manipulation est un domaine de recherche très important qui répond à un besoin des industriels. La première solution pour améliorer un travail de micro-manipulation consiste à remplacer la pince de l opérateur par une station de micro-manipulation télé-opérée. Celle-ci prend la forme d'un robot commandé par un opérateur via un joystick. Les stations de télémanipulation constituent déjà des technologies maitrisées et représentent un réel gain pour la manufacture. La prochaine étape est l'automatisation des tâches de micro-manipulation. Pour cela, les capteurs visuels, tels que les caméras, sont préconisées. En effet les informations visuelles sont 7

riches, moins soumises aux bruits et beaucoup plus faciles à mettre en œuvre que des capteurs de force ou de position dans le contexte du micro-monde. Il s'agit en général de récupérer la position des objets à manipuler en utilisant des algorithmes comme la détection de contours afin que le robot puisse opérer de façon automatique. 3)Vision par ordinateur La vision par ordinateur (aussi appelée "vision artificielle") est une branche de l'informatique dont le but est de rendre un ordinateur capable de lire et d'analyser une scène donnée, en se basant sur des informations visuelles telles qu'une image ou un flux vidéo. On pourrait citer plusieurs domaines d'application comme la reconnaissance de caractères, utilisée par exemple pour le tri du courrier, le contrôle visuel d'une chaîne de fabrication, l'asservissement visuel d'un robot ou la détection de formes que l'on peut trouver sur les appareils photographiques proposant une option de détection de sourires ou les projets du domaine vidéoludique proposant de s'affranchir de toute interface avec la machine en interagissant directement avec les mouvement du corps. 8

4)Le système de micro-assemblage Illustration 1: système de micro-manipulation Le système mis au point par Percipio-Robotics a pour but la manipulation et l'assemblage de micro-objets. Il est composé d'une station de micro-assemblage robotisée et de deux ordinateurs. La partie informatique est séparée sur deux postes différents afin que chaque partie dispose de ressources matérielles dédiées. Le premier ordinateur héberge le logiciel de commande qui pilote la station. Le second ordinateur embarque un logiciel de vision qui peut être assimilé à un capteur. Il a pour but de répondre à des demandes de traitement de vision par ordinateur envoyées par le logiciel de commande afin de rendre celui-ci autonome et d'automatiser les manipulations. 9

3.Présentation du stage 1)Sujet Le projet de ce stage a pour objectif la re-conception et le développement d'un logiciel de vision par ordinateur prenant place dans le système de micro-manipulation mis en place par Percipio-Robotics. Ce logiciel a pour fonction de répondre à des demandes de traitement sur images envoyées par le PC de commande. Il devra donc gérer les demandes, effectuer des traitements de vision par ordinateur sur des images provenant d'une (ou plusieurs) caméra(s) et communiquer les résultats via Ethernet avec un autre logiciel. Une première version de ce logiciel existe déjà mais pose plusieurs soucis pour une utilisation industrielle du système. Tout d'abord, celui-ci, ayant été développé rapidement pour répondre à un besoin dans le cadre de travaux de recherche, manque de stabilité et d'optimisation. Il est également incomplet pour l'utilisation finale désirée, sa conception n'autorisant que la gestion des traitements simples. De plus, comme le logiciel de commande, il fut développé avec l'environnement de programmation Borland qui requiert une licence, ne peut assurer la portabilité des applications développées, et n'est plus mis à jour. Il fut donc décidé de repartir sur des bases solides pour ce qui est des «softs» intégrant le système. La première étape choisie fut la réécriture du logiciel de vision, tâche qui m'est attribuée au cours de ce stage. J'ai donc pour mission de concevoir une nouvelle architecture qui permette la gestion plus complète des tâches à réaliser et ensuite de développer ce logiciel en C++ avec le frameworks Qt. 10

2)Définition des besoins portabilité L'application doit être compatible sous les systèmes d'exploitation Windows et Linux. modularité Une grande modularité est demandée afin de pouvoir modeler le logiciel au gré des besoins, pour pouvoir fournir à chaque client un système adapté à son utilisation. Précision et rapidité Le futur robot devant être capable de déplacements rapides (environ un mètre par seconde pour manipuler des pièces mesurant quelques dizaines de microns), la précision des captures et la rapidité des traitements sont primordiales. L'acquisition doit être précise à la milliseconde et les traitements ne peuvent excéder quelques dizaines de millisecondes. Techniquement abouti Afin de tirer parti de machines véloces, dans le but d'optimiser les temps de calculs, les différentes tâches exécutées devront être parallélisées grâce à l'utilisation du multi-threading. Il est aussi question d'éventuelles évolutions pour utiliser le calcul GPU. Prise en charges de flux multiples La station de micro-assemblage peut nécessiter plusieurs caméras. Il faut donc pouvoir gérer, en simultané, plusieurs flux vidéos. De plus, ceux-ci peuvent provenir de différents types de caméras possédant des protocoles variés : USB, firewire ou giga-éthernet. Le logiciel devra s'adapter au différents formats de caméras professionnelles utilisés couramment en industrie. gestion de demandes de traitements complexes Le logiciel doit être capable de gérer des demandes de traitements complexes. Il doit pouvoir effectuer des chaînes de traitements susceptibles d'être sérialisées et parallélisées. communication avec le logiciel de commande La communication avec le logiciel de commande nécessite de définir un protocole de communication entre les deux logiciels. Un module de communication sera nécessaire pour gérer la communication par liaison Ethernet via TCP/IP. 11

interface de test Pour de faciliter la mise en place et le développement du système final, une interface permettant de tester directement les traitements de vision, avec un retour complet des résultats et des informations de l'exécution de ceux-ci, est nécessaire. 12

4.Déroulement du stage Pour la réalisation du logiciel j'ai du mettre en œuvre, approfondir et élargir mes connaissances de façon significative. Pour cela j'ai effectué un travail important d'auto-formation, ce qui m'a permis d'acquérir des notions de programmation jusqu'alors non abordées lors de ma formation initiale ou de mes travaux personnels. J'ai ensuite réalisé un travail de conception en concertation avec les membres du projet et de l'équipe afin de définir les besoins de l'application et d'apporter une solution pour la réalisation de celle-ci. Puis j'ai pu commencer le développement, étape en cours de réalisation à l'heure actuelle. 3)Planning Afin d'organiser mon temps de travail durant mon stage, j'ai réalisé un planning prévisionnel prenant en compte les différentes étapes nécessaires pour réaliser la tâche qui m'est confiée. Celui-ci à été respecté jusqu'à aujourd'hui. Illustration 2: planning prévisionnel 13

4)Outils utilisés La réalisation de ce projet m'a demandé d'acquérir des connaissances afin de pouvoir utiliser certaines techniques de programmation telles que le multi-threading, la gestion des plugins, la programmation d'interfaces graphiques et l'utilisation avancée du C++ et la programmation orientée objet. Pour cela j'ai engagé un travail d'apprentissage en amont. Une fois l'offre de stage agréée, pour mettre un maximum de chances de mon coté, j'ai orienté mon travail personnel afin de me former au mieux et être apte à satisfaire au travail proposé. J'ai tout d'abord porté et continué mon projet «tutoré» de licence, un moteur de jeu sur Nintendo DS initialement prévu en C, vers le C++, dans le but de compléter et approfondir l'étude de ce langage et la programmation orientée objet. Par la suite, j'ai profité du projet de MOP pour m'initier au développement de GUI. J'ai donc développé une interface graphique pour la puissance 4 demandée. Grâce à cela, j'ai pu prendre connaissance avec le framework Qt avant le début de mon stage. Cela ma permis de mieux appréhender des sujets plus complexes dès le début du stage. Durant le premier mois, j'ai approfondi mon apprentissage de Qt à travers des notions plus complexes comme l'utilisation du multi-threading ou les plugins. J'ai aussi découvert la vision par ordinateur à travers la librairie OpenCv. Au cours de cet apprentissage j'ai pu développer quelques outils qui me furent utiles pour le développement du projet. Framework Qt Qt est un framework de développement C++, comprenant un ensemble de bibliothèques et d'outils qui permettent de faciliter le développement d'applications multi-plateformes. Il fut développé initialement par la société Trolltech, puis a été racheté par Nokia. Son développement a commencé en 1991 avec comme objectif de proposer une bibliothèque permetant de gérer une interface graphique. Depuis, il a énormément évolué et regroupe maintenant de nombreux modules qui en font un outil très complet. Il permet entre autre : la création d'interface graphiques le chargement de fenêtres 3D gérées par OpenGL le dessin en 2D la gestion du multi-threading la communication en réseau le support du javascript un accès SQL aux bases de données la manipulation et la génération de fichiers XML l'affichage de pages web avec le moteur WebKit En plus de proposer ses outils haut niveau, il implémente toutes les fonctions nécessaires au développement de logiciels comme la gestion des chaînes de caractères ou les conteneurs. Il est donc possible de créer une application complète en utilisant seulement Qt. 14

Point intéressant, il offre une entière compatibilité des applications développées avec les systèmes d'exploitation Linux, Windows et Mac OS. Depuis la version 4.5, Qt est proposé sous une licence LGPL v2.1. Cette nouvelle licence permet ainsi le développement de logiciels propriétaires sans nécessiter l'achat d'une licence commerciale, ce qui est un avantage intéressant pour une start-up comme Percipio-Robotics. Qt signifie "Cute", ou "Mignonne" en français, parce que les développeurs trouvaient que la lettre Q était jolie dans leur éditeur de texte Emacs. On peut noter qu'il est utilisé par de grands noms de l'informatique. En effet, plusieurs projets comme KDE (l'un des environnements de bureau les plus utilisés dans le monde de Linux), VLC (lecteur multimédia très populaire), SKYPE (solution de téléphonie par internet), ou Adobe Photoshop (logiciel de retouche d'image et de dessin assisté par ordinateur), sont basés sur son utilisation. Multi-Threading Le multi-threading est une technique de programmation permettant de paralléliser l'exécution d'un logiciel. Un thread, ou fil d'exécution, est un ensemble d'instructions s'exécutant de manière séquentielle. L'exécution en parallèle de plusieurs threads permet à un programme de travailler sur plusieurs fronts, simultanément. Très utilisé pour la gestion de GUI, ce procédé permet de conserver la réactivité de l'interface graphique même lors de l'exécution de calculs coûteux. Cela permet également de tirer profit des ressources de machines bénéficiant d'une plateforme qui possèdent un processeur multi-cœurs en multipliant le nombre d'exécutions simultanées, ce qui, ainsi, a pour intérêt de réduire les temps de calculs. Les contraintes de rapidité de traitement de l'application font du multi-threading une priorité dans la conception de celle-ci, la première version fut d'ailleurs nommé VisionThread. L'utilisation du multi-threading est grandement facilitée par la bibliothèque Qt. En effet elle offre un outil puissant qui gère de façon transparente l'implémentation de ceux-ci. Qt propose comme technique d'étendre la classe visée en la faisant hériter de Qthread. Dans ce cas, la classe devra redéfinir une méthode run(). Son implémentation implique un éventuel partage des ressources en mémoires. Afin de garantir l'intégrité de celles-ci, il est indispensable de contrôler leurs accès. Pour cela, l'utilisation des mutexs, primitives de synchronisation, permettent de superviser la lecture et l'écriture des données. 15

Plugin Un plugin est un module qui complète un logiciel pour lui apporter de nouvelles fonctionnalités. Il peut être à la base d'une architecture modulaire où différentes parties d'un programme sont déportées dans des plugins. Qt fournit également des outils permettant leurs implémentation. Librairie de traitement d'images : OpenCv OpenCV est une librairie open source de vision par ordinateur. Elle regroupe un grand nombre de fonctions permettant d'effectuer des tâches comme par exemple l'application de filtre sur une image ou la détection d'objet. 16

5)Conception La réflexion autour de la conception de l'application s'est déroulée sur une durée d'un mois environ, en parallèle avec l'apprentissage des outils et le début du développement. Les réunions menées avec les porteurs du projet m'ont permis de définir de façon précise et formelle les besoins de la nouvelle version de l'application, ceux-ci étant encore relativement vagues à mon arrivé. j'ai ensuite mené des travaux de recherche afin de proposer les solutions adéquates aux nouveaux besoins du «soft». Il a d'abord fallu redéfinir un point important conditionnant la nouvelle architecture du logiciel : les demandes de traitements que celui-ci pourra accepter. Il en a résulté un travail d'analyse syntaxique pour définir et formaliser le protocoles de communication des demandes. Puis l'architecture a été totalement repensée afin de permettre une gestion plus complexe des traitements à effectuer et d'apporter une plus grande modularité. 1) Les demandes de traitements Une des fonctions importantes du logiciel est la communication avec le PC de commande. En effet, son rôle dans le système est de répondre à des demandes de traitements de vision. Afin d'optimiser l'exécution des traitements et de modulariser ceux-ci, une réflexion de re-conception autour de ce point majeur fut mise en œuvre. Dans la première version du logiciel, chaque demande envoyée ne pouvait comprendre qu'un seul traitement. Les traitements correspondaient à un besoin spécifique faisant usage d'une composition plus simple. Cela impliquait plusieurs contraintes et une certaine faiblesse au niveau de l'exécution des traitements. Pour illustrer ce fait, voici les demandes qu'il était nécessaire d'envoyer afin de pouvoir définir la distance entre l'objet à manipuler et la pince. Pour cela il est nécessaire de connaître la position de l'objet et des deux doigts de la pince du robot. Illustration 3: envoi de demande ancienne version Premièrement, pour une requête précise, trois demandes sont alors envoyées, ce qui aura pour conséquence de multiplier le flux de communication, donc le nombre de demandes et de résultats à analyser. 17

De plus, SPEEDLABEL qui détecte le centre de gravité des objets disponibles sur l'image, DETECT_SIFIT1 et DETECT_SIFIT2 qui permettent de détecter les doigts de la pince, nécessitent un traitement commun sur l'image, un seuillage (binarisation de l'image). Dans ce cas, cette opération sera exécutée trois fois (ce qui engendre un gaspillage des ressources). Enfin, imaginons qu'après plusieurs tests on se rende compte que l'application d'un filtre sur l'image permette d'améliorer les résultats pour détecter le bon objet à manipuler. Alors, même si les fonctions permettant d'appliquer ce filtre sont déjà définies, il faudra créer une nouvelle fonction correspondant à la combinaison de ce filtre et de la détection d'objet et donc modifier et recompiler le code source. Cette analyse nous montre plusieurs points importants nécessitant une évolution. L'utilisation des ressources, point crucial pour garantir des temps de traitement acceptables, doit être optimisée. Dans ce but deux notions furent mises en avant : - Premièrement, la redondance des traitements doit être évitée. Si les résultats d'un traitement doivent être utilisés par plusieurs autres traitements, celui-ci ne doit être effectué qu'une seule fois. - Deuxièmement, il serait intéressant de paralléliser l'exécution des traitements indépendants pour tirer profit des ressources matérielles des processeurs multi-cœurs. Pour répondre à ces critères une demande doit donc pouvoir spécifier n traitements pouvant être sérialisés et parallélisés afin que son résultat soit calculé de façon efficace. Cela permettra également de gagner en modularité et de fournir un outil puissant. Les combinaisons de traitement de base permettront de définir des tâches plus complexes de façon totalement paramétrable. Il fut aussi profitable d'ajouter aux demandes plusieurs paramètres, afin de satisfaire les nouveaux besoins de l'application ou d'apporter des améliorations intéressantes. Pour que le logiciel de commande puisse identifier les résultats d'une demande à travers le flux des réponses reçues, il a donc été judicieux d'inclure une clé ID. La première version ne gérant pas encore le multi-caméra, il fut aussi utile de pouvoir préciser le numéro de la caméra à utiliser pour la capture. La dernière information ajoutée fut une option permettant de spécifier un nombre d'exécution à la chaîne de traitements en spécifiant le délai entre deux cycles ainsi que le nombre de cycles. Pour reprendre l'exemple précédent, la requête se réduirait à : Illustration 4: envoi de demande nouvelle version La chaîne spécifie les même tâches que précédemment à la différence que leur ordre d'exécution est précisé de façon à optimiser les traitements. On retrouve également quelques paramètres supplémentaires comme la clé ID, le numéro de caméra et le nombre d'exécutions. 18

Protocole de communication Afin de pouvoir communiquer des demandes de traitements complexes, il fut nécessaire de définir un protocole de communication entre le logiciel de commande et le logiciel de vision. J'ai pour cela mis à profit les connaissances acquises lors du module d'as de la licence informatique. La recherche d'un langage fut axé autour de deux points importants : le respect des contraintes permettant de définir un langage analysable et la simplicité, ou le confort d'utilisation. Pour formaliser le langage, j'ai utilisé la syntaxe utilisée lors du projet de TP d'as. J'ai donc défini les règles syntaxiques en ayant préalablement annoncé les tokens utilisés. Le protocole est disponible en annexe 19

2) Architecture J'ai pris la liberté de ne pas tout inscrire sur le diagramme, notamment les fonctions et les attributs de chaque classe, afin d'alléger celui-ci et de rendre sa compréhension plus aisée. J'expliquerai ensuite quelques points importants de l'architecture. 1) Diagramme de classe Illustration 5: diagramme de classe 20

2) Les chaînes de traitements Dans une chaîne de traitements, l'image ou les résultats résultant d'un traitement doivent pouvoir être utilisés par plusieurs autre traitements. Et plusieurs traitements indépendants doivent s'exécuter en parallèle. Pour répondre à ce problème, la solution choisie a été de modéliser la chaîne de traitement sous la forme d'un arbre binaire. L'arbre est composé de deux types de nœuds, les nœuds associés aux traitements, et le nœud de tête. Le nœud de tête est créé à la réception d'une demande de traitements. Il récupère et conserve l'id, indispensable à l'identification de la réponse associée. Il demande la capture de l'image au module d'acquisition en fonction des informations relatives à la demande. La partie de la demande correspondant aux traitements est analysée afin de créer les nœuds fils, ce récursivement, afin de générer la chaîne de traitements. Chaque nœud s'exécute dans un thread indépendant dans le but de paralléliser les traitements. Illustration 6: exemple d'arbre généré à partir d'une demande 21

3) Les plugins Afin de satisfaire le besoin de modularité du programme, celui ci est séparé en trois parties : le cœur ou le moteur qui gère et traite les demandes, les plugins de traitements sur images et les plugins d'acquisition spécifiques à un type de caméras. Cela permettra de développer indépendamment ces modules. Ils pourront être compilés séparément et être testés directement sur le logiciel ce qui apportera un gain de temps et de productivité. L'application finale prenant place dans le système de micro-manipulation adapté aux besoins d'une utilisation spécifique, il sera donc aisé, de configurer le soft pour les caméras du système et les besoins en terme de traitements en chargeant les plugins correspondants. Les plugins de traitement sur images regroupent un ensemble de fonctions de vision par ordinateur. Chacune de ces fonctions pouvant être exécutée plusieurs fois simultanément pour pouvoir paralléliser l'exécution des traitements, il n'était donc pas envisageable, une fois le plugin chargé, d'appeler les fonctions directement. Pour résoudre ce problème, les plugins sont donc conçus sur le modèle du factory pattern, c'est à dire qu'ils comprennent une fonction qui permet de créer des objets correspondant aux fonctions de traitements. Pour pouvoir gérer plusieurs plugins, ceux-ci sont pilotés par un superviseur qui se charge de trouver la fonction demandée dans le bon plugin. Illustration 7: diagramme de classe des plugins de traitements Ainsi, pour récupérer la fonction de traitement (Process) désirée, l'élément de la chaîne de traitement (TaskNode) appelle la fonction de création de Process du superviseur. Celui-ci va déterminer dans quel plugin trouver la bonne fonction et appeler celle-ci. Il retournera ensuite le Process créé qui sera attribué à l'élément de la chaîne. Les plugins qui gèrent les caméras sont réalisés sur le même principe car il doit être possible de gérer, simultanément, plusieurs caméras du même type. 22

6)L'interface utilisateur Le soft sera utilisé en définitive par deux types d'utilisateurs. Selon le type d'utilisateur, son interface différera. Version de développement Le premier type d'utilisateurs regroupe les développeurs de Percipio-Robotics qui auront pour tâche le développement de modules de traitements d'image et de capture. La version sur laquelle ils travailleront disposera d'une interface qui fournira de nombreux outils qui permettent de faciliter leur travail. Cette version permettra de charger et décharger les plugins de façon dynamique. Les demandes pourront être entrées en lignes de commande en local. La vérification de l'exécution d'une chaîne de traitements, de façon précise, sera rendue possible par un mode pas à pas pour le retour visuel, et par un rendu détaillé des résultats du traitement. Version finale Le deuxième type d'utilisateurs concerne les opérateurs des entreprises dans lesquelles sera installé le système complet. Pour son utilisation l'interface sera réduite au minimum. Elle donnera accès à des fonctions simples comme démarrer et arrêter le système, visualiser les flux des caméras et à quelques liens comme le support technique de Percipio-robotics, éventuellement une aide en ligne ou hors ligne et les informations sur le soft. 23

7)Résultats Le développement de l'application a débuté il y a un mois. Aujourd'hui le logiciel remplit quelques-unes des fonctions principales. Il permet de charger les différents types de plugins et de traiter des chaînes de traitements demandées en local via l'interface de test. Sur les premiers tests, on peut remarquer des gains de performance significatifs par rapport à l'ancienne version. A noter qu'il sont en partie dûs aux outils utilisés, notamment une nouvelle version de la bibliothèque de vision. Ancienne version Nouvelle version Seuillage 7ms 1ms Détection de contours 9ms 2ms 24

5.Perspectives Mon stage étant actuellement au milieu de son déroulement, il reste encore beaucoup de chose à développer. Le module de communication Le module de communication n'a pas encore été conçu, deux possibilités sont envisageables quand à son implémentation : utiliser les fonctions C natives ou utiliser les méthode fournies par Qt. Une étude comparative des performances des deux solutions serait intéressante afin de réaliser le meilleur choix. Il est aussi question de concevoir un module, prenant place entre le module de communication et le module de traitement, qui permette de traduire dans le langage défini des demandes formulées avec un nouveau langage plus simple et de plus haut niveau. Les demandes reçues pourraient de plus être très modulaires et très simples. Ce nouveau langage permettra de spécifier des chaînes de traitements relativement courantes de façon simplifiée en s'affranchissant de la complexité de composition de la chaîne. Par exemple : Illustration 8: schéma de fonctionnement du module de traduction Test Une méthode de test devra être utilisée afin de garantir la robustesse du logiciel. 25

Interface utilisateur Une fois les fonctionnalités définies implémentées, je pourrai soumettre des idées pour améliorer l'expérience utilisateur. Fichier de configuration L'utilisation d'un fichier de configuration externe au programme pourrait être intéressante. Celui-ci pourra servir à définir, notamment, les plugins à utiliser et les paramètres d'initialisation des caméras pour l'utilisation du système intégré chez le client. De cette façon, si un besoin d'évolution se fait sentir, cela permettra de mettre à jour facilement et à distance l'installation du client. Documentation Je devrai également fournir une documentation complète du logiciel afin de faciliter sa compréhension, chose importante du fait que le soft sera utilisé par d'autres développeurs qui réaliseront les plugins nécessaires à la mise en place de nouveaux systèmes. 26

6.Bilan L'application, une fois finalisée, fournira à Percipio-Robotics l'outil qui permettra au système d'automatiser la manipulation de micro-composants. De ce fait, l'entreprise pourra proposer une solution innovante et très intéressante pour le domaine industriel. Prendre part et apporter ma contribution à ce projet est donc très gratifiant. D'un point de vue technique ce stage est vraiment formateur. J'y approfondis de façon significative mes connaissances en programmation orientée objet, ce qui me permet de découvrir et apprendre de nombreuses notions de programmation. Grâce à l'expérience acquise lors de ma formation j'ai pu m'approprier les outils et notions de programmation nécessaires à la réalisation de ma tâche. J'ai ainsi appris à travailler avec des outils pour le développement à travers l'utilisation d'un framework. J'ai également élargi mes connaissances par l'apprentissage des techniques de programmation avancés énoncées dans ce rapport comme le multi-threading. J'ai pu prendre part au travail de réflexion sur la conception d'un logiciel en concertation avec une équipe. Le fait de travailler dans une équipe permet de partager et confronter ses idées. Cette situation, bienvenue au cours d'un stage, permet de profiter de l'expérience d'autrui et aussi de faire valoir sa créativité et les connaissances acquises jusqu'alors. Durant ce stage, j'ai la chance de bénéficier d'une réelle autonomie et donc d'une grande liberté d'action. J'ai donc la responsabilité d'organiser au mieux mon travail afin de mener à bien ma tâche. Cela fut un peu déroutant au début, mais réellement formateur et gratifiant. J'ai aussi pu découvrir le milieu de la recherche au sein d'un laboratoire ; ce qui m'a beaucoup plu est le fait que chacun est prêt à donner un peu de son temps afin de faire bénéficier de ses connaissances dans le but d'aider les travaux de quelqu'un d'autre. En conclusion, ce stage répond parfaitement aux objectifs que je me suis fixés. L'approfondissement de mes connaissances en programmation orientée objet et plus particulièrement en C++ en était le principal. La maitrise de ce langage est motivé par l'ambition de travailler en tant que développeur dans les jeux vidéos où il est majoritairement utilisé. Cela m'a permis aussi de découvrir la vision par ordinateur, point intéressant du fait de son utilisation actuelle et future en expansion dans ce domaine. L'environnement de travail était aussi un facteur important et le fait de travailler au sein d'une équipe à taille humaine dans le cadre d'un projet innovant poussé par des gens passionnés m'offre une expérience professionnelle très motivante. 27

Bibiliographie et netographie http://doc.qt.nokia.com/4.6/ Documentation en ligne du framework Qt http://www.siteduzero.com/ Site regroupant de nombreux tutoriels de programmation. Utilisé lors de mon initiation à Qt et à OpenCV. http://www.qtfr.org/ Communauté francophone d'utilisateurs de Qt. Regroupe un certain nombre de tutoriels et possède un forum actif très utile pour la résolution de problèmes spécifiques/pointus. http://qt.developpez.com/faq/?page=thread Tutoriel utilisé pour la prise en main du multi-threading sous Qt. Documentation d'opencv Fournie à l'installation de la librairie, elle documente son utilisation. QT4 et C++ Programmation d'interfaces GUI, Jasmin Blanchette et Mark Summerfield, édition CampusPress 28

Glossaire LGPL La Licence publique générale limitée GNU est une licence.. GPU Graphics Processing Unit, processeur de la carte graphique optimisé pour le calcul de données graphiques. Framework Ensemble d'outils et de bibliothèques facilitant le développement de logiciel. GUI Graphical User Interface MOP Méthode et Outils pour la Programmation orientée objet, module d'enseignement étudié lors du semestre 6 de la licence informatique. AS Analyse syntaxique, module d'enseignement étudié lors du semestre 6 de la licence informatique. Token Chaîne de caractères qui correspond à un symbole utilisé pour l'analyse lexicale d'un langage. Mutex Primitive de synchronisation utilisée en programmation pour assurer l'intégrité des ressources partagées entre plusieurs threads. Seuillage Opération de vision consistant à binariser une image. Les pixels au-dessus d'un certain seuil deviennent noirs, les autres blancs. 29

Annexe I. Protocole de communication les tokens : <INT> = entier <CHAR> = un caractère ASCII <AND> = & <PLUS> = + <VIRG> =, <PTSVIRG> = ; <AT> = @ <ACO> = [ <ACF> = ] <PARO> = ( <PARF> = ) <2P> = : <PIPE> = <STRING> = [CHAR]n <POINT> = <INT> <VIRG> <INT> les règles : demande : id <PIPE> liste_traitement <PIPE> image Une clé ID, une liste de traitements et les informations sur l'image sont spécifiées. Les éléments sont séparés par des pipes. Id : <STRING> Clé unique permettant d'identifier la réponse résultant d'une demande pour le logiciel de commande. traitement : <STRING> [ <2P> <STRING> ]* [ roi ]? 30

Un traitement est spécifié par son nom, une liste de paramètres (pouvant être vide) et éventuellement une zone d'intérêt sur l'image. roi : <ACO> <POINT> <2P> <POINT> <ACF> Une zone d'intérêt est composée par deux points séparés par un point-virgule. Elle est spécifiée entre accolades. image : date [ camera ]? [ redondance ]? L'image est spécifiée par une date, éventuellement une caméra, dans le cas ou aucune caméra n'est spécifiée, celle par défaut sera sélectionnée. Il est possible de demander à ce que le traitement s'effectue plusieurs fois avec la redondance. date : <AT> <INT> La déclaration de la date est précédée par un arobase. camera : <2P> <INT> redondance : <2P> <INT> [ <2P> <INT> ]? Le délai en millisecondes est éventuellement suivi par le nombre de répétitions de la demande, si celui-ci n'est pas spécifié, la demande sera effectuée en boucle jusqu'à demande d'arrêt. liste_traitement : traitement [ <PARO> liste_traitement <PARF> ]? [ <PTSVIRG> liste_traitement ]? Une liste de traitements est composée d'un traitement, éventuellement une liste de traitements entre parenthèses représentant le(s) nœud(s) fils et éventuellement une liste de traitements précédée par un point virgule représentant les nœuds frères (ou nœuds de même niveau). Exemple : 1(2(3));4(5;6);7(8);9(10;11;12) ID000 THRESHOLD:120(SIFIT_1;SIFIT_2;DETECTOBJECT:1000) 17042010152312102:1 31

II. Exemple de traitement de vision Pour illustrer le fonctionnement de la partie vision du logiciel, voici les étapes d'un traitement simple, la détection de contours des objets sur la scène. Illustration 9: détection de contours - image capturée par la caméra Illustration 10: détection de contours - image seuillée 32

Illustration 11: détection de contours - résultat 33

III. Interface du logiciel L'interface actuelle de développement du logiciel permet de tester des traitements et de charger les différents types de plugins. Elle sera étoffée au cours du développement. Voici à quoi elle ressemble aujourd'hui. Illustration 12: interface - test Illustration 13: interface plugin traitements 34

Illustration 14: interface - plugin caméra 35

Résumé La licence informatique se conclut par un stage en entreprise. Expérience qui permet de mettre à profit les connaissances acquises lors de la formation et de se confronter au milieu professionnel. J'ai saisi cette opportunité pour approfondir mes notions de programmation orientée objet et prendre part à un projet intéressant. Pour cela, j'ai décidé d'effectuer mon stage au sein de Percipio- Robotics, entreprise innovante issue du domaine de la recherche proposant des solutions de micro-manipulation où j'ai eu en charge la conception et le développement d'un logiciel de vision par ordinateur. Mots-clés : Micro-manipulation, Vision par ordinateur, Programmation orienté objet, C++, Qt Summary The computer sciences degree is concluded by a professional training. Experience wich permits to profit of the knowledge and to confront yourself amongst the profession. I profited of this opportunity to go futher into my notions of oriented-object programming and take part in an interesting project. To do so, I decided to complete my work placement whitin Percipio-Robotics, an innovative firm born from the field of research, proposing solutions of micro-manipulation, in which I had in charge the conception and the development of a software of computer vision. Keywords : Micro-manipulation, Computer Vision, Oriented-object programming, C++, Qt 36