Entfernen des Hintergrundrauschens eines Captcha-Bildes durch Replizieren des Zerhackungsfilters von TesserCap

9

Ich habe ein Captcha-Bild, das so aussieht:

Mit einem Dienstprogramm namens TesserCap von McAfee konnte ich ein "Hacking" anwenden. Filter auf das Bild. (Bevor ich es ausführte, stellte ich sicher, dass nur zwei Farben im Bild waren, weiß und schwarz.) Ich war sehr beeindruckt von den Ergebnissen, als ich diesen Filter mit dem Wert 2 in der Textbox verwendete. Es entfernte den größten Teil des Rauschens genau, behielt aber den Haupttext, was folgendes ergab:

Ich wollte so etwas auf einem meiner eigenen Skripte implementieren, also habe ich versucht herauszufinden, welche Bildverarbeitungsbibliothek TesserCap benutzt. Ich konnte nichts finden; Es stellt sich heraus, dass es seinen eigenen Code verwendet, um das Bild zu verarbeiten. Ich lese dann dieses Whitepaper , das genau erklärt wie das Programm funktioniert. Es gab mir die folgende Beschreibung, was dieser Hackfilter macht:

  

Wenn die zusammenhängende Anzahl von Pixeln für gegebene Graustufenwerte geringer ist   als die Nummer in der numerischen Box, die   chopping Filter ersetzt diese Sequenzen mit 0 (schwarz) oder 255 (weiß)   nach Benutzerwahl. Der CAPTCHA wird sowohl horizontal als auch horizontal analysiert   vertikale Richtungen und entsprechende Änderungen werden vorgenommen.

Ich bin mir nicht sicher, ob ich verstehe, was es tut. Mein Skript ist in Python, also habe ich versucht, PIL zu benutzen, um die Pixel zu manipulieren, so wie das Zitat beschrieben wurde. Es klingt irgendwie einfach, aber ich scheiterte, wahrscheinlich weil ich nicht wirklich wusste, was genau der Filter machte:

(Dies wird aus einem etwas anderen Captcha gemacht, das ein kreisförmiges Muster verwendet.)

Ich habe auch versucht zu sehen, ob es leicht mit ImageMagick convert.exe getan werden könnte. Ihre Option -chop ist etwas völlig anderes. Die Verwendung von "median" und einige "Morphologie" -Befehle halfen dabei, etwas von dem Rauschen zu reduzieren, aber es erschienen unschöne Punkte und die Buchstaben wurden sehr verzerrt. Es war nicht annähernd so einfach wie der Hack-Filter mit TesserCap.

Meine Frage lautet also: Wie implementiere ich den Hacker-Filter von TesserCap in Python, sei es mit PIL oder ImageMagick? Dieser chopping-Filter funktioniert viel besser als jede der Alternativen, die ich ausprobiert habe, aber ich kann es nicht reproduzieren. Ich arbeite seit Stunden daran und habe noch nichts herausgefunden.

    
Nicholas 28.06.2012, 22:38
quelle

2 Antworten

10

Der Algorithmus prüft im Wesentlichen, ob mehrere Zielpixel (in diesem Fall nicht weiße Pixel) in einer Reihe vorhanden sind, und ändert diese Pixel, wenn die Anzahl der Pixel kleiner oder gleich dem Chop-Faktor ist.

In einer Beispielzeile von Pixeln, in der # schwarz ist und - weiß ist, würde das Anwenden eines Chop-Faktors von 2 --#--###-##---#####---#-# in ------###-------#####------- umwandeln. Dies liegt daran, dass es Sequenzen von schwarzen Pixeln gibt, die kleiner oder gleich 2 Pixel sind, und diese Sequenzen werden durch Weiß ersetzt. Die kontinuierlichen Sequenzen von mehr als 2 Pixel bleiben erhalten.

Dies ist das Ergebnis des chop-Algorithmus, wie er in meinem Python-Code (unten) auf dem Originalbild in Ihrem Post implementiert ist:

Um dies auf das gesamte Bild anzuwenden, führen Sie diesen Algorithmus einfach in jeder Zeile und jeder Spalte aus. Hier ist der Python-Code, der das erreicht:

%Vor%     
kbhomes 29.06.2012, 01:07
quelle
3

Versuche so etwas (Pseudocode):

%Vor%

Wiederholen Sie einfach dasselbe für die Spalten. Scheint so, als könnte es wenigstens ein bisschen funktionieren. Wenn Sie sowohl horizontal als auch vertikal gehen, werden auch horizontale / vertikale Linien entfernt.

    
C0deH4cker 28.06.2012 23:20
quelle