Kommentar: Die Leinwand in HTML 5 verfügt über eine Schnittstelle GetImagedata, mit der Pixeldaten aus dem Verifizierungscode -Bild erhalten werden können. Jedes Pixel hat vier Werte: r, g, b, a. R, G, B sind rot, grün und blau, und A ist Transparenz. Lassen Sie uns nach der Beobachtung über die Ideen und den Implementierungscode sprechen. Wenn Sie interessiert sind, gehen Sie nicht weg.
Das akademische Angelegenheitsmanagementsystem unserer Schule (es scheint mehr als nur für unsere Schule zu sein) wird nicht erklärt, wenn der Server der Kursauswahl zusammenbricht. Um einen Kurs auszuwählen, müssen Sie manchmal wiederholt den Verifizierungscode eingeben. Wenn ich an Tausende von Studenten denke, die Zeit damit verschwenden, in den Verifizierungscode einzugeben, habe ich das Gefühl, dass ich verpflichtet bin, die Menschheit zu retten.Ich habe diesen Artikel gesucht und gesehen, es war vor 3 Jahren. Ich bezog sich auf die erste Hälfte und benutzte das Tampermonkey-Plug-In, um ungefähr den gewünschten Effekt zu erzielen. Sie können dieses Skript in UserScript erhalten, das auch auf GitHub verfügbar ist. Der Code ist hässlich, bitte debuggen und geben Sie mir Ratschläge.
Lassen Sie uns über die Idee sprechen: Die Leinwand in HTML 5 verfügt über eine Schnittstelle GetImagedata, mit der Pixeldaten aus dem Verifizierungscode -Bild erhalten werden können. Jedes Pixel hat vier Werte: r, g, b, a. R, G, B sind rot, grün und blau, und A ist Transparenz.
Es wurde beobachtet, dass der Verifizierungscode des Managementsystems für akademische Angelegenheiten 5 Zahlen beträgt und die Schriftgröße unverändert bleibt. Obwohl der Hintergrund gestört ist, unterscheidet er sich offensichtlich sehr von der Schriftfarbe, sodass eine sehr grobe Methode verwendet wurde: Wir wissen, dass je leichter die Farbe ist, desto größer der RGB -Wert, desto dunkler die Farbe und je weniger RGB -Wert. Also habe ich jeden Pixelpunkt beurteilt. Die Summe von RGB beträgt weniger als 350 (dieser Wert wird gemessen) die Pixel zur Schriftart. Für die einfache Beobachtung wird der RGB -Wert auf 255 gesetzt, ansonsten wird er auf 0 gesetzt. Dies gibt Ihnen ein Bild mit schwarzem Hintergrund und weißen Zeichen.
var ctx = canvas.getContext ('2d');
ctx.drawimage (IMG, 0,0);
var c = ctx.getImagedata (0,0, img.width, img.height);
für (i = 0; i <c.Height; i ++) {
für (j = 0; j <c.width; j ++) {
var x = (i*4)*c.width+(j*4);
var r = c.data [x];
var g = c.data [x+1];
var b = c.data [x+2];
if (r+g+b> 350) {
C.Data [x] = C.Data [x+1] = C.Data [x+2] = 0;
}
anders{
C.Data [x] = C.Data [x+1] = C.Data [x+2] = 255;
}
}
}
Dann benutzte ich das Zeichenwerkzeug, um das Bild zu vergrößern, beobachtete es, und stellte fest, dass jede Zahl ein 12*8 -Pixel -Rechteck ist, und dann fand ich, dass die Anzahl der Pixeln, die jeder Zahl entsprechen, gleich ist, also habe ich ein spezielles Urteil gemacht (zum Beispiel, wenn es Pixel in der Mitte gibt, muss 8 anstelle von 0 anstelle von 0 sein). Dann ... beobachten Sie einfach ... die Koordinaten der Matrix, die jeder Zahl entsprechen ... schreiben Sie diese Funktion:
Funktion getNum (imgdata, x1, y1, x2, y2) {
var num = 0;
für (i = y1; i <y2; i ++) {
für (j = x1; j <x2; j ++) {
var x = (i*4)*imgdata.width+(j*4);
if (imgdata.data [x] == 255) num ++;
}
}
Schalter (Num)
{
Fall 56: {
J = (x1+x2)/2;
i = (y1+y2)/2;
var x = (i*4)*imgdata.width+(j*4);
if (imgdata.data [x] == 255)
Rückkehr 8;
anders
Rückkehr 0;
}
Fall 30: Rückgabe 1;
Fall 50: Rückgabe 2;
Fall 51: Rückgabe 3;
Fall 48: Rückgabe 4;
Fall 57: Rückkehr 5;
Fall 58: {
i = y2-2;
J = x1;
var x = (i*4)*imgdata.width+(j*4);
if (imgdata.data [x] == 255)
Rückkehr 9;
anders
Rückkehr 6;
}
Fall 37: Rückgabe 7;
Standard: Rückgabe 0;
}
}
Der Originaltext verwendet ein neuronales Netzwerk, um zu beurteilen, und die Genauigkeitsrate wird erheblich verbessert. Ich weiß nicht, wie man es benutzt, also ist es nutzlos ...
Die mit dieser Methode erhaltene Verifizierungscodegenauigkeit beträgt ebenfalls mehr als 95%, was vorerst ausreicht. Wenn Sie Zeit haben, können Sie das neuronale Netzwerk studieren.
Schüler, die es brauchen, können es benutzen. Der Chrome -Browser muss zuerst Tampermonkey installieren, und Firefox ist Geasemonkey und dann dieses Skript.