OpenCV+AKAZE pour la Reconnaissance d'images

Je ne sais pas si vous avez entendu parler de l’algorithme KAZE. C’est un système de détection de forme fonctionnant en 2D, sorte de successeur des approches SIFT et SURF (ou encore FREAK et BRISK) pour ceux qui connaissent plus ces derniers. Il supporte beaucoup mieux le bruit et les déformations spatiales dues au Blur. D’ailleurs, c’est amusant, car KAZE en japonais signifie le « vent ».

A-KAZE est une version accélérée de KAZE utilisant le Fast Explicit Diffusion (FED) pour améliorer la vitesse de traitement, ce qui le rend utilisable dans nos téléphones portables.

Bon, comme une vidéo vaut 100 discours et que je serais incapable de vous expliquer mathématiquement comment cela fonctionne, voyons ce que cela permet:


Remarquez ces points de convergence entre les 2 images. Regardez cette autre vidéo pour comprendre à quel point l’algorithme est capable de fonctionner dans des conditions extrêmes:

Bon, avec un certain nombre de correspondance, on peut se dire que les 2 images sont proches, mais ce n’est pas suffisant toutefois. Avant de voir comment exploiter le résultat, réfléchissons à une application: la reconnaissance de visage ? Bof, il y a de meilleurs algos pour cela. Non, c’est bien mieux pour des objets du quotidien ou même de la prise de photos dans un paysage. Ah, vous voyez où je veux en venir ? Vous vous rappelez de cet article sur la photogrammétrie avec un drône ? Ou même de celui-ci ? Voilà… avec cela, on peut recoller les photos – il manque toutefois quelques éléments pour le repositionnement dans l’espace, mais on en est pas loin. il y a aussi le tracking d’objet en mouvement comme la détection « visuelle » de drones afin d’établir un calcul balistique en vue d’une destruction (zut, je vais encore recevoir une visite des RGs ou de la DST… bah, sont habitués, viendront prendre le café – le plus proche habite à …. c’est mon voisin 🙂 – il a emménagé à quelques jours près juste à coté quand je me suis installé ).

Mais restons pour l’instant sur l’identification de formes. Avec AKAZE, on obtient les points de correspondance (les matching keypoints) entre 2 images. On peut les sauver dans un fichier au format JSON facilement exploitable. Mais le mieux est de réinjecter cela dans OpenCV pour identifier l’homographie de l’image dans la photo. OpenCV est une librairie d’Intelligence Artificielle dédiée au traitement de la vision. Les différents algos qui nous concernent ici et supportés par OpenCV sont ici. on y retrouve BRISK, SIFT et … AKAZE ! Non, franchement si vous ne connaissez pas cette lib, allez la tester, c’est vraiment top ce qu’on peut faire avec, tout en ayant très peu de connaissances sur le sujet !

Si vous voulez faire vos propres tests, vous trouverez une implémentation de l’algorithme à cette adresse. Il y a également tous ces passionnants travaux sur la question à cette adresse. Sinon, plus simplement, commencez par compiler et tester le code à cette adresse: c’est un test de base à partir d’ACAZE et d’OpenCV.

En partant de cette image:

graf

On obtient ce résultat:

res

Soit: Keypoints 1: 2943 Keypoints 2: 3511 Matches: 447 Inliers: 308 Inlier Ratio: 0.689038

Ainsi, nous avons une correspondance à 69%, ce qui est un très bon chiffre, malgré la déformation spatiale du à l’angle de la prise de photo.

Bon, si comme moi vous préférez utiliser ce genre d’algo en python, vous pouvez aller lire cet article (c’est pour Mac OS, mais c’est pareil au final). Et vous trouverez plein de tutos intéressants sur le sujet sur Intorobotics.org

Purée, ça y est, j’ai encore envie de travailler sur un système d’interception avec calcul balistique… mais bon, je suis dans la réalité virtuelle en ce moment – et y-a déjà beaucoup à faire- puis, chaque chose en son temps 😉

PS: La meilleure défense, c’est l’attaque – non je déconne – ça ne parait pas je le sais, mais je suis un pacifiste convaincu. En même temps, je suis aussi partisan du fait que si tu pointes un gros missile sur ton voisin, il ne viendra jamais garer sa voiture devant chez toi. Bref, mieux vaut une forte dissuasion que de le laisser croire qu’il a une chance de t’en coller une par derrière. Bref, c’est ma philosophie de vie.

4 Commentaires

  1. MatFenric

    Est ce qu’on pourrait utiliser ce genre de technologie pour faire de la reconnaissance de pion/figurine sur une table de jeu ?

    Réponse
    • greg

      Bien sûr, avec OpenCV et une ou deux bonnes cams orientées vers me plateau de jeu, ça doit bien fonctionner.Encore faut-il que les figurines soit suffisamment différenciées.

      Réponse
  2. rastaman fe

    j’ai utilisé l’algorithme pour la reconnaissance d’une colonie en mouvement apres detection sur camera et ben j’ai un peut mal a gerer. j’utilise python et open cv .si quelqu’ un peut m’aider je lui serai reconnaissant et au fait merci pour le partage c’est un enorme evolution dans la technologie de demain

    Réponse
    • greg

      Quel genre de souci rencontres-tu ? Je maitrise bien python et je pratique un peu OpenCV, sans en être un spécialiste. Si je peux aider…

      Réponse

Soumettre un commentaire

Votre adresse e-mail ne sera pas publiée.

Ces articles pourraient aussi vous intéresser …