Reconnaissance / Comparaison d'image
Bonjour,
je souhaite développer une application pour iPhone dans un premier temps, puis peut-etre Android.
Bref le problème n'est pas là , mon problème c'est que je souhaite une application qui utiliserai une reconnaissance / comparaison d'image.
Par exemple : on prend en photo un truc type QRCode, il va chercher dans la BDD si il y'a une image identique au QRCode prit en photo et après je sors des infos en fonction. Le mieux serai qu'il soit HORS LIGNE, pas besoin d'avoir de connexion internet, le QRCode doit être dans l'appli. (enfin ca serai le mieux).
L'erreur a deja était faite : Je n'utilise pas de QRCODE, c'est seulement pour un exemple. Autre exemple :
J'ai 3 images dans ma BDD : Carré / Triangle / Cercle (basique noir sur fond blanc), lorsque l'utilisateur prend une photo de l'une de ces images en question je veux l'iPhone aille dans sa base de donnée pour chercher à laquelle celle-ci correspond ...
J'ai cherché pas mal de temps et je n'ai rien trouvé. Ce qui se rapprochait le plus c'est : LTU.
Au niveau reconnaissance ça n'a pas l'air mal, mais après niveau prix je ne trouve pas grand chose, et pour le mobile c'est la version cloud qui est obligée de se connecter à internet malheureusement.
Si vous avez d'autres questions qui peuvent vous faire avancer n'hésitez pas.
Merci !
Réponses
A première vue ça me parait assez complexe.
Je ne m'y connais absolument pas en reconnaissance d'image mais à priori stocker une bdd importante sur la partie cliente c'est pas évident. Je veux dire c'est faisable, mais si celle-ci est volumineuse ça me parait difficile, surtout que là tu vas stocker tout et n'importe quoi nan ?
Dans ton exemple du qrcode, il me semble que l'adresse liée à un QRcode peut changer (cf les qrcode de malabar qui renvoyaient vers un site porno parce qu'ils avaient pas renouvelé leur abonnement ou du genre), donc du coup ta bdd peut être obsolète au bout d'un moment. Il te faudra forcement une connexion internet.
Après pour la reconnaissance d'image ça me parait difficile. C'est pas des réseaux de neurones qui savent faire ce genre de choses ? Si c'est des choses basiques comme tu le décris dans ton exemple des triangles et carrés il y a peut être moyen de trouver plus simple oui. Je sais qu'il y a une app sur l'appstore que permet de reconnaitre des photos presque identiques et de les supprimer.
Ce sont des images en noir et blanc donc avec un fort contraste, ça aide à la reconnaissance, et les QRCode incluent des marqueurs (les carrés dans les coins) permettant de caler bien plus facilement la reconnaissance, en les utilisant pour connaà®tre l'orientation du QRCode, où sont ses bords, sa taille / niveau de zoom, normaliser l'image car elle est souvent déformée par le fait que tu n'es pas pile en face du QRCode mais qu'il peut y avoir une déformation "skew" si tu vises le QRCode un peu de côté, etc.
La reconnaissance d'image de manière plus générale est beaucoup plus compliquée. Car justement tu n'as pas de marqueur, rien ne garantit que tu auras un bon contraste de ton image, tu n'as pas de point de repère pour caler ta reconnaissance et la normaliser quel que soit le niveau de zoom, l'angle de la prise de vue (déformation par projection) et l'orientation, etc. Sans parler des différences d'étalonnage si tu veux en plus détecter des images en couleur ou ayant un contraste pas aussi fort qu'une opposition noir/blanc comme sur les QRCodes ou les EAN13.
Dans tous les cas, n'imagine même pas coder un tel algo toi-même. C'est un sujet assez complexe, sur lequel il faut avoir les connaissances en traitement d'image ne serait-ce que pour comprendre les implications et comprendre comment orienter l'algo pour qu'il soit efficace, corrige les erreurs (orientation, qualité d'image, etc), implémente les bons filtres (prise en compte de la qualité d'image, normalisation, solarisation, détection de contour, convolutions, ACP...).
Après, il existe des librairies qui permettent ce genre de choses, pour comparer l'image prise par ton appareil photo avec une BDD d'images connues, et appliquer des algos de calcul de corrélation.
Ca marche plus ou moins bien selon si ces librairies incluent l'apprentissage (genre via réseaux neuronaux & co) ou non, et selon la taille et surtout la diversité, disparité et entropie de ta BDD d'images à reconnaà®tre (si toutes tes images se ressemblent dans ta BDD ça va pas aider par exemple). Sachant qu'avec apprentissage le système se perfectionne au fur et à mesure, mais si tu atteins la limite critique d'apprentissage voire la dépasse ça peut avoir l'effet inverse, le sur-apprentissage risquant de ne plus être assez tolérant et de ne finir par reconnaà®tre que ce que tu lu as appris, ou à l'inverse d'être trop permissif et de reconnaà®tre même des images trop éloignées comme étant similaires s'il a appris à reconnaà®tre trop de variantes de la même image, ...
Mais dans tous les cas, vu la complexité du truc, souvent il faut s'attendre à ce que ce soit payant. C'est normal en même temps vu le boulot que c'est de faire une telle lib.
OpenCV permet de reconnaitre des formes simples (ellipses et lignes) sans difficulté.
Salut !
Merci à tous pour vos réponses ...
Pour détailler un peu plus j'aurai entre 100 et 200 images (pas très lourdes), de type QRCode (plus simple) en couleur , pour un genre mini jeux avec des petites images à prendre en photo pour répondre aux questions.
C'est pourquoi, d'un point de vue stockage et évolution il n'y a pas de problème, après la question c'est est ce qu'il y'a une lib avec des algos qui tiennent la route.
Je ne demande pas d'algo complexe qui doit reconnaitre des visages, plantes ou autres choses aussi difficile, c'est pourquoi en sachant qu'il y'a des libs gratuites telle que OpenCV je me dis qu'il y'a peut-être une lib qui pourrai répondre à mes besoins.
En espérant vous avoir donné de nouveaux détails ...
Merci encore
- Quel contraste et diversité sur la palette de couleurs ? S'il faut différencier un rouge d'un marron par exemple, ça va être dur, alors que s'il faut différencier un cercle rouge d'un cercle bleu, ça peut être plus simple.
- Quelle gradient sur le différentiel de tes images ? J'entend par là , est-ce que tes images sont de type photo, avec des couleurs très similaires dans des régions similaires (du vert clair à côté du vert foncé, etc), ou plutôt des images avec un fort contour, par exemple des formes de couleur unie sur un fond unie (cercle bleu sur fond rouge, etc) ? En gros, est-ce qu'un algo de détection de contours saura faire ressortir facilement les formes ou est-ce que c'est plutôt façon photo où les contrastes ne sont pas assez forts entre pixels proches pour que les changements de zones de couleurs soient difficiles à détecter ?
- Quelle entropie dans ta base d'images ? Si ce sont que des formes similaires ça va être dur aussi. Par exemples pas forcément facile de distinguer un octogone d'un cercle
En fait faudrait que tu nous donnes un peu d'exemples des images que tu as. Car selon le type d'image, leur catégorie et classification. Qu'on puisse avoir une idée des algos qui pourraient être mis en place, car ça dépend énormément de la catégorie des images (formes à haut contraste, photo, etc)
Idéalement il serait bon de connaà®tre aussi le contexte dans lequel les photos seront prises par l'utilisateur pour affiner encore le choix du bon algo et de la bonne lib. Par exemple, si le jeu se passe en intérieur dans des salles généralement éclairées à la lumière artificielle, tu n'auras pas la même variance dans les photos prises par le joueur que si le jeu se joue en extérieur (parfois de jour, parfois de nuit avec flash, parfois sous la pluie avec temps couvert, ...), ça peut jouer aussi.
Et sinon, en lib gratuite de reco d'image il y a essentiellement OpenCV effectivement. La dernière fois que j'avais essayé de builder OpenCV pour iOS, c'était une vraie galère rien qu'à builder avant même de pouvoir essayer de l'utiliser (alors que un "make" dans le Terminal sous OSX ou Linux marchait correctement). Je pense qu'ils se sont améliorés sur le portage d'OpenCV iOS depuis, mais je sais pas où ça en est et si maintenant ça s'intègre très bien, voire sous forme de framework tout fait ou de CocoaPod, ou si c'est toujours aussi galère, faut regarder. Mais si c'est livré sous forme de pod ou framework tout prêt pour iOS et que donc ça s'intègre bien, le mieux est aussi que tu lises la doc et fasse mumuse avec pour voir les résultats concrètement sur tes images.
Je vais essayer de vous fournir quelques images pour que vous voyez plus précisément
Malheureusement je n'ai pas la main sur la façon dont les joueurs vont prendre les photos
Mais de toute façon si on fait la liste des choix que j'ai, peu importe les images, il n'y a que OpenCV ? ^^
OpenCV est malheureusement en ligne si je ne me trompe pas ?
Ahh donc ça a changé Faut dire que les posts que je lisais dessus datait un petit peu ! Tant mieux alors ...
Je vais bidouiller un peu et voir ça !
Merci