Skip to content

Releases: Vrock691/SerPa-Uni

Rendu Universitaire

02 Jan 11:29
Compare
Choose a tag to compare

Introduction

Ce rapport a pour objectif de présenter les finalités de l'algorithme, d’en détailler son développement et d’en analyser les éventuelles forces et faibless avant de conclure par les possibles améliorations.

Important : Il était strictement interdit d'utiliser les différentes techniques de machine learning ou de réseau de neurones convolutifs.

Dans le rapport à suivre, SerPa sera nommé entant que "Application", "Algorithme" ou "Programme".

Partie 1 : Les Applications et Usages

Le programme SerPa, également connu sous le nom de Searchin Pattern, est conçu pour exceller dans la reconnaissance de motifs spécifiques au sein d’images variées. Chaque pattern est associé à un nombre binaire à 4 bits. Ce codage repose sur un carré central, divisé en quatre sous-carrés. Chacun de ces sous-carrés est soit noir (représentant un bit de valeur 1) soit blanc (représentant un bit de valeur 0). La lecture s'effectue dans l'ordre suivant : haut gauche -> haut droite -> bas gauche -> bas droit. Dans sa version actuelle, SerPa est capable d’identifier jusqu’à 16 motifs différents sur des supports visuels divers, tels que des panneaux publicitaires, des affiches, des gobelets, etc.

L’intérêt principal de ce programme réside dans ses applications variées et innovantes :

  • Reconnaissance de motifs pour un accès VIP : SerPa peut être utilisé dans des environnements événementiels pour détecter des motifs exclusifs. Par exemple, des motifs spécifiques pourraient servir de clé d’entrée pour des espaces réservés aux VIP, simplifiant l’accès tout en garantissant une confidentialité élevée.

  • Communication codée grâce à un système binaire : Le programme est également capable de lire un code à 16 chiffres, construit à partir d'un format binaire (chaque case pouvant être noire ou blanche). Cette fonctionnalité permet d'utiliser SerPa comme outil pour échanger des messages cryptés ou sécurisés dans des environnements nécessitant une confidentialité élevée.

  • Événements et jeux immersifs : Dans le cadre de chasses au trésor ou d’escape games, SerPa peut être utilisé pour scanner des motifs sur des objets ou des indices disséminés dans l’environnement. Cela ajoute une dimension interactive au jeu, permettant aux participants de progresser en décodant des motifs spécifiques.

Remarque : Le dernier exemple ne peut pas être utilisé actuellement, car SerPa ne contient aucune redirection vers un site externe. Bien que cette fonctionnalité ne soit pas complexe à implémenter, elle n’est pas encore en place.

Partie 2 : La Création

Conception

Dès les premières étapes de la conception du programme, nous avons opté pour le framework Streamlit. Ce choix stratégique nous a permis de créer une interface utilisateur interactive et conviviale, sans dépendre d'un terminal. En hébergeant l’application sur une plateforme web, nous avons pu intégrer divers éléments d’interface tels qu’une dropzone pour le dépôt de fichiers, un titre descriptif, ainsi que des textes explicatifs pour guider l’utilisateur.

Bibliothèques utilisées

Conformément aux consignes, nous avons exploité plusieurs bibliothèques pour répondre aux exigences du projet :

  • OpenCV : Cette bibliothèque a été le cœur du traitement d’images. Elle nous a permis d’implémenter des algorithmes avancés comme SIFT et ORB pour diverses opérations, notamment :
    • Conversion des images en niveaux de gris.
    • Lecture et traitement des fichiers d'image.
    • Mise en place d’un système de correspondance des caractéristiques.

En complément, nous avons utilisé des bibliothèques supplémentaires pour enrichir les fonctionnalités :

  • NumPy : Cette bibliothèque a été essentielle pour représenter les images sous forme de tableaux numériques. Elle a simplifié des tâches comme l’extraction des pixels et la délimitation de la région d'intérêt (Region of Interest, ROI). Cette délimitation permet à l’utilisateur de restreindre la zone de recherche d’un motif. Bien qu’imparfaite, cette approche s'est avérée rapide et adaptée au contexte.

  • PIL : Grâce à cette bibliothèque, nous avons pu lire et manipuler directement, au sein du programme, les images traitées via Streamlit, garantissant une intégration fluide avec l’interface utilisateur.

Structuration et Organisation

Afin d’optimiser la clarté et la maintenabilité du code, nous avons décidé de séparer les fonctions auxiliaires du fichier principal. Cette démarche a permis de réduire la taille du fichier principal tout en améliorant la lisibilité et la modularité du programme.

Approche algorithmique

Pour l’analyse et la correspondance des motifs, nous avons principalement utilisé SIFT. Initialement, nous avions également testé ORB, mais les résultats se sont avérés décevants en raison de la sensibilité d’ORB aux déformations géométriques complexes et aux variations de perspective, ce qui a conduit à un taux de réussite insuffisant.

Dans une tentative d'amélioration, nous avons exploré une combinaison des algorithmes SIFT et ORB afin de profiter des points forts de chacun :

  • ORB : Rapide, peu gourmand en ressources et robuste face aux variations d’éclairage.
  • SIFT : Plus coûteux en termes de calcul, mais capable de gérer efficacement les transformations complexes, telles que les rotations, les changements d’échelle et les déformations.

Cependant, cette combinaison n’a pas produit d'amélioration notable des performances (voir les sections détaillées sur les échecs).

Pour surmonter ces limitations, nous avons repensé l'algorithme en adoptant une approche innovante. Tout d'abord, nous utilisons la détection de cercles disponible dans la bibliothèque OpenCV pour localiser les trois cercles noirs et le cercle blanc qui encadrent le motif à scanner. Pour ce faire, nous divisons la zone d'intérêt en quatre quadrants et enregistrons leurs coordonnées afin d’aplanir l’image à l’aide d’une transformation de perspective (warp) et ainsi rapprocher les motifs scannés de leur représentation idéale. Si aucun cercle n’est détecté ou si la détection est incomplète, cette fonction n’est pas exécutée pour éviter tout étirement destructeur.

Ensuite, les quatre parties de la zone d’intérêt sont soumises à une détection de contours pour identifier les éventuels carrés blancs ou noirs. Si les rectangles ne peuvent pas être détectés correctement, l’algorithme repasse la main à SIFT pour effectuer une reconnaissance basée sur les motifs enregistrés.

Bien que cette méthode soit plus complexe et coûteuse en termes de calcul, elle s’est avérée significativement plus efficace sur une partie du jeu de données et a permis une amélioration notable du taux de réussite global.

Partie 3 : Les Réussites et Les Echecs

L'Analyse des performances actuelles :

De manière générale, et sur la base des images testées, notre application atteint un taux de réussite de 49.03%.

D'une part, bien que ce résultat reste mitigé, il reste néanmoins convenable dans certains cas spécifiques. En effet, notre algorithme excelle particulièrement dans les situations où :

  • Le motif recherché se trouve sur un fond blanc uni, permettant une reconnaissance visuelle claire et sans ambiguïté.
  • Le motif n'est pas sujet à des distorsions majeures. Il est capable de tolérer certaines déformations mineures sans altérer la détection (comme observé avec l'image MEA-5-4G).

Vous retrouverez, ci-dessous, la liste des images où SerPa a reussi à détecter un pattern

Nom de l'Image Avec Recadrage Sans Recadrage Via Sift Via Chiffres
3-3 X X
4-3 X X
1-3 X X
2-3 X X
B-2-autre X X
B-2 X X
R-2 X X
T-2 X X
L-2 X X
4-4 X X
4-1 X X
2-2 X X
2-1 X X
Patern2_MiseEnAbime X X
Produit-1 X X
MEA-6-3G X X
MEA-8-3G X X
MEA-5-3G X X
MEA-4-3G X X
MEA-3-3G X X
MEA-14-4G X X X X
MEA-7-4G X X X
MEA-6-4G X X
MEA-5-4G X X
MEA-4-4G X X ...
Read more