Chers lecteurs bonjour,
Situons d'abord un peu le contexte : Les totoz, ce sont ces petites images beaucoup utilisées sur certains forums comme ceux de hardware.fr pour illustrer les discussions, mais aussi sur les tribunes, y compris la tribune de DLFP (ou sa version AJAX). Le serveur de totoz historique, celui de hardware.fr, étant quelque peu restrictif (un seul totoz par utilisateur, d'où le besoin de créer un compte pour chaque nouveau totoz, taille très réduite, modération des images), un serveur alternatif, totoz.eu, fut mis en place par LLG<.
Vers la fin de l'année dernière, suite à une mise à jour de Ruby le totoz.eu d'origine a arrêté de fonctionner et comme personne n'était capable de le mettre à jour (bravo la maintenabilité du ruby !) j'ai monté une nouvelle version en PHP avec Drupal.
Ce week-end, j'ai pensé à deux nouvelles features et je les ai mises en place, c'est de cela que je voudrais vous parler aujourd'hui.
Une pratique relativement courante sur hardware.fr est de réutiliser un totoz existant tel quel, par exemple les totoz [:aloy] et [:sugoy].
Une autre pratique est de prendre un totoz existant et de le modifier un peu pour en faire un nouveau, par exemple [:totoz] et [:infocore], ou encore [:garghahamail] et [:lefebvre haha]. Vous remarquerez les subtiles différences.
Ce que je voulais, donc, c'était pour chaque totoz, proposer une liste des totoz identiques et une liste de totoz différents mais « similaires ». Pour les totoz identiques pas de problème, il suffit de comparer le md5, mais pour la similarité... c'est une autre paire de manches !
J'ai d'abord cherché du côté d'une API chez TinEye, un moteur de recherches d'images bien connu des participants à What The Movie. Mais à 300 $ les cinq mille recherches, avec ma base de onze mille totoz, non merci. En cherchant des alternatives libres ou tout au moins gratuites, je suis tombé sur CoPhIR qui est « available to the research community » mais pas tout le monde, apparemment.
De nombreux autres papiers de recherche, projets en « preview » depuis 2002, sites payants, plus tard, j'ai trouvé findimagedupes, un petit outil libre et simple en perl, datant de 2002 mais réécrit plus tard et plus ou moins maintenu pour Debian (voir ici).
Sur mon serveur, findimagedupes analyse les 11000 totoz en à peu près une minute, pas mal. Mais je n'en étais pas tout à fait content, d'abord à cause du format sous lequel sont présentés les résultats : tous les fichiers similaires sur une seule ligne, séparés par des espaces, mais certains fichiers contiennent déjà des espaces, pas facile à parser donc, et le fait que tous les fichiers sans aucun fichier similaire soient considérés comme tous similaires, un peu bizarre.
J'ai donc continué ma quête et j'ai découvert ImgSeek et surtout isk-daemon. Un serveur en python, qui indexe les images (il a bien pris une trentaine de minutes pour indexer tous les totoz) puis retourne des résultats de recherche très rapidement (ça se mesure en centièmes de seconde). L'index toujours pour 11000 totoz fait 12 Mo, et le serveur prend une quarantaine de mégaoctets en RAM, ce qui est raisonnable.
Voilà donc un exemple des résultats pour le totoz [:totoz] : http://totoz.eu/totoz/totoz/similar
pour [:aloy] : http://totoz.eu/totoz/aloy/similar
ou un petit totoz tout simple, [:mpk] : http://totoz.eu/totoz/mpk/similar
Les résultats pour d'autres totoz, en particulier les visages, sont un peu différents, voir par exemple [:big menes] : http://totoz.eu/totoz/big%20menes/similar mais ils me semblent plutôt pertinents après tout.
J'en ai profité pour publier un petit script en ligne de commande pour rechercher des totoz : http://ssz.fr/brdl/totoz.sh (je vous suggère de le renommer en "ttz", c'est plus rapide à utiliser), il utilise les nombreuses API mises à disposition par totoz.eu, tout comme olcc pour sa recherche de totoz (j'espère d'ailleurs que chrisix< trouvera des applications à la recherche de totoz par similarité !).
Voilà, je souhaitais partager mes recherches et mes découvertes avec vous. D'ailleurs si vous avez vous-mêmes de l'expérience à ce sujet, d'autres pistes à me suggérer pour la recherche d'images par similarité visuelle, ou bien d'autres fonctionnalités intéressantes pour totoz.eu, n'hésitez pas à laisser un commentaire.
# Gloire au totoz
Posté par téthis . Évalué à 4.
En même temps c'est une façon ludique de découvrir le monde, comme par exemple ces types qui se bastonnent à grand coups de néons.
http://totoz.eu/gif/Neon6.gif
http://totoz.eu/gif/Neon4.gif
http://totoz.eu/gif/Neon3.gif
The capacity of the human mind for swallowing nonsense and spewing it forth in violent and repressive action has never yet been plumbed. -- Robert A. Heinlein
[^] # Re: Gloire au totoz
Posté par zebra3 . Évalué à 6.
Article Quarante-Deux : Toute personne dépassant un kilomètre de haut doit quitter le Tribunal. -- Le Roi de Cœur
# Nostalgie
Posté par Nicolas Dumoulin (site web personnel) . Évalué à -9.
Mais depuis j'ai grandi, j'essaie de faire des choses utiles, gagner ma vie, faire une famille …
Nostalgie du temps de l'insouciance …
Sincères salutations aux copains qui y sont restés [:spamafote]
[:zjk]
[^] # Re: Nostalgie
Posté par 못 옷 홋 ♨ (site web personnel) . Évalué à 10.
J'ai plutôt l'impression en fait que ces arguments sont sortis - à tort ou à raison - en tant qu'excuses pour ne pas contribuer, ou pour se retirer d'une communauté. Dans tous les cas, ils n'ont pas lieu d'être : non seulement ils partent d'une supposition fausse (activité au sein d'une communauté sur internet => pas de vie réelle) mais au-delà de ça ce ton condescendant est tout à fait détestable et déplorable. La condescendance et l'élitisme sont deux choses que j'exècre.
[^] # Re: Nostalgie
Posté par B16F4RV4RD1N . Évalué à 3.
Only wimps use tape backup: real men just upload their important stuff on megaupload, and let the rest of the world ~~mirror~~ link to it
[^] # Re: Nostalgie
Posté par Nicolas Dumoulin (site web personnel) . Évalué à 8.
Oui, ces arguments sont sortis pour expliquer *ma* situation qui m'ont fait quitter cette communauté. En relisant mon message, je pense vraiment qu'il a été mal interprété et que je n'ai porté aucun jugement sur qui que ce soit.
D'ailleurs mon titre « Nostalgie » annonçait bien un sentiment « personnel ».
C'est peut-être le « des choses plus utiles » qui a laissé un flou malheureux, j'aurait dû précisé « à mon existence ».
Sinon, oui, ton projet est sensationnel :-)
# Je vais poser une question sérieuse, mais...
Posté par zebra3 . Évalué à 4.
Article Quarante-Deux : Toute personne dépassant un kilomètre de haut doit quitter le Tribunal. -- Le Roi de Cœur
[^] # Re: Je vais poser une question sérieuse, mais...
Posté par El Titi . Évalué à 8.
[^] # Re: Je vais poser une question sérieuse, mais...
Posté par Infernal Quack (site web personnel) . Évalué à 5.
Et accessoirement, ça sert à faire chier chauvounet.
L'association LinuxFr ne saurait être tenue responsable des propos légalement repréhensibles ou faisant allusion à l'évêque de Rome, au chef de l'Église catholique romaine ou au chef temporel de l'État du Vatican et se trouvant dans ce commentaire
[^] # Re: Je vais poser une question sérieuse, mais...
Posté par El Titi . Évalué à 2.
[^] # Re: Je vais poser une question sérieuse, mais...
Posté par BAud (site web personnel) . Évalué à 3.
[^] # Re: Je vais poser une question sérieuse, mais...
Posté par kowalsky . Évalué à -5.
:)
[^] # Re: Je vais poser une question sérieuse, mais...
Posté par El Titi . Évalué à 4.
[^] # Re: Je vais poser une question sérieuse, mais...
Posté par 못 옷 홋 ♨ (site web personnel) . Évalué à 2.
[^] # Re: Je vais poser une question sérieuse, mais...
Posté par téthis . Évalué à 2.
J'imagine que c'est la forme plurielle anglicisée de toto, le personnage des blagues et des essais de commentaires (avec sa bande de titi et tata).
The capacity of the human mind for swallowing nonsense and spewing it forth in violent and repressive action has never yet been plumbed. -- Robert A. Heinlein
[^] # Re: Je vais poser une question sérieuse, mais...
Posté par Jerome Herman . Évalué à 3.
Bref, si ca n'avait tenu qu'à moi, on aurait appelé ca des kizmir, parceque vu la proportion que ca prend aujourd'hui c'est vachement plus [:kizmir] que [:totoz]. Mais bon quand j'ai soumis l'idée on m'a [:haha] du coup c'était [:totoz] et j'étais moins pas d'accord.
[^] # Re: Je vais poser une question sérieuse, mais...
Posté par Robert Palmer (site web personnel) . Évalué à 0.
Pensez à l'environnement avant d'imprimer ce commentaire - Please consider the environment before printing this comment
# "mais certains fichiers contiennent déjà des espaces"
Posté par Gniarf . Évalué à 7.
[^] # Re: "mais certains fichiers contiennent déjà des espaces"
Posté par totof2000 . Évalué à 2.
[^] # Re: "mais certains fichiers contiennent déjà des espaces"
Posté par claudex . Évalué à 3.
« Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche
# Bundling Features for Large Scale Partial-Duplicate Web Image Search
Posté par laowai666 . Évalué à 2.
http://research.microsoft.com/en-us/um/people/jiansun/papers(...)
Vous n'avez plus qu'à implémenter l'algorithme =)
[^] # Re: Bundling Features for Large Scale Partial-Duplicate Web Image Search
Posté par zebra3 . Évalué à 5.
Article Quarante-Deux : Toute personne dépassant un kilomètre de haut doit quitter le Tribunal. -- Le Roi de Cœur
[^] # Re: Bundling Features for Large Scale Partial-Duplicate Web Image Search
Posté par Fussty . Évalué à 2.
http://lear.inrialpes.fr/pubs/2010/JDS10/
[^] # Re: Bundling Features for Large Scale Partial-Duplicate Web Image Search
Posté par Toufou (site web personnel) . Évalué à 0.
# ASCII vaincra \o/
Posté par Single . Évalué à 4.
Un simple :-) de 3 octets, au moins tout le monde comprend, et ça ne gaspille pas la bande passante ! Pensez à la planète, bande de pollueurs !
Oui à la taxe carbone sur les smilaids ;-)
[^] # Re: ASCII vaincra \o/
Posté par Prosper . Évalué à 6.
# Tentative de troll ?
Posté par totof2000 . Évalué à 5.
Pis pas de bol, lors de la prochaine migration PHP, tu ne seras plus la, ça ne fonctionnera plus, et un spécialiste Python voudra reprendre le flambeau pour porter le truc et il dira la même chose : personne n'était capable de le mettre à jour. Bravo la maintenabilité dePHP !
Quand tu connais le langage, Ruby n'est pas plus difficilement maintenable que PHP (je drais même "au contraire", mais je ne serais pas objectif : ça fait pres de 10 ans que je n'ai plus fait de PHP). D'aileurs c'est à peu près valable pour tous les langages (sauf Perl, et C/c++ qui permettent d'écrire facilement du code obscur).
[^] # Re: Tentative de troll ?
Posté par claudex . Évalué à 4.
« Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche
[^] # Re: Tentative de troll ?
Posté par 못 옷 홋 ♨ (site web personnel) . Évalué à 5.
PHP, jusque là mes applications écrites pour PHP 4 tournent encore avec des adaptations mineures alors qu'on en est à PHP 5.3. Dans l'autre sens, Drupal vient tout juste de sortir sa première version cassant la compatibilité PHP 4... je rappelle que PHP 4 date de 2000 !
Et comme le dit claudex< ci-dessus, l'auteur de ToBybuR, encore une application Ruby, voit lui aussi souvent l'application casser lors d'une mise à jour de Ruby.
Tu parles de PHP, Perl, C et C++, et ces langages font justement de gros efforts pour garder une compatibilité ascendante : à quelques exceptions près, n'importe quelle application écrite dans un de ces langages il y a des années, tourne encore avec une version récente, et tournera probablement pendant encore un bon nombre de versions.
À l'évidence il n'en est pas de même pour Ruby.
[^] # Re: Tentative de troll ?
Posté par pifou . Évalué à 2.
Bon je dis ça, mais ça m'avait bien gonfler de porter mon code Ruby en 1.9, mais avec quelques liens c'est vite fait [http://boga.wordpress.com/2008/04/15/ruby-19-porting-notes/]
Par contre c'est vrai que j'ai pu constater des problèmes de compatibilité dans des versions correctives d'une même branche (surtout en 1.6) ... ça c'est pas cool mais il semble que ça s'améliore (pas eu de problème depuis un petit bout de temps).
Donc effectivement le problème de compatibilité ascendante est une évidence, comme le fait que Ruby est plus lent à s'exécuter (cela aussi n'était pas une priorité pour Matz) mais je trouve que ça vaut largement le coup afin d'avoir un langage de scripting 100% objet avec une API cohérente.
En tout cas bravo pour le travail sur sur totoz.eu
# pHash
Posté par _alex . Évalué à 4.
http://freshmeat.net/projects/phash
Sur le site du projet il y a le code source en C
Et il y a une démo en ligne içi : http://www.phash.org/demo/
[^] # Re: pHash
Posté par 못 옷 홋 ♨ (site web personnel) . Évalué à 6.
C'est un test assez restreint mais on peut facilement dire que [:aloy] et [:totoz] sont les deux totoz les plus importants sur la tribune : si un algorithme ne retourne pas de bons résultats avec eux, ça ne sert à rien d'approfondir les tests.
# Identi.calf
Posté par Axioplase ıɥs∀ (site web personnel) . Évalué à 1.
Ah ouais…
Autant comparer la taille et la couleur de 10 pixels aléatoires, à mon avis, c'est bien plus rapide et aussi efficace…
Car le md5, il ne survit pas à un bmp -> png-sans-perte, ni même à un gif n&b -> gif couleurs indexées (la taille non plus, d'ailleurs, mais on gagne du temps quand même).
[^] # Re: Identi.calf
Posté par 못 옷 홋 ♨ (site web personnel) . Évalué à 2.
À la rigueur, en ignorant la taille et en redimensionnant au préalable chaque image en 16x16 puis en la convertissant en noir et blanc et en comparant les valeurs, on arrive à un algorithme proche de celui de findimagedupes, qui marche pas mal.
[^] # Re: Identi.calf
Posté par Axioplase ıɥs∀ (site web personnel) . Évalué à 3.
>> (qui de toute façon est calculé à l'upload de chaque image, la requête revient à un SELECT id FROM totoz WHERE md5 = '...'),
Tu ne l'as pas dit dans ton journal que tu avais cette info !
>> (à moins bien sûr que par hasard tes dix pixels tombent sur des endroits identiques)
Et bien, justement, ça me parait un bon algorithme randomisé, pour trouver des images identiques, si tu as d'autres informations (déjà la taille). Suffisant, pas sur 10 pixels, mais c'est déjà un critère. Je te rappelle qu'avec MD5, tu as des collisions. Donc même hash ne signifie pas même image (alors que même pixels, oui !)
Ensuite, si ton JPEG fait 256 couleurs ou moins, ça peut très bien survivre au GIF indexé !
Bref, je pense que ça peut être plus rentable qu'une conversion en 16² n&b (c'est en fait un échantillonnage terrible de l'image, alors que le côté probabiliste évite les cas pathologiques sur l'image grandeur nature). Puis 16x16, c'est juste 65535 images. Tu es déjà sûr et certain d'avoir des collisions d'images pas du tout liées à cause du paradoxe des anniversaires.
Enfin, de toute façon, les meilleurs algos sont plus chers : ni ton algo (ni le mien ci-dessus) ne passent dans le cas général une rotation quelconque.
C'est pour ça qu'on peut (doit ?) utiliser des algos conservatifs pour dégrossir avant d'aller dans des techniques plus chères.
Le md5, lui, n'est pas conservatif, car il ne préserve ni ne teste aucune information (au sens « Shannonnien » du terme) de l'image.
# SIFT et FLANN
Posté par pilouche (site web personnel) . Évalué à 3.
tu peux générer des éléments caractéristiques pour tes images (features) avec SIFT
(http://en.wikipedia.org/wiki/Scale-invariant_feature_transfo(...) puis appliquer un algorithme des plus proches voisins, voir FLANN (http://www.cs.ubc.ca/~mariusm/index.php/FLANN/FLANN).
FLANN est aussi disponible à partir de l'API OpenCV.
bon courage!
# LibPuzzle
Posté par BohwaZ (site web personnel, Mastodon) . Évalué à 2.
Ça a l'air assez cool :)
« Je vois bien à quels excès peut conduire une démocratie d'opinion débridée, je le vis tous les jours. » (Nicolas Sarkozy)
[^] # Re: LibPuzzle
Posté par 못 옷 홋 ♨ (site web personnel) . Évalué à 2.
Malheureusement il ne passe pas mes tests de base : http://totoz.eu/totoz.gif est plus proche de http://totoz.eu/sarko_aloy.gif (0,55) que http://totoz.eu/aloy.gif ne l'est de http://totoz.eu/aloyd.gif (0,57) :/
# Geeqie / GQView
Posté par Epy . Évalué à 1.
Et il ajoute même un pourcentage de similarité si besoin (par exemple si le poids de l'image est différent mais que l'image est visuellement identique [=meilleure/moindre définition], il baisse un peu le pourcentage)
Je l'ai trouvé toujours très efficace avec quelques faux positifs mais rien d'alarmant ou d'handicapant.
A tester ?
[^] # Re: Geeqie / GQView
Posté par 못 옷 홋 ♨ (site web personnel) . Évalué à 2.
[^] # Re: Geeqie / GQView
Posté par Epy . Évalué à 2.
je pensais te faire aller jeter un œil à leur code source pour étudier/copier leurs méthodes et algos pour comparer les images, puisque les applications graphiques sont justement très efficaces (à mon goût) ;)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.