IDENTIFIER UNE PERSONNE DEPUIS UNE PHOTO

merouanek Messages postés 5 Date d'inscription vendredi 8 février 2008 Statut Membre Dernière intervention 15 juillet 2008 - 15 juil. 2008 à 22:05
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 - 19 juil. 2008 à 23:56
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/47319-identifier-une-personne-depuis-une-photo

Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
19 juil. 2008 à 23:56
« Et t'és borné comme le cas de la plupart de membre sur le site DelphiFr »

ça, c'est rigolo !
On le garde pour l'encadrer, hein Cirec?! lollllllllllll
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
19 juil. 2008 à 23:47
« ya kalb » !!!???

On voit tout de suite la profondeur des arguments de notre ami Fouad et son niveau intellectuel.
Mais, pour ma part, je le suivrais sur un point : supprimer ce source sans intêret, et mensonger quant à son titre.

J'ai copié-collé les commentaires de Forman pour ceux que ça intéresse. C'est à votre disposition.
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
19 juil. 2008 à 21:29
« Discussion bête et inutile »
Bing!
Bong!
Là, les bras m'en tombent !

Personne ne s'est moqué! Il y a juste eu quelques commentaires dithyrambiques et à la limite de la niaiserie parmi des observations raisonnables et des conseils avisés de personnes compétentes.

« respecter les idées des autres » ce n'est pas leur enfoncer la tête dans l'illusion d'avoir résolu un problème que personne, jusqu'ici, n'a correctement résolu.

Et dire qu'en théorie ça doit fonctionner est la cerise sur le gâteau de l'ineptie!
Car ni en théorie ni en pratique ça ne peut fonctionner.
Utilisateur anonyme
19 juil. 2008 à 21:24
Désolé mais on ne se moque pas du source mais du commentaire utopique de riadmega alors qu'on avait déjà évoqué le sujet plus haut il revient en mettre une couche.

"si on l'utilise avec un badge dont la photo et identique à celle qui est dans la BD de l'ordinateur ça doit fonctionné en théorie, en pratique il faut que la photo soit bien placé sur le badge et que le lecteur n'est pas de jeu. Mais la moindre rayure sur la carte on reste sur la parking."

Ben non les problèmes arriveront dès les premiers essais.
Fait le teste prend deux photos "identiques" avec une Cam et compares les avec cette méthode et tu comprendras.
Même si à l'oeil tout à l'air identique en réalité l'appareil ne restitue jamais deux fois la même image (au pixel près), il y a des différences de nuances ce qui modifie la valeur du pixel et donc fera échouer la comparaison.

Ce qui est bête et inutile ce sont ces commentaires de complaisances ... le but ici est d'aider l'auteur et pas venir raconter des conneries.
Donc si des conneries sont dites il est juste de les réparer.

et encore une fois personne ne critique le travail de Fouad
on l'a informé du problème (et plusieurs d'entre nous) sur ce on ne peut pas laisser dire un peut plus loin: "bravo je le conseil à un Pro pour un garage" !!!!

un peut de sérieux .. que diable !!!!

et peu importe la race ... c'est pareil pour tout le monde
c'est quoi cette sale manille de toujours tout mettre sur le compte de la race ... la race ici on s'en fout ... Restez polis, correcte, juste et objectif.

à ton avis c'est quoi le mieux:
1: Informer l'auteur de ses erreurs pour qu'il les corrige
et ainsi progresse ?
2: Flatter son égo en lui disant c'est bien bravo (et tout ce qu'on a pu lire plus haut) en sachant pertinemment que c'est faux ?

Nous on pense définitivement que c'est la première la bonne.
mais rien n'empêche de le flatter à condition que soit juste.
Claudelion Messages postés 3 Date d'inscription lundi 24 septembre 2007 Statut Membre Dernière intervention 19 juillet 2008
19 juil. 2008 à 20:32
Bonsoir à tous,
Vous avez pas mare de vous moquez de son source, si on l’utilise avec un badge dont la photo et identique à celle qui est dans la BD de l’ordinateur ça doit fonctionné en théorie, en pratique il faut que la photo soit bien placé sur le badge et que le lecteur n’est pas de jeu. Mais la moindre rayure sur la carte on reste sur la parking. Je pense que le projet est bon pour d’autre utilisation, il faudrait juste, pour arrêter c’est discutions bête et inutile, que Monsieur FOUAD change le titre de son source. Je pense que vous êtes tous d’accord la dessus et vous apprécierez son travail. Merci de respecter les idées des autres y compris ceux de nos amis étranger.
Utilisateur anonyme
19 juil. 2008 à 19:12
@riadmega:

Faut pas déconner bordel de m... bordel.

n'importe quel programmeur digne de ce nom te dira que ce n'est pas un programme d'identification de personne.

Ce qui nous intéresse ici c'est "l'identification de personne"
c'est pas moi qui le dit c'est l'auteur.
c'est lui qui nous l'a proposer dans son titre :
"IDENTIFIER UNE PERSONNE DEPUIS UNE PHOTO"

un sujet qui intéresse beaucoup de monde ... mais voilà
avec la technique utilisée dans ce code il faudrait que l'appareil photo prenne exactement la même photo que celle contenue dans la bdd et ce au pixels près.

Ben c'est tout simplement impossible ... donc quand Caribensila dit "t'es pas près de remonter dans ta bagnole! "
il a parfaitement raison !!!

Parce que dans l'état actuel des choses si un seul pixel diffère de l'original la personne n'est pas reconnue.

Et un pixel c'est rien.

Là ce sont des centaines et des centaines de pixels différents que tu auras alors qu'à l'oeil, a la comparaison, tout est bon !!!

En tout cas, si ton ami utilise ce "soft" (dans l'état) il est garantit qu'il aura très très vite affaire à des clients mécontents (au premier à mon avis).

Alors je comprend que l'on a envie de supporter son compatriote mais bon il faut que ça reste minimum objectif
alors qu'ici (le code et les commentaires le prouvent bien)... pffff ... No Comment!!!

que tu te ridiculises tout seul c'est une chose mais tu penses vraiment que ça c'est bon pour l'honneur ?
On ne doit pas avoir les conceptions de l'honneur !!! ça doit être ça

Enfin bon tout ça pour dire et redire que:
Ce genre de commentaires ne servent à rien ils sont nuisibles pour l'auteur du code puisqu'il le conforte dans ses erreurs et de fait l'empêchent de progresser.

La prochaine fois réfléchit avant d'intervenir parce que là, ça a fait tout l'effet inverse.


@Tous:

ces derniers messages seront supprimés plus tard.
pas la peine conserver ce genre de chose.
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
19 juil. 2008 à 18:22
Un ban?
boaf.
Le jour où l'Algérie aura toutes ses bagnoles coincées à mort dans le parking du Pro, elle changera d'avis...
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
19 juil. 2008 à 18:09
@ riadmega : vous en n'avez pas marre avec vos histoires de Grand maître ...

" Je vais même conseiller ton soft a un ami PRO " , à qui ? Je veux le nom et le site de la boite

"Encore une fois merci Monsieur Fouad vous êtes l'honneur de l'Algérie sur le DelphiFR, on vous souhaite une bonne continuation.."

Ça je trouve que ça mérite un ban , pas parce que Monsieur Fouad est Algérien mais bien parce que riadmega ne te juge que pour sa nationalité
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
19 juil. 2008 à 16:01
...Même sans coup de soleil, t'es pas près de remonter dans ta bagnole!

C'est juste pour chouraver la tire des touristes, ce truc.
cs_Forman Messages postés 600 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 6 avril 2010 1
19 juil. 2008 à 15:52
C'est clair, imagines, tu chopes un coup de soleil et le parking refuse de te laisser rentrer parce que tu es devenu tout rouge :o
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
19 juil. 2008 à 15:25
Mazette ! J'vais plus me garer en Algérie, moi !
cs_riadmega Messages postés 10 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 19 juillet 2008
19 juil. 2008 à 15:14
Bonjour Monsieur Fouad,

J’ai téléchargé votre source et je trouve que c’est un excellent boulot vraiment je te donne 10/10 pour ce job…

Je vais même conseiller ton soft a un ami PRO
(propriétaire d’un parking de voiture)

Encore une fois merci Monsieur Fouad vous êtes l’honneur de l’Algérie sur le DelphiFR, on vous souhaite une bonne continuation….

Cordialement
mksoft Messages postés 17 Date d'inscription dimanche 13 juillet 2008 Statut Membre Dernière intervention 9 février 2010
18 juil. 2008 à 18:18
aussi vous pouvez tolerer un seuil max d'erreurs (par exemple: seuil=3% de la taille d'émage)
mksoft Messages postés 17 Date d'inscription dimanche 13 juillet 2008 Statut Membre Dernière intervention 9 février 2010
18 juil. 2008 à 18:14
salut fouad
il fallait prendre en cosideration l'erreurs des certaines pixels, pour cela vous pouvez travailler sur le contour par exemple...
cs_Forman Messages postés 600 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 6 avril 2010 1
17 juil. 2008 à 21:11
Tout à fait d'accord avec Claudelion, le code peut avoir son intérêt, mais il faudrait changer le titre, pour que justement le type qui cherche de l'aide sur le site ne tombe pas sur une source qui ne correspond pas à sa recherche.

Pourquoi pas "Déterminer si une image est dans une base de donnée", par exemple?

C'est à toi de décider, Fouad.

@Mauricio: lol+ :-)
Claudelion Messages postés 3 Date d'inscription lundi 24 septembre 2007 Statut Membre Dernière intervention 19 juillet 2008
17 juil. 2008 à 20:51
Bonsoir à tous,
Fouad n’enlève pas ton source, même si on ne peu pas s’en servir pour contrôler les visages avec exactitude, il peut servir dans d’autre domaine en le modifiant en conséquence. Exemple pour le contrôle de qualité des pièces en sortie de moulage, qualité de sérigraphie etc… A d’autre personne il peut servir à comprendre les base de données ou autre ligne de programmation comme tout les sources qui sont déposées. Ceux qui dépose des sources le font pour aider d’autre dans la programmation, sans pour cela pensé que leurs sources soit utilisé tel que. Je te remercie et je remercie tout ceux qui dépose des sources après avoir passé beaucoup d’heure, pour que tous en profite.
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
17 juil. 2008 à 16:21
@Mauricio
lollllllllllllll
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
17 juil. 2008 à 16:16
C' est ce qu'on appelle le 2ème effet Kiss Cool !!!
Utilisateur anonyme
17 juil. 2008 à 16:10
Voilà l'effet que ça fait quand on croit au commentaires de complaisances de ses petits amis ... du style:
bon code, c'est génial, t'es trop fort, t'es un chef, tu es notre maitre etc. etc.

Pour moi ce ne sont pas des amis. Ils t'empêchent de progresser en te faisant croire que ton travail est bon alors qu'en réalité il ne l'est pas !!!

Et quand les autres membres commentent ton code avec objectivité et réalisme tu as l'impression de tomber de haut. Mais c'est pas la faute des membres mais bel et bien celle de tes amis ... (hasard ReMatrix)
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
17 juil. 2008 à 16:00
@Fouad
Ce n'est pas toi mais ton code qui est noté!
Il n'y a pas de quoi se vexer. Il nous est arrivé à tous de rater notre but et on n'en a pas fait une maladie.
Ton source a eu le mérite de provoquer une discussion sur un sujet très intéressant et tu devrais t'en réjouir.
Il me semble que plusieurs d'entre nous ont envie de s'essayer à la reconnaissance de visage et ça promet une jolie émulation.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
17 juil. 2008 à 15:39
c'est la note, effectivement.
notre ami a encore du boulot a faire pour se rendre compte que la note ne fait pas avancer autant que les commentaires.
En l'etat, on a une simple comparaison d'image... pas la detection de visage annoncée, la note s'entend, donc...
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
17 juil. 2008 à 15:35
@Cirec: je lui ai donné le site au moins 10 fois!!! Allez, une dernière: www.hi5.com
En ce qui concerne la note: vu que la source ne répond pas du tout au problème et qu' il n' a pas les compétences pour y répondre (moi non plus), je vois pas en quoi ma note choque ou pourrait changer!
Utilisateur anonyme
17 juil. 2008 à 15:29
je suis du même avis, il n'y a pas de ménage à faire dans les commentaires (mis à part certain commentaires ineptiques de ReMatrix).

Mais tu devrais être content d'avoir eut autant de retour et d'idées et en profiter pour mettre ton code à jour

@Mauricio:
je crois que c'est la note qui est à l'origine de cette demande
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
17 juil. 2008 à 15:00
Désolé d' avoir heurté ta sensibilité Fouad.

mais par curiosité, c' est quoi qui t' a choqué:
- "la source ... ne répond pas du tout au problème"
- "courbes bézier"
- "traits noirs"

En ce qui concerne ta proposition de bannissement, c' est quand même bizarre que tu te tournes vers moi, mince, j' aurai dû te mettre 10/10!

@Forman: je suis hyper content que tu sois actif sur CS, il suffit de lire tes posts pour comprendre pourquoi!
Je le dis et je le répète: Forman c' est l' homme qu' il nous faut question graphisme et tans pis si ça te fait rougir!

A+
Francky23012301 Messages postés 400 Date d'inscription samedi 6 août 2005 Statut Membre Dernière intervention 11 février 2016 1
17 juil. 2008 à 14:59
Fouad : Pourquoi tu demandes la suppression de ton source ? il y a vraiment aucunes raisons de le faire. Que cela soit Mauricio ou les autres, on a juste voulu te dire que la reconnaissance de visage est seulement bien plus complexe. Tu pensais peut etre pas à tous les paramètres qui t'ont été donnés : apres tout on ne peut pas penser à tout et puis tout le monde se trompe. Quand à Mauricio : le connaissant sa remarque n'a rien de personnel ou de méchant : de trompe pas sur son intervention. BIensur qu'il y a du bon dans ton source mais comme l'a dit Mauricio, l'élément crucial qui est la reconnaissance d'un visage ne remplit pas sa mission. Te le dire clairement, c'est te permettre de progresser. Faire de la lèche (Comme notre amis commun) c'est te faire croire que c'est nickel et donc c'est t'empecher d'évoluer. Tu crois pas qu'il faut pas mieux te montrer tes erreurs que de faire semblant ?

Maintenant c'est vrai à chacune de tes souces ca part en sucette et la faute en incombe toujours au meme parasite (pas besoin de le citer tu auras compris : en meme temps l'accouplement d'un ane avec une truie ne peut rien donné de bon : réponse à son MP)
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
17 juil. 2008 à 14:08
je ne vois pas trop de ménage a faire dans les commentaires...
HAFTARIFOUAD Messages postés 256 Date d'inscription mercredi 5 septembre 2007 Statut Membre Dernière intervention 6 janvier 2011
17 juil. 2008 à 13:52
Bonjour

Je tiens à remercier tous ceux qui ont participé à l’amélioration de mon exemple.

@ MAURICIO

C’est pour la première fois, que je vie un très bon débat, mais…, c’est pour cela que j’ai décidé de vous répondre par la règle d’or anglaise, (c’est sur intéressante pour vous) qui dit :

- Be strong enough to face the world each day,
- Be weak enough to know you cannot do everything.,
- Be generous to those who need your help,
- And be frugal with what you need yourself.

Je demande les Admins du site de nous faire du ménage des commentaires sur cette source, si non, je voix utile de supprimer complètement la source, comme ça on laisse notre chère MARICIO 30kil, je compte sur lui de nous faire le mieux.
cs_Forman Messages postés 600 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 6 avril 2010 1
17 juil. 2008 à 13:46
Oui c'est possible mais pas forcément facile (en fait ça dépend déjà du type d'image à traiter, naturelle ou de synthèse pas exemple).

Première méthode: (variationnelle, locale), tu calcules le gradient en faisant le filtrage avec par exemple:
[-1,1] (filtre 2x1, dérivée horizontale)
[-1;1] (filtre 1x2, dérivée verticale)
tu fais la norme (racine carrée de la somme des carrés des 2 images obtenues après filtrage), tu choisis un seuil et tu décides que tout ce qui est plus grand que ce seuil est blanc, le reste noir. Il existe des filtres beaucoup plus évolués et efficaces pour calculer les dérivées (faire une recherche Google sur le filtre de Canny par exemple) que ceux que j'ai donnés.

Deuxième méthode: annulations du laplacien. Tu calcules le laplacien (dériver 2 fois verticalement et horizontalement, puis faire la somme) et tous les pixels où ça change de signe sont blancs. Par exemple, en étudiant des paquets de 2x2 pixels:
++
+-
ici tu as un changement de signe au centre.

Troisième méthode: annulations de la dérivée seconde dans le sens du gradient. Tu calcules d'abord le gradient, ça te donne un tableau de vecteurs à 2 dimensions (dérivée en x et en y). Ensuite tu calcules la dérivée seconde, c'est à dire tu fais les dérivations suivantes:
x puis x
x puis y
y puis y
y puis x (c(est la même que x puis y)
ca te donne un tableau de matrices 2x2:
[ DxDx DxDy
DyDx DyDy ]
Tu multiplies chacune de ces matrices à gauche et à droite par le gradient calculé précédemment, ça te donne un tableau de flottants, il ne te reste plus qu'à trouver ses annulations avec la méthode précédente.

Quatrième méthode: seuillage par hystérésis des extréma. Cette étape repose sur une hypothèse de connexité. Le principe est d'utiliser deux seuils 0<s1<s2 pour la norme du gradient et de sélectionner les pixels pour lesquels:
-la norme du gradient est supérieure à ??s1,
-le pixel donné est connecté, par un chemin constitué de pixels dont la norme du gradient est supérieure à ?s1, à un pixel pour lequel la norme du gradient est supérieure à ?s2.
On peut adapter cette méthode à d'autres critères que la norme du gradient (par exemple le laplacien).

Cinquième méthode: par les courbes de niveau. Une image en gris est composée de pixels pouvant prendre comme valeur tous les nombres entre 0 et 255. Pour x donné, si tu considères l'ensemble des pixels qui ont une valeur inférieure ou égale à x, tu peux prendre la frontière (ie: le tour) de cet ensemble, c'est la courbe C(0). Elle est composée d'un ensemble de lacets (courbes continues, fermées). L'ensemble des lignes de niveaux C(x) pour x variant entre 0 et 255 définit complètement l'image. Certains de ces lacets "entourent" d'autres lacets, si tu as un lacet de C(a) qui entoure un lacet de C(b) et qui est lui-même entouré par un lacet de C(b) alors vraisemblablement il y a un contour à détecter au voisinage de C(a). Il faut aussi utiliser un critère de proximité pour que ça marche.

Bon désolé, c'est difficile d'écrire des formules en ASCII... J'ai trouvé ce PDF qui peut être utile:
http://perso.telecom-paristech.fr/~moireau/documents/RapportVision.pdf

J'oubliais: pour toutes ces méthodes, si l'image est bruitée (avec un grain) il est préférable d'appliquer un filtre lissant (mais pas trop sinon on perd des détails) par exemple en faisant la convolution par une gaussienne, ou un filtre de ce genre (diviser par 20 après):
[ 1 2 1
2 8 2
1 2 1 ]
Certains filtres non linéaires (filtre médian par exemple) donnent aussi de bons résultats pour ôter le bruit.
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
17 juil. 2008 à 13:09
Forman, est-il possible de convertir une image en traits noirs?
C' est à dire des traits comme sur une bande dessinnée en noir et blanc?
Je suis interessé par cela (dans le cadre de cette source mais surtout pour pouvoir l' exploiter pour autre chose) ...

La 2ème phase serait d' exploiter ces traits afin d' en faire la reconnaissance faciale.

A+
cs_Forman Messages postés 600 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 6 avril 2010 1
17 juil. 2008 à 10:55
Numerico: on peut peut-être se dispenser de faire varier le facteur d'échelle en s'arrangeant pour que le visage soit toujours pris à la même distance de la caméra.

Effectivement, il n'est pas utile de prendre de trop grands angles pour THETA, le type qui se présente la tête en bas, après tout on peut considérer qu'il l'a bien cherché s'il est pas reconnu :)
Numerico Messages postés 17 Date d'inscription samedi 16 décembre 2000 Statut Membre Dernière intervention 8 juillet 2011
17 juil. 2008 à 10:48
@Forman

Merci d'avoir développé : c'est beaucoup plus clair pour moi (j'ai été voir la distance de Hausdorff : ça cadre bien avec le sujet).

Il reste que ça fait 5 boucles imbriquées et même 6 boucles imbriquées si on ajoute la possibilité de mettre les courbe à la bonne échelle.

Mais si c'est trop long on peut toujours acceler le programme en limitant les variation de THETA, U et V.
Par exemple:
* faisant varier THETA entre -(2*pi)/10 et +(2*pi)/10
* pour U variation sur 10% ou un 20% de la largeur de l'image
* pour V variation sur 10% ou un 20% de la hauteur de l'image
Pour le nouveau facteur d'echelle E il peut varier de 80% à 120%.

Enfin si ça suffit pas on peut faire un premier balayage rapide de la base de données avec des images en basse résolution, retenir les visages les plus proches et les départager en résolution normale.

On peut aussi faire le maximum d'opérations lors de la constitution de la base de données.
Par exemple, chaque visage de la base de données possède : une image normale
+ une "signature" sous forme de courbes
+ une signature sous forme de courbes basse résolution.

Sans oublier les algorithmes génétiques

A tous :
J'ai remarqué que vous avez avancé sur la recherche de critères pertinents !

Cordialement
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
17 juil. 2008 à 09:58
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
17 juil. 2008 à 09:57
"Commandant Mitchell, matricule 1302"

bah ouais, sympa, mais faut prendre en compte le vieillissement, un mauvais coup, une chutte, un pansement, la barbe qui pousse, le maquillage pour ces dames, le port de bijoux, de piercings, une mauvaise cuite...

tous ces détails qui font que ces données seraient sujettes à correction.

faudrait piquer le soft du FBI ^^ (dans les films, hein, dans les films !)
detection du contour du visage, de son orientation, il trouve les yeux, etc, remet out ca de face, et compare avec un profil enregistré.
mais là encore, les visages évoluent, donc....

sujet interessant malgré tout
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
17 juil. 2008 à 01:09
... « la détection d'imperfections du visage »
C'est une très bonne idée!

Comme je l'ai expliqué, les opticiens mesurent l'"écart pupillaire" avec un appareil qui s'appelle pupillomètre à reflet cornéen. En fait cet appareil mesure chaque distance des axes oculaires par rapport à la racine du nez puisque notre souci est de centrer des verres de lunettes qui reposent sur le nez d'un patient. Or notre expérience dit qu'il n'y a JAMAIS de visage symétrique à 100%. Ainsi si on mesure un écart de 70mm par exemple, on notera toujours 33/37. L'axe de l'oeil droit est à 33mm de la racine du nez et celui de l'oeil gauche à 37mm dans cet exemple. Eh ouais! Personne n'a pas le nez au milieu de la figure! lol
De la même façon, lorsque nous réglons des lunettes, on s'aperçoit que personne n'a les 2 oreilles à la même hauteur...
Et je suppose qu'il en va ainsi pour toutes les mesures faciales... Des commissures des lèvres aux ailes du nez, etc.
Donc je pense qu'il serait plus intéressant d'analyser et de stocker tous ces petits défauts ( qui font notre charme :) dans la BDD sous forme de tableau numérique plutôt qu'une vulgaire photo.
sky7rip Messages postés 9 Date d'inscription dimanche 16 juillet 2006 Statut Membre Dernière intervention 16 juillet 2008
16 juil. 2008 à 23:10
Bonsoir à tous et encore une fois merçi pour les remarques constructives de certains (ceux qui auront saisi le sens ironique de ma phrase comprendront de quoi je parle).

Sujet très très intéressant dites moi donc ^^.

Ce qui serait intéressant pour un code de ce style, et qui pourrait permettre d'affiner la détection en cas de doute serait la détection d'imperfections du visage, comme les grains de beauté ou cicatrices, qui sont typiques et propres a un seul être, a moins d'être falsifiées bien sur ^^.

Pour le stockage des infos propres a un certain être, ne serait-il pas mieux de ne prendre que certaines parties du visage ? Par exemple une zone rectangulaire pour le menton et le nez, et des losanges pour les yeux, ce qui permettrait de se concentrer uniquement sur des parties communes a tous les Hommes, tout comme l'a dit Cari (Un pti prix sur les lunettes ? J'ai perdu les miennes ^^). Après pourquoi ne pas donner un poids à l'une de ces données, je m'explique : après avoir modélisé le visage humain bêta sur lequel se baser, on peux prendre en compte, par exemple, qu'il sera plus facile de distinguer un borgne par rapport a ce bêta, qu'une personne ayant encore toutes ses capacités visuelles. Le tout stocké dans la base de données au moment d'acquérir le visage, comme les signes distinctif d'ailleurs. Comme ça si le logiciel détecte un oeil fermé par exemple, il y a un certain pourcentage de chance pour que la personne soit borgne -> on recherche en priorité dans la BDD des borgnes -> on gagne quelques instants de traitement. Après biensur reste a améliorer la méthode ^^. Et y'a du taf :p.

En tout cas si des personnes sont tentées, moi, je le suis.

Bonne soirée a vous.

sky.
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
16 juil. 2008 à 21:24
@Forman
C'est exactement ce que je voulais dire... Mais je n'ai pas le talent pour le formuler comme toi et je n'ai pas osé. Je pensais à "mannequin" plutôt qu'à visage générique. lol

@Francky
« un mec avec 2 nez, 3 yeux et 4 oreilles »
çui-là, on le laisse passer. Il a assez de misère comme ça et s'il fait une connerie on diffuse son portrait robot!



Bon! Je vois que vous ne me suivez pas dans l'analyse de mouvement plutôt que dans l'analyse de forme pour un être vivant. Mais je reste persuadé que l'approche est plus facile et plus riche.
cs_Forman Messages postés 600 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 6 avril 2010 1
16 juil. 2008 à 20:19
Mauricio arrête de me faire des compliments je commence vraiment à rougir :)
En ce qui concerne certains commentaires en français approximatif, pour ma part j'applique la stratégie "do not feed the troll".

Caribensila: oui bien sûr ton idée est à prendre en compte. Je pense que ce serait facile sur un algo qui travaille sur des distances entre contours: il faudrait d'abord mettre en correspondance l'image à reconnaitre avec un visage générique (en trouvant une translation/rotation qui minimise la distance au visage générique). Si on suppose qu'on a muni le visage générique d'une carte avec des nombres compris entre 0 et 1 qui donne un poids élevé aux points critiques (pommettes, yeux, etc...) on pourrait utiliser ces poids pour faire une pondération dans le calcul de distance avec les images de la banque (en appliquant préalablement à la carte des poids la translation/rotation inverse de celle qui minimise la distance au visage de référence). Ainsi, les endroits caractéristiques du visage auraient une plus grande contribution dans le calcul de distance, et donc auraient une plus grande importance.
Francky23012301 Messages postés 400 Date d'inscription samedi 6 août 2005 Statut Membre Dernière intervention 11 février 2016 1
16 juil. 2008 à 19:57
Oui mais imagine un mec avec 2 nez ou 3 yeux, ou 4 oreilles : et hop il est pas reconnu. Ah ah tu avais pas pensé à ca hein :p.
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
16 juil. 2008 à 19:54
J'essaie de suivre les explications de Forman (de haut) :) , mais il y a un truc qui me choque dans tout ça. C'est que les techniques que présente Forman sont faîtes pour une reconnaissance de forme en général, quelqu'elles soient. Mais pas pour une reconnaissance de visage humain.
En effet, un visage est un phénotype et a toujours la même structure : 2 yeux, un nez, une bouche, etc... et cependant il n'en est jamais tenu compte dans les algos présentés ici. Je vais peut-être dire une bêtise, mais je pense que c'est se priver d'un puissant moyen de reconnaissance dans le domaine de la biométrie.
Bien sûr qui peut le plus peut le moins, mais si on pouvait simplifier pour une plus grande rapidité et une meilleure précision ce ne serait pas à négliger il me semble.

L'idée d'une photo de profil de Mauricio me semble intéressante. Ne serait-ce que pour éliminer rapidement la plupart des candidats de la BDD
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
16 juil. 2008 à 19:09
Décidemment, je viens d' avoir une autre idée: une image de profil pourrait établir le contour du visage (bouche, nez etc ...). Il suffirait de garder dans une base de données les points de traçage de courbes bézier.

A+
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
16 juil. 2008 à 19:07
La largeur des yeux et les sourcils peuvent être pris en compte ^^
cs_Forman Messages postés 600 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 6 avril 2010 1
16 juil. 2008 à 18:24
Numerico: pas de problème pour le vouvoiement, au moins ça change un peu de la manière un peu "cavalière" qu'ont certains de s'exprimer :-)

Ta question est assez complexe, je dois dire que j'ai entendu dire que ça se faisait, mais sans avoir tous les détails. La première idée qui me vient à l'esprit est la suivante:

-commencer par définir une première distance D(L1,L2), très basique, qui permet de calculer la distance entre 2 courbes L1 et L2 quelconques. Par exemple, la distance de Hausdorff pourrait convenir (voir wikipédia pour plus de détails) qui consiste à calculer le max de la distance d'un point du premier ensemble à l'autre (complexité O(n^2) où n est le nombre de points des 2 ensembles). Ou encore, faire la moyenne M1 (intégrale curviligne) de la distance d'un point de L1 à L2, puis la même moyenne M2 en permutant L1 et L2 et poser D(M1,M2)=(M1+M2)/2;

-les 2 images (après traitement) étant composées de plusieurs courbes (les contours détectés), trouver un moyen d'étendre cette distance à des ensembles de courbes. A priori on peut prendre la même définition que précédemment (en particulier avec la distance de Hausdorff), pour l'intégrale curviligne il faut découper le calcul en plusieurs morceaux, un morceau par courbe, diviser à chaque fois par la longueur du morceau de courbe considéré et additionner le tout.

-Pour un angle THETA variant entre 0 et 2*pi, calculer le Min de D(I1,R(I2)) où D désigne la distance définie précédemment, I1 les contours de la première image, I2 ceux de la seconde et R la rotation d'angle THETA. Appeler DD(I1,I2) le minimum obtenu.

-Pour U et V variant chacun entre -1 et 1 calculer le Min de DD(I1,T(I2)) où T est la translation de vecteur (U,V) (dans un système de coordonnées normalisées où le pavé [-1,1] correspond à la surface de l'image par exemple). Appeler le résultat DDD(I1,I2): c'est la distance recherchée.

Ainsi, si l'une des 2 images est l'image de l'autre par une rotation/translation, la distance DDD obtenue vaut zéro.

L'inconvénient de cette méthode un peu bourrine, c'est qu'il y a 5 boucles for imbriquées, respectivement 3 pour les variations de THETA, U et V et 2 pour le calcul de D. Selon le pas de discrétisation choisi (et la qualité désirée) ça peut être très, très long. Une idée pour améliorer peut être de faire une première étape avec un échantillonnage grossier, puis de raffiner par dichotomie pour trouver le minimum (sur THETA, U et V).

Je sais qu'il existe des algorithmes génétiques pour faire ça, mais là encore je n'ai pas le détail. Je peux te donner en MP l'adresse de la thèse d'un collègue qui a travaillé là-dessus si ça t'intéresse.
Numerico Messages postés 17 Date d'inscription samedi 16 décembre 2000 Statut Membre Dernière intervention 8 juillet 2011
16 juil. 2008 à 17:48
Faites pas attention au "VOUS"
je venais juste de lire la charte de bonne conduite
et j'ai du me laisser emporter ...
nethacker Messages postés 288 Date d'inscription mardi 2 mai 2006 Statut Membre Dernière intervention 12 octobre 2011
16 juil. 2008 à 17:40
Citation
point par point (Pixel par pixel).

Comment peut on avoir la même photo deux fois ! C'est impossible ! c'est pas mon idée mais j'ai vu un algorithme qui reconnait le visage et ne stocke que le visage après il fait des déclinaisons et des variations de lumière, ainsi que d'autres transformations et il stocke toutes ces photos !
après la comparaison se fait entre ces photos enregistrées et celle entrée par un certain périphérique !
Francky23012301 Messages postés 400 Date d'inscription samedi 6 août 2005 Statut Membre Dernière intervention 11 février 2016 1
16 juil. 2008 à 17:37
Pourquoi j'affirme que tu dis des conneries : je te cite
"lors c'est vous voulez faire de bonne travail je suis sur que ça vas nous ramenté et des calcules super compliqué ( d'ailleurs je hait le math classic)." Ce n'est pas parce que tu es une quiche en math et que t'es un gros feignant de première au point d'avoir aucune conscience professionnel, ce qui se traduit par le fait que tu vendes des codes de merdes à des gens qui doivent surement te payer tres cher, que tout le monde est comme toi c'est à dire incapable d'établir une méthode simple et efficace pour calculer une intégrale triple ou une équation différentielle : si tu crois que des logiciels comme Guausian98 ou HyperChem sont fait en MatLab c'est que tu es encores plus nul que ce que l'on peut imaginer.
Francky23012301 Messages postés 400 Date d'inscription samedi 6 août 2005 Statut Membre Dernière intervention 11 février 2016 1
16 juil. 2008 à 17:31
@ReMatrix : A ta différence, il me semble que mes remarques sont toujours constructives et non relative à une politique du leche-cul dont tu sembles etre un fervant défenseur. De plus même s'il me reste beaucoup à apprendre, j'en suis pas à ton stade qui consiste en chacun de mes commentaires de dire une connerie (Si tu veux je peux faire part de tes remarques antisémites à l'égard des Juifs auquel j'ai eu droit en MP, aux administrateurs : je pense qu'ils apprécieront beaucoup).
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
16 juil. 2008 à 16:36
« et si tu as une entorse, un plâtre ou un coup dans le nez »
Ton pessimisme n'a d'égal que mon optimisme! lol

Je ne dis pas que c'est simple... Mais imagine des caméras de surveillance qui pourraient identifier (+ou-) une personne dans une foule, même de dos...
J'ai déjà les clients! Y'a plus qu'à coder. lol

En tout cas je trouve le challenge passionnant du point de vue coding et mathématique.
Numerico Messages postés 17 Date d'inscription samedi 16 décembre 2000 Statut Membre Dernière intervention 8 juillet 2011
16 juil. 2008 à 16:36
Bonjour HAFTARIFOUAD,

Le sujet que vous soulevez est super intéressant, merci pour votre programme.

Si vous voulez améliorer ce programme, je suis de l'avis de Forman : il existe des méthodes de reconnaissance des visages plus complexes mais plus robustes.

Voici une autre piste que je livre à votre sagacité :
c'est la méthode eigenface utilisée justement en contrôle d'accès.

La méthode est statistique ...

Taper "eigenface" sur google.
Ou bien par exemple "eigenface tutorial" dont le résultat est la page "Eigenface Tutorial" de l'Université de Drexel.

Cordialement.

PS pour Forman : Bonjour Forman,

Ce que vous proposez m'intéresse :
"une distance mesurant les différences entre les contours de 2 images, qui ne pénalise pas trop les ranslations/rotations "

Est-ce que vous auriez plus de pistes sur cette distance ?

Cordialement
Numerico
Utilisateur anonyme
16 juil. 2008 à 16:26
@Caribensila:
et si tu as une entorse, un plâtre ou un coup dans le nez ^^

à mon avis ça semble être plus complexe qu'une simple comparaison entre deux images statiques.
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
16 juil. 2008 à 16:15
Les explications passionnantes de Forman m'ont donné une idée que je vous soumets.
(Je ne sais pas si c'est le lieu, mais les administrateurs auront la gentillesse de faire le ménage si ce n'est pas le cas.)

En essayant d'imaginer comment peut bien faire inconsciemment notre cerveau pour reconnaître une personne, il m'est venu à l'idée que, souvent, on reconnaît une personne rien qu'à sa démarche. Ceci de loin et même parfois de dos... En tout cas, c'est un des critère de reconnaissance important pour notre cerveau.

Partant de ce constat, il me semble qu'il serait beaucoup plus facile de coder un programme tentant de reconnaitre une personne à sa démarche plutôt que par rapport à son visage. Quelques frames où on détoure la silhouette, un traitement qui la réduirait en une sorte de squelette virtuel avec quelques segments et axes de rotation, analyse et formalisation des mouvements, et enfin comparaison à la BDD. Ca me semble (sauf mon optimisme chronique) relativement simple à concevoir.

Couplé à d'autres méthodes, cela pourrait être un critère intéressant, non?
Est-ce que vous savez si cela a déjà été tenté et qu'en pensez-vous?
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
16 juil. 2008 à 15:47
@Rematrix
Ton try n'empêchera pas la violation d'accès de toute façon...
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
16 juil. 2008 à 15:43
En tant qu'opticien, je me permets d'ajouter un commentaire aux remarques de f0xi (que d'ailleurs je partage en tous points) concernant la distance des pupilles :

Pour faire une mesure correcte, il faut faire comme tous les opticiens pratiquent. Ils ne mesurent en fait jamais l'écart pupillaire, mais la distance entre les 2 globes oculaires qui, elle, ne varie jamais, même en cas de strabisme ou de convergence.

Pour ce faire, la méthode est très simple: il suffit de mesurer la distance entre les 2 reflets cornéens.
Sur une photo d'un visage, il y a toujours au moins un reflet dans chaque oeil dû, par exemple, au flash. En mesurant la distance entre le même reflet de chaque oeil, on mesure la distance entre les globes oculaires.
Cette distance est invariante pour chacun de nous et varie de 58 à 78 mm pour un adulte (un peu plus petit pour les femmes).
Rematrix Messages postés 115 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 16 juillet 2008
16 juil. 2008 à 15:35
"ici il s'agit de pointeurs, en cas de dépassement d'adresse on aura juste une petite violation d'accès sans plantage système ni sans provoquer d'instabilité donc pas de soucis."
cette violation d'accée ( dépassements de la pile )ou ma Stack sera récrit qui écrasera l'instruction suivante a exécuter bien sure, qui obligera a la fin le Kernel de libèrer mon processus (fermeture); alors je préféré ajouter try a ne pas quand je ne suis pas sure du code.
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
16 juil. 2008 à 15:25
attention hein, mon code est juste la pour comparer 2 bitmap niveau couleur.

le inc(diff) est effectivement inutile, c'est un reste de l'adaptation du code de fouad.

c'est néanmoins le plus rapide des code pour comparer pixel par pixel 2 images de même dimension.

aprés pour la detection de visage, je trouve qu'un humain ou même un animal moins evolué sur le plan conscient et spirituel y arriverais mieux qu'un ordinateur.

mais bon, pourquoi pas.

"Pour 'try' quand t'il sagit de ce genre de fonction sur ce genre de varaible je ne fai pas de confience :D et pour la lagreur et la hauteur ( a tu essayè de calculé la différence d'exécution ;) ) tros de fonction calcules dans deux boucles c'est un peur genant pour le CPU apart ça c'est jolie comme code."

le try c'est bien pour libérer les objets de manière sure et efficace, ici il n'y a rien a libérer, donc totalement inutile de faire appel au mode protégé.
ici il s'agit de pointeurs, en cas de dépassement d'adresse on aura juste une petite violation d'accès sans plantage système ni sans provoquer d'instabilité donc pas de soucis.

mais une chose est sure, comme forman l'as si bien expliqué, quand il s'agit de differencier des images, ont tombe dans du lourd.
et il n'existe pas forcement 36 methodes pour ce faire.

- distance des pupilles (mauvais si on louche, probleme avec des lunettes)
- dessin unique de l'iris (necessite une image gigahaute definition)
- dessin unique de la retine (hum hum)
- ecart nasal haut et bas
- triangulation des contours du visage (sommet frontal, pointe zygomatique, bas mandibule etc)
- ecart des orbites occulaire

les algorithmes basé sur les zones d'ombre ou du même genre ne sont pas suffisament fiable.
ce serait comme comparer les ongles pour identifier un individu, ça change trop.
eclairage, position de la tête, coiffure, maquillage etc...
Rematrix Messages postés 115 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 16 juillet 2008
16 juil. 2008 à 15:12
"parfois le silence est d'or." c'est bien que tu sais ça @Francky23012301 mais t'es pas trés pratiquant.
pour moi ! j'ai mes raisons.
Francky23012301 Messages postés 400 Date d'inscription samedi 6 août 2005 Statut Membre Dernière intervention 11 février 2016 1
16 juil. 2008 à 14:56
@Fouad : l'idée était louable mais c'est vrai que la comparaison d'images n'est pas aussi simple que cela.
La luminosité, les positions relatives, l'orientation ect ect interviennent et c'est du très haut niveau
@ReMatrix : Plutot que de dire des anneries, parfois le silence est d'or.
nethacker Messages postés 288 Date d'inscription mardi 2 mai 2006 Statut Membre Dernière intervention 12 octobre 2011
16 juil. 2008 à 14:43
Tu fais de la pub pour des marques françaises de voitures ? XD t'en a oublié une !
Rematrix Messages postés 115 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 16 juillet 2008
16 juil. 2008 à 13:38
Pour 'try' quand t'il sagit de ce genre de fonction sur ce genre de varaible je ne fai pas de confience :D et pour la lagreur et la hauteur ( a tu essayè de calculé la différence d'exécution ;) ) tros de fonction calcules dans deux boucles c'est un peur genant pour le CPU apart ça c'est jolie comme code.
cs_Forman Messages postés 600 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 6 avril 2010 1
16 juil. 2008 à 13:12
REmatrix: je crois que tu as dû intervertir la hauteur et la largeur dans ton code, et je ne vois pas l'utilité du try.

Une version (non testée) qui renvoie une valeur comprise entre zéro (images identiques) et un (images absolument différentes) et qui prend en compte un éventuel changement de résolution:

function TForm1.Compare(B1, B2: TBitmap): Double;
var
a,b,c,l,l1,l2:Integer;
p1,p2:PByteArray;
begin
if B1.Height>B2.Height then begin
Result:=Compare(B2,B1);
Exit;
end;
B1.PixelFormat:=pf24bit;
B2.PixelFormat:=pf24bit;
c:=0;
l1:=B1.Width;
l2:=B2.Width;
if B1.Width<B2.Width then
l:=l1
else
l:=l2;
for a:=B1.Height-1 downto 0 do begin
p1:=B1.ScanLine[a];
p2:=B2.ScanLine[(a*(B2.Height-1)) div (B1.Height-1)];
for b:=3*l-1 downto 0 do
Inc(c,Abs(p1[(b*(l1-1)) div (l-1)]-p2[(b*(l2-1)) div (l-1)]));
end;
Result:=1-c/(255*3*l*B1.Height);
end;
Rematrix Messages postés 115 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 16 juillet 2008
16 juil. 2008 à 13:11
pq le lisp ou le matlab pour un truc de se genre super compliqué :
pour faire une bonne déférence entre deux visage (humain) vous aurez besoin d'une certain AI (intelegence artificiel ) pour le matlab et le math, je c trés bien ce que je dit, pour avoir une idée de ce que j'éssayé de dire :
imaginé que vous voulez avoir le code barre d'une image (comme ceux d'inscription ou de rapidshare.com "avant") vous allez prendre chaque caractère, le faire dessiné, et faire une comparaison antre leur pixel jusquas ce que tu le trouvoez (c'est la seul simple méthode),j'ai déja realisé ça avant), mais regardant ce que fais rapidshare.com comme image aujourd'uit le dessin est modifier genre (3D déformé ) alors la vous aurez besoin de calculez l'interval antre votre carrectere normale et la deformation qui se base dans ce cas sur ( la surface) ce qui mene directemtn a pensé a l'integral doublé, mais malheuresemnt c'est pas un simple calcul de (2 dimention "malgé que c'est évitable d'une certin façon) alors c'est vous voulez faire de bonne travail je suis sur que ça vas nous ramenté et des calcules super compliqué ( d'ailleurs je hait le math classic).

alors c'est pas de n,'import quoi je c trés bien ce que je dit, mais pour des gens super borné ça reste de la fiction (vous avez besoin de plus d'imagination et sourtous plus math).

et pour le français ( je suis désolé :D ça me déppasse, '90%' fautes de frappe').
bonne courage.
Rematrix Messages postés 115 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 16 juillet 2008
16 juil. 2008 à 12:48
Function TNotreForm.compar(PBmp,DBmp:TBitmap):Integer;
var
a,b,a1,b1,i,Deff:Integer;
PB1,PB2:PByte;
begin
PBmp.PixelFormat:=pf24bit;
DBmp.PixelFormat:=pf24bit;
Deff:=0;
if PBmp.Height > DBmp.Height then
a1:=PBmp.Height else
a1:=DBmp.Height;
if PBmp.Width > DBmp.Width then
b1:=PBmp.Width else
b1:=DBmp.Width;
for b:=0 to b1-1 do
begin
if PBmp.Height>b then
Pb1:=PBmp.Scanline[b];
if DBmp.Height>b then
Pb2:=DBmp.Scanline[b];
for a:=0 to a1-1 do
for i:=0 to 2 do
begin
TRY
Inc(Deff,Integer(pb1^<>pb2^));
FINALLY
Inc(pb1);
Inc(pb2);
END;
end;
end;
RESULT:=deff;
end;
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
16 juil. 2008 à 12:34
@Rematrix : c'est du grand n'importe quoi ce commentaire ...
une chose est sur en tout cas , le français n'est certainement pas approprié pour toi (le langage ... ) !
cs_Forman Messages postés 600 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 6 avril 2010 1
16 juil. 2008 à 12:31
@Rematrix: Pourquoi le lisp est mieux pour ça? Le traitement d'images ça demande des calculs intensifs, a priori le plus indiqué serait du C (proche de la machine) ou de l'assembleur (encore plus proche). Le Pascal (et donc Delphi) est un bon compromis, et permet souplesse et rapidité à moindres frais si utilisé correctement. Le Lisp c'est bien pour faire certains types de maths, et c'est difficile (à moins de le maîtriser vraiment à fond) de faire des programmes vraiment efficaces avec (en termes de rapidité). Et de toute façon je ne vois pas ce qu'un langage orienté fonctionnel apporterait de plus dans des algorithmes de traitement d'image qui sont par nature fondamentalement itératifs. Les quelques algorithmes récursifs de traitement d'images (je pense par exemple à certains calculs sur les ondelettes ou la localisation de contours) sont généralement dérécursifiés en utilisant des méthodes de programmation dynamique, sinon ils atteignent vite des complexités astronomiques.

Quant au Matlab... à part pour faire des tests, c'est contre-indiqué puisque déjà ça va beaucoup trop lentement dès que tu veux faire autre chose qu'additionner 2 matrices (je sais j'exagère un peu) et en plus on ne peut pas faire d'exécutable compilé.

Tu n'as pas envie que le programme qui commande l'accès à ton parking mette 2 heures à décider si tu peux entrer ou non!

Et au sujet des équations différentielles, certes elles interviennent dans la partie théorique, mais en pratique quand tu programmes tu t'en défais complètement puisque de toute façon ton signal est échantillonné (pixels de l'image). Ca revient juste à faire quelques boucles imbriquées, idem pour les intégrales triples.

Dès qu'on touche au traitement d'images on ne peut pas se permettre de parler "seulement" de code, puisque les données à traiter sont énormes. Par exemple comme ça a déjà été remarqué pour ce source, son but affiché (Identifier une personne depuis une photo) n'est pas atteint, à la place on aurait plutôt attendu "déterminer si une image est dans une liste", et comme l'a fait remarqué Cirec un hachage MD5 (ou autre) serait remarquablement plus efficace en terme d'algorithme (32 bytes à comparer au lieu de plus de 100000 pour la méthode proposée).
Rematrix Messages postés 115 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 16 juillet 2008
16 juil. 2008 à 12:04
bonne source par apport au langage utilisé, par ce que pour faire ce que vous imaginé les gas c'est pas le bon langage désolé!!!, il y a le lisp peut etre connu dans cemais pour un truc super compliqué il y a le matlab par ce que si vous voulez realisé ça parfaitement vous aurez avoir au math (les équations différentielles ce qui vous amené a des intégrales triplé..).
parlez plus tot de code.
une remarque pour @Fouad: t'as calculé la def voire la remarque de @F0xi.
bonne courage weldlabled.
cs_Forman Messages postés 600 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 6 avril 2010 1
16 juil. 2008 à 10:09
Une méthode simple (par rapport à la complexité du sujet) et qui peut être utilisée pour autre chose que des visages:
- faire une détection de contour locale simpliste (seuillage de la norme du gradient ou annulations du laplacien), éventuellement après avoir réduit le bruit de l'image avec un filtre;
- améliorer la pertinence des contours détectés (élimination des contours doubles, hypothèses de connexité, algorithme du snake). À ce stade, on possède une description des contours de l'images par un ensemble de courbes ouvertes ou fermées;
- comparer les contours de l'étape précédente à ceux des images de la banque de visages connus. Il faut pour cela définir une distance mesurant les différences entre les contours de 2 images, qui ne pénalise pas trop les translations/rotations (en effet, la personne à reconnaitre peut n'être pas exactement en face de la caméra, ou avoir penché la tête) et les déformations cylindriques (lorsqu'on tourne la tête). On trouve dans la banque d'images celle qui est la plus proche pour cette distance, et si celle-ci est assez petite statistiquement on considère que le visage est reconnu.

L'avantage de cette méthode est qu'elle n'est pas sensible aux changements de contraste (jour/nuit par exemple) et qu'on n'est pas obligé d'utiliser la même caméra à chaque fois. La plupart des étapes sont présentées en détails sur le web, avec des implémentations efficaces (voir Google...)
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
16 juil. 2008 à 00:52
@f0xi

Ton
"else inc(Diff);"
sert à pas grand'chose, me semble-t il. :)

PS: Et t'aurais pas un truc pour repérer les yeux sur un Bitmap afin de mesurer l'écart pupillaire? lol
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
16 juil. 2008 à 00:21
une autre façon de comparer les deux bitmaps :

function CompareBitmaps(BMPA, BMPB: TBitmap): single;
var
total, sim, diff, i : integer;
pA, pB : ^integer;
begin
result := -1;
if not ((BMPA.Width BMPB.Width) and (BMPA.Height BMPB.Height)) then
exit;

BMPA.PixelFormat := pf32bit;
BMPB.PixelFormat := pf32bit;

pA := BMPA.ScanLine[BMPA.Height-1];
pB := BMPB.ScanLine[BMPB.Height-1];

Total := BMPA.width * BMPA.height;
Sim := 0;
Diff := 0;

for I := 0 to Total-1 do
begin
if pA^ = pB^ then
inc(Sim)
else
inc(Diff);

inc(pA);
inc(pB);
end;

result := (100/total)*sim;
end;

renvois le % de correspondance entre les deux images.
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
15 juil. 2008 à 23:25
Salut Fouad,

Oui. C'est décevant par rapport au titre qui nous laissait entrevoir quelque chose de beaucoup plus intéressant.

Ici, même si la photo de la BDD a été scannée depuis la carte d'identité de la personne et que celle-ci présente la même carte qui sera scanner de nouveau pour vérification, il y a 100% de chances pour qu'il ne soit pas reconnu (fais l'expérience, tu verras).

Comme dit John, la reconnaissance c'est loin d'être facile à faire... Et je vois mal à quoi pourrait servir ce code dans la reconnaissance photo d'une personne.
John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 7 mai 2009
15 juil. 2008 à 22:56
Lu.

Je suis assez d'accord avec les deux autres commentaires.
Si tu veux comparer deux personnes en photo, il faut rechercher des points communs aux visages sur les photos tels que l'acartement entre les yeux, la taille de la bouche ou bien n'importe quelle donné que tu pourrait sortir d'une image.

Je dis pas que c'est facile, loin de là, mais ça à l'avantage d'être bien plus efficace qu'un comparaison pixel par pixel car comme l'ont dit les autres il suffit qu'un pixel change pour que la compraison te donne un résultat negatif (imagine simplement que la personne ne soit pas habillé pareil que sur la photo ...)
Utilisateur anonyme
15 juil. 2008 à 22:25
Salut,

effectivement c'est pas ça ... comme le dit Merouanek si un seul pixel diffère la comparaison échoue. Une comparaison d'image est bien plus complexe qu'une simple comparaison de pixels ... on aurait pu obtenir le même résultat avec un hash md5 par exemple.
merouanek Messages postés 5 Date d'inscription vendredi 8 février 2008 Statut Membre Dernière intervention 15 juillet 2008
15 juil. 2008 à 22:05
Mais..
Il faut que j’aie la même photo exacte
Sinon la recherche échec (juste un pixel est changé).

Autre chose, quand la recherche ne trouve pas la personne.. Résultat est le dernier enregistrement !!!.
Rejoignez-nous