 Je suis étudiant en génie électrique à l'École de technologie supérieure. Je suis aussi employé à Chessor-Fallinux comme programmeur de l'analyse. Je suis dans un club étudiant de robotique. Je conçois avec mon équipe un robot sous-marin autonome intelligent. Nous concevons la partie logicielle, électrique et le matériel aussi, partie mécanique. On a programmé un serveur de vision en piton qui sert le sous-marin des caméras. Le bus avec la vision artificielle a détecté les objets qu'on voit dans l'eau. On va envoyer la formation au système d'émission pour qu'il puisse prendre des décisions et contrôler les moteurs et bouger. Donc l'outil qu'on a fait sert justement à faciliter l'écriture des filtres. On a commencé des fonctions avec un filtre. Un filtre, c'est exemple une boîte, donc une image qui rentre. Il y a un traitement qu'on applique dessus et ça sert à une autre image. Une chaîne de filtre, c'est juste une chaîne de ces boîtes-là. Et puis la vision artificielle, le bus, c'est de faire la reconnaissance d'objets dans une image. Pour commencer le projet, il y a l'équipe CAPRA qui, eux autres, c'est un robot terrestre. Donc eux autres, il y a une caméra en haut, puis c'est une caméra éternette. Leur obstacle, eux autres, c'est détecter les lignes blanches sur du gazon, qu'on peut étudier à la cacane avec des comptes orange. Puis, vers la fin, il y a des drapeaux à détecter. Puis, leur robot doit passer dans ces obstacles-là. Puis, il y a l'équipe Sonya qui, en automne 2012, ont embarqué dans le projet. Donc eux autres, c'est un robot avec deux caméras en avant et une caméra en dessous. On a plusieurs obstacles comme des bois à détecter de différentes couleurs avec des obstacles. Ici, on a l'ancien torpée, il faut détecter une fenêtre, l'ancien torpée dedans, il y a des obstacles à prendre. Puis, il faut passer, il faut naviguer dans l'eau avec la vision. Donc, tout a commencé avec un ancien système qui a été écrit en C++, qui a été écrit en 2004, qu'on l'a utilisé jusqu'en 2012. Donc, c'est un outil vraiment complet et stable. On a utilisé OpenCV version 1. Puis, on avait plusieurs clients pour faire plusieurs traitements comme compresser les vidéos, voir les caméras, voir les filtres et éditer les filtres ensuite. Puis, c'était utilisé dans beaucoup de clubs étudiants. Jusqu'à la fin, ça a commencé à perdre la popularité. Mais, justement, les problèmes, les problèmes liés à ce système-là, c'était dur à maintenir. Dès qu'on ouvrait le serveur, le CPU, on utilisé beaucoup de CPU, puis il ne faisait rien. Il y avait beaucoup de clients, puis ils n'étaient pas toutes réunies. Puis ensuite, ça a pris plusieurs heures à installer. Ça a commencé à perdre la popularité. C'est pour ça qu'on a écrit SIGALT. Donc, SIGALT, on l'a mis sous licence GPL3. Le développement est libre. C'est un développement ouvert. On l'a mis sur Github, qu'on l'a écrit en Python. Puis, on l'a orienté pour la prévention de robots. Donc, SIGALT, c'est un serveur et un client. On peut rouler des filtres en Python ou en C++. C++, on l'a utilisé l'outil skypy-weave, avec le module X2, pour faire le lien entre le code C++ et le Python. On gère des caméras USB FireWire. On peut aussi prendre des images. On utilise des formats standards, parce qu'on utilise jusqu'à l'application FMPEG, qu'on peut ouvrir toutes les formats de vidéo et d'image. Les filtres sont dynamiques, qui sont laudés au démarrage d'applications. Ensuite, on a créé des paramètres qu'on peut partager aux filtres. On peut modifier l'antérielle, puis sauvegarder l'état des filtres. Quand on change l'environnement dans l'eau, on a gardé les paramètres quand la lune roule se décharge, d'autres trucs. C'est développé sur Linux. C'est référente privée. Il y a aussi une chose, c'est qu'il gère des environnements publics privés. C'est-à-dire que si on refait des fils et qu'il est gardé pour le club, ils ne seront pas commités publiquement. Pourquoi on a choisi Python ? En tant que serveur, on a moins besoin de performances. La performance, c'est plus au niveau des filtres. On voulait plus un outil de qualité. Depuis, on peut le développer plus rapidement. On n'a pas assez de temps à faire bien l'outil correctement. On a un ordre de réussite à sortir le produit. Je crois que avec l'écriture en Python, on va avoir un meilleur support à long terme. On va focuser sur la meilleure qualité et faire une belle écriture du code. Je crois que c'est un beau défi technologique d'essayer le Python. Ça, c'est l'interface graphique. La question, c'est si c'est compatible avec OpenCV. Oui. On utilise encore OpenCV pour le traitement des filtres. Tout commence avec une exécution à droite, à gauche. Une exécution contient une chaîne de filtres, un média. Dans ce cas-ci, c'est un pichier. Il y a aussi une barre de défilement. J'ai juste ouvert un pichier. L'exécution contient un fil qui est détection de la figure. Celle-ci contient des paramètres qui est la notification des données. Puis aussi, l'autre écran. L'autre module, c'est l'interface pour voir. Ce qu'il y a d'écran au filtre, c'est qu'on peut changer de filtre en temps réel et voir le résultat parce que chaque bloc sort une image. Un exemple de code d'un filtre, j'essaie de faire ça le plus simple possible. Donc, on crée notre classe. Le nom de la classe, c'est ce qu'on va voir comme nom de filtre, puisque si le filtre il demande si on veut changer l'image RGB en YQV ou en HSV, c'est un format d'image. Donc, on crée un paramètre dans le constructeur qui est dans ce cas-ci une liste de chaîne de caractère. En plus, c'est une fonction qui est l'exécution qui prend une image et qui retourne une image. Et puis, on crée un petit traitement dedans. Donc, ici, c'est à peu près une présentation, bref, de Seagult. Si vous cherchez un peu, il existe aussi Simple CV, qui est une plateforme pour faire de la vie artificielle. Donc, je voulais en parler parce que justement, c'est quoi la différence entre nous deux? Mais, l'avantage de Seagult, c'est surement ce qu'il y a un client. C'est un serveur qui roule, il est autonome. Il y a déjà des fils d'exécution. Il est sauvegardé. Simple CV, c'est plus un outil qu'on ajoute à une autre application. Lui, il gère beaucoup de médias comme la caméra de la Xbox. Puis, les FireWire, USB, il en gère beaucoup. Puis aussi, il facilite à l'écriture des filtres. Pour poursuivre, justement, ce serait le fun d'inclure Simple CV dedans pour avoir à tous ces outils. Actuellement, la communauté est assez petite. On essaie de la grandir, le grossir. Puis aussi, on pourrait trouver d'autres intérêts que j'ai de la robotique. On voudrait intégrer de meilleures transmissions avec un protocole RTP. Puis, la complétation de PiPi, actuellement, c'est interprété. On voudrait le complé avec PiPi et avoir plus de performances. Donc, ça, c'est les deux clubs d'utilisateurs qui ont contribué le plus. Et puis, ça va faire du support pour faire la démonstration. Donc, ça, c'est l'interface qu'on vit tantôt. Fait que part des fois et démoire une caméra qui d'ici, puis qui va suivre. C'est encore une version en beta. Donc, on ouvre la caméra. Puis, j'ai pris une chaîne de Filvid. Puis, on peut voir en temps réel le FPS. Puis, on peut faire d'autres changements. Je vais faire la démonstration. Donc, on va créer une chaîne de filtres. On va mettre le filtre de la transformation de BGR par YV. Puis, en même temps, on va mettre... J'ai peut-être trop de cheveux. Comment on peut ouvrir? On peut regarder deux formats d'image. On va-tu ma face? Donc, on peut voir plusieurs états de la chaîne de filtres. Donc, en ce moment, il y a les deux filtres appliqués. C'est la fin. Puis, il y a aussi le début qu'on peut voir dans l'autre. Quand c'est vide. Je vais montrer aussi un autre aspect intéressant du server. Je vais éditer en temps réel un filtre. Puis, on va reloader sans changer l'état de server. Donc, ça, c'était le filtre que je viens d'ouvrir. Ça, c'est le nouveau filtre que je vais montrer tantôt. Ce qu'on va faire, c'est... J'ai dit le fichier. C'est un sauvegarde. Ça va. Le filtre qu'on vient de modifier, c'était lui. On colle l'autre. On retrouve les autres vues. Tantôt, le filtre, il est transformé en image. Maintenant, il ne transforme pas. Puis, il a fait des détections ici. Puis, maintenant, dans le code, il venait de rajouter des paramètres comme vous avez vu tantôt. Au départ, il n'y en avait pas. Puis, il les a pris en compte. Il a tout reloadé le module. Il a remis dedans et puis, ici, on peut choisir entre les deux. Par défaut, ici, il n'y avait pas de valeur. C'est pour ça qu'il y a fichier. Puis, on va changer. Puis, il va le transformer tout de suite. C'est ça qu'on fait avec l'outil. On peut débarguer en temps réel. Puis, on peut voir le résultat tout de suite. Puis, quand, exemple, ça ne compile pas. Ou que tu vas t'en erreur dans la console, il va te dire t'en erreur. Puis, ça ne t'entra pas. Tu corriges l'erreur tout de suite. Puis, tu peux revoir les résultats. On peut même ensuite sauvegarder pour revenir à l'arrière. Puis, ça, ça nous a permis qu'il y ait quelqu'un qui va faire nos tests dans l'eau. On a l'obstacle devant nous. On change les paramètres. On sauvegarde. Puis, ça nous sauve beaucoup de temps. C'est ça, ma présentation.