L'ORC va manger le chat sous la cap ?

WRInaute discret
Bonjour,

je suis tombé sur plusieurs discutions sur les systèmes de capcha et généralement on arrive à des système assez compliqué car le méchant OCR est à l'affût.

Par curiosité je me demandai comment pouvait bien fonctionner un system d'OCR. Est-ce que vous avez quelques notions la dessus ou un liens qui en parle ? (par curiosité intellectuel et mieux comprendre comment faire un capcha efficace).


aux modos : j'ai mis le topic ici car cela se rapporte plus à de la programmation mais si vous voyez où le mettre ailleurs, veuillez m'en excuser.
 
WRInaute discret
oups, je veux dire bien sur OCR... j'ai voulus faire un jeu de mot et voila que je suis pris à mon propre piège (j'edite le message)
 
WRInaute impliqué
Pour avoir mené un projet de vidéo surveillance par poste informatique durant mes années bts, je peux te dire une chose.

Quand tu t'attaques à un projet du genre, tu te dis souvent que c'est très compliqué. Mais par dychotomie, tu arrives très rapidement à un système performant.
 
WRInaute accro
Enfin-bon, la lecture obligatoirement humaine d'un code étant désormais has been comme moyen d'empêcher les robots d'entrer, il y a lieu de faire mieux : remplacez par un test de calcul, par exemple d'addition (un truc pas trop compliqué, que l'internaute humain puisse entrer sans calculette).
 
WRInaute discret
Oué pas mal du tout, je suis un peu bluffé par le lien de spoutnik.

pour la dichotomie, je connaissais pas : en effet, ça parait tout bête pour transformer une image en noir et blanc mais après, pour trouver les caractères, ça fonctionne comment ?

J'ai pris un cas concret en prenant une image captcha au hasard :
test7cc.png

que je transforme ensuite en N&B :
test22hf.png


Vu que tu l'air de connaitre le sujet Bourriquet, ca t'embete de m'expliquer un peu plus le principe ?


Szarah a dit:
remplacez par un test de calcul, par exemple d'addition (un truc pas trop compliqué, que l'internaute humain puisse entrer sans calculette).
Genre la racine de deux on evite, c'est ca ? :lol:
 
WRInaute impliqué
Par exemple en essayant de trouver les contours de ton image noir et blanc et les comparer à des masques de lettre, par exemple en prenant ces masques un à un et en cherchant le taux de comparaison le plus élevé.

En décompressant une image, tu arrives à un format (bmp ou tiff, ça dépends de l'ordre de stockage des pixels) ou un octet représent un pixel en niveau de gris 256.

Après c'est juste des comparaisons de valeur de pixels.

Par exemple, dans notre projet, la détection d'intrus se faisait pas comparaison d'images successive.

Le principe est simple: prends deux images puis tu calcules combien y a de pixels de différence, tu prends un seuil de tolérance et tu arrives très bien à faire la détection.

N'ayant pas fait de projet OCR, je peux pas te donner une méthode 100% efficace, mais ce que je veux te dire c'est que si tu prends le problème "Reconnaitre une lettre dans une image", c'est compliqué.

Mais c'est une somme de tous petits problèmes, comme par exemple problème numéro 1: isoler une lettre dans l'ensemble.

Une méthode qui pourrait marcher ça serait de passer en noir et blanc, accentuer éventuellement les contrastes, scanner une ligne de pixel et lorsque tu trouves un pixel "noir" ou gris foncé, tu dis que c'est le début de la lettre pour cette ligne. Lorsque tu repasses dans du blanc (avec peut être une tolérance genre 4 pixels blancs successif) tu détermines que c'est la fin de la lettre pour cette ligne.

En faisant ça tu découpes verticalement ton image en secteurs, et tu sais quelles portions tu vas extraire. Puis ensuite pour affiner un peu, tu balaies verticalement cette fois et tu fais la même chose, in facto horizontalement.

Enfin tu compares les pixels à une série de masques (en clair des images qui reprennent chaque lettre de l'alphabet) en ayant redimensionné le masque pour qu'il fasse la même taille que la zone de comparaison.

Donc tu compares un à un les pixels de chaque image avec un bête if (pixel_image1 == pixel_image2) score++ ;

Avec peut être une tolérance aussi ici.

A la fin t'as un score, tu compares avec les autres masques et tu prends le score le plus élevé....

Par exemple :) Mais je suis sur qu'il y a des méthodes plus poussée, les programmes d'OCR fonctionnent très bien avec ton scanner ;)
 
WRInaute discret
Merci bien, je vais voir et j'essayerai bien quand même sur mon exemple de faire un pti truc en php (les lettres sont droites et assez faciles à identifier en faite).
 
WRInaute discret
merci, j'ai regardé, c'est pas mal du tout, je vais le prendre comme base et l'adapter avec ce que disais bourriquet
 
WRInaute passionné
Le probleme de ces systemes de capcha vient des limites des systemes sur lequel on les installes.
S'il était possible de faire de simple rotation/déformation de lettre, de changer facilement de police etc , ce serait beaucoup plus simple. Mais ce n'est pas possible de maière simple.

François
 
Discussions similaires
Haut