JeuWeb - Crée ton jeu par navigateur
[PHP] Comparer deux images? - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [PHP] Comparer deux images? (/showthread.php?tid=7192)



[PHP] Comparer deux images? - Argorate - 05-07-2014

Bonjour,

je voulais savoir selon vous la meilleur méthode pour comparer deux images via un script php?

En cherchant un peu, on trouve cette lib: http://www.php.net/manual/fr/book.imagick.php
je ne connais pas, quelqu'un sait si c'est fiable et simple à prendre en main?

Sinon d'autres propose la comparaison de md5() des images. Le problème c'est que depuis que je sais qu'il peut y avoir des collisions de hash pour deux longue chaines, es-ce que la comparaison de deux grosses images ne rentre pas dans ce cas?

autre solution intéressante?


Si vous avez un moyen d'avoir la distance entre deux images, ça peut être bien, car même si c'est pas identique au pixel prêt, si deux image sont à X% identique (X paramétrable), ça peut correspondre a notre recherche.
Donc si vous connaissez un moyen d'avoir cette fonctionnalité avancé, ça m’intéresse aussi.


RE: [PHP] Comparer deux images? - Xenos - 05-07-2014

Dans toute comparaison d'image, il faut partir de termes/demandes précises:

Citation :si deux image sont à X% identique (X paramétrable), ça peut correspondre a notre recherche.
Qu'est ce qui constitue ce pourcentage? On compare 2 à 2 les pixels des images, et s'ils sont différents, on considère que l'image est différente en ce point? Mais #ff0000 et #fe0000 sont différents, alors que la couleur est vachement proche. Et si on a juste inversé les couleurs de l'image? OU qu'on la tournée de 90°? Ou retournée recto/verso? Elle sera vue comme 100% différente, alors qu'en pratique, elle n'est pas si différente que cela (on a juste pris l'inverse des couleurs).

Pour la collision md5, faudrait pas abuser: si l'image est simplement un avatar ou assimilé, la collision n'a pas d'intérêt à être trouvée. De plus, la comparaison servant surement à dire "ces deux images sont différentes: les gens qui les verront penseront qu'elles sont différentes", alors la collision n'est plus utile, car même si on trouvait une autre image qui a le même hash, les chances pour qu'elle soit quasi-identique (oeil-humainement parlant) sont très faibles (et insignifiante si l'image sert de décoration).

La fonction imagick compare pixel à pixel il me semble, donc c'est parfaitement fiable, mais tout dépendra de ce que t'en feras et pour quel problème exact la question est posée.


RE: [PHP] Comparer deux images? - Argorate - 06-07-2014

En gros tu me demandes la définition de "image proche"? Je ne la connais pas, et presque je m'en fiche, j'aimerais que l'algo le sache et qu'il sache me dire si deux image se ressemble à 90% (sur l'ensemble des pixels), après le détails de l'algo de savoir la distance des couleurs rgb ou une quelconque transformation, ça ne m’intéresse pas en soit, tant que le résultat de l'algo est correct.

Je ferais un premier essai avec imagick je pense^^

Le but est simple: trier mes images ! J'ai plein d'images et beaucoup de doublon. Le but serait de détecter les doublons et n'en garder qu'un, et détecter des images proches pour voir s'il ne s'agit pas d'une que j'ai déjà mais légèrement plus moche par exemple (de moins bonne qualité) ou avec qq pixel différent qui ne justifierai pas que je conserve l'image.
Histoire de faire le tri dans mes ressources graphiques !


RE: [PHP] Comparer deux images? - Sephi-Chan - 06-07-2014

Pourquoi est-ce que tu veux faire ça en PHP ?
Tu as des outils en ligne de commande qui savent faire ça (findimagedupes, par exemple). Tu peux les invoquer depuis tes scripts.


RE: [PHP] Comparer deux images? - rachids - 06-07-2014

Ou sinon tu as l'API de TinEye : http://services.tineye.com/TinEyeAPI (mais c'est payant)


RE: [PHP] Comparer deux images? - julie11800 - 06-07-2014

Bonjour,
Tu peux aussi utiliser image magic.
http://www.php.net/manual/fr/imagick.compareimages.php


RE: [PHP] Comparer deux images? - Xenos - 06-07-2014

Citation :j'aimerais que l'algo le sache et qu'il sache me dire si deux image se ressemble à 90% (sur l'ensemble des pixels)

Cela reviens à dire "j'aimerai que l'algo me calcule ma fonction, mais je veux pas la définir...

Le but indiqué contient la définition demandée: "humainement proches, à l'oeil". Et je rejoins Sephi: il existe certainement des outils en C/C++ ou autre langage plus natifs que PHP pour faire cela (car là, tu devrais comparer chaque image stockée à chaque autre image stockée... s'il n'y a que 100 images, ok, cela fait 10.000 comparaisons, c'est jouable, mais s'il y en a 10.000, t'es parti pour 100.000.000 de comparaisons et des mois de calculs en PHP, qui est totalement inadapté pour cela).

Et si tu veux coder, il existe surement des libs qui s'en chargent (CImg, Magick++,...).
Le HGPU fera d'ailleurs un excellent allié pour ce genre de traitement.