Das entfernen der Hintergrundgeräusche eines captcha-Bildes durch die Replikation der hacken filter TesserCap
Habe ich ein captcha-Bild, das aussieht wie dieses:
Über ein Dienstprogramm namens TesserCap von McAfee konnte ich einen "hacken" filter auf das Bild. (Bevor es läuft, ich stellte sicher, es gab nur zwei Farben im Bild, weiß und schwarz.) Ich war sehr beeindruckt mit den Ergebnissen unter Verwendung dieses filters mit einem Wert von 2 in das Textfeld ein. Genau es entfernt die meisten der Lärm hielt sich aber der Haupt-text, was in diesem:
Wollte ich etwas umsetzen, wie dies auf einem meiner eigenen Skripte, so habe ich versucht herauszufinden, welche Bibliothek für die Bildverarbeitung TesserCap verwendet. Ich konnte nicht alles finden; es stellt sich heraus, es verwendet seinen eigenen code, um das Bild. Dann Las ich dieses whitepaper, die genau erklärt, wie das Programm funktioniert. Er gab mir die folgende Beschreibung von dem, was diese hacken filter bewirkt:
Wenn die zusammenhängende Anzahl von Pixeln für die gegebenen Grauwerte sind weniger
als die Zahl in das numerische Feld die
hacken filter ersetzt diese Sequenzen mit 0 (schwarz) oder 255 (weiß)
als pro Benutzer Wahl. Das CAPTCHA wird analysiert, in horizontaler und
vertikaler Richtung und die entsprechenden änderungen vorgenommen werden.
Ich bin nicht sicher, ob ich verstehe, was es tut. Mein Skript ist in Python, also versuchte ich mit PIL zu manipulieren, die Pixel Art, wie, die zitieren, beschrieben. Es klingt Art von einfach, aber ich konnte nicht, wahrscheinlich, weil ich nicht wirklich weiß, was genau der filter war dabei:
(Dies ist gemacht aus einer etwas anderen captcha verwendet, die eine kreisförmige Muster.)
Ich habe auch versucht zu sehen, ob es könnte leicht getan werden mit ImageMagick ' s convert.exe. Ihre -chop-option ist das etwas ganz anderes. Mit -median-zusammen mit einigen -Morphologie Befehle geholfen, zu verringern einige der Lärm, aber böse dots erschien und die Buchstaben wurden sehr verzerrt. Es war nicht annähernd so einfach wie die hacken-filter mit TesserCap.
So, meine Frage lautet wie folgt: wie implementiere ich die hacken filter TesserCap in Python, werden Sie es mit PIL oder ImageMagick? Das hacken filter arbeitet viel besser als jede der alternativen, die ich ausprobiert habe, aber ich kann nicht scheinen, um zu replizieren. Ich habe schon Stunden und habe noch nicht kapiert das alles noch hin.
- dsp.stackexchange.com
- als Seite beachten, können Sie versuchen, mit Statistiken. "Ausreißer" (2 sd) oder extremen Ausreißer(3.5 sd) erlaubte mir, mich zu entkleiden captcha-Bilder (für juristische Zwecke) ohne Verlust der Bildqualität
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Algorithmus im wesentlichen überprüft, ob es mehrere Ziel-Pixel (in diesem Fall, nicht-weiße Pixel) in eine Reihe, und ändert die Pixel wenn die Anzahl der Pixel ist weniger als oder gleich zu dem chop-Faktor.
Beispielsweise in einer Probe Zeile der Pixel, wo
#
ist schwarz und-
ist weiß, die Anwendung einer chop-Faktor2
verwandeln würde--#--###-##---#####---#-#
in------###-------#####-------
. Dies ist, weil es Sequenzen von schwarzen Pixeln, die kleiner als oder gleich 2 Pixel, und diese Sequenzen werden ersetzt mit weiß. Die kontinuierliche Sequenzen von mehr als 2 Pixel bleiben.Dies ist das Ergebnis der chop-Algorithmus implementiert werden, in meinem Python-code (unten) auf dem ursprünglichen Bild auf deinen post:
Im Hinblick auf die Anwendung dieser auf das gesamte Bild, Sie einfach führen Sie diesen Algorithmus für jede Zeile und jede Spalte. Hier der Python-code erledigt das:
x+=total
Arbeit in einer while-Schleife?while x < width:
und dannx += 1
am Anfang der Schleife und offensichtlich x initialisiert werden muss, um etwas (wie-1
).Versuchen Sie so etwas wie diese (pseudocode):
Dann einfach wiederholen Sie das gleiche für die Spalten. Scheint, wie es funktionieren könnte, zumindest ein wenig. Geht sowohl horizontal als auch vertikal, wie hier beschrieben, entfernen Sie die horizontale/vertikale Linien als auch.