Commentaire: La toile dans HTML 5 a une interface getImagedata qui peut être utilisée pour obtenir des données de pixels à partir de l'image de code de vérification. Chaque pixel a quatre valeurs: r, g, b, a. R, G, B sont rouges, verts et bleus, et A est la transparence. Après avoir observé, parlons des idées et du code d'implémentation. Si vous êtes intéressé, ne partez pas.
Le système de gestion des affaires académiques de notre école (il semble que ce soit plus que pour notre école) ne s'explique pas lorsque le serveur de temps de sélection du cours s'effondre. Parfois, afin de choisir un cours, vous devez saisir à plusieurs reprises le code de vérification. Quand je pense à des milliers d'étudiants qui perdent du temps à entrer dans le code de vérification, je pense que j'ai l'obligation de sauver l'humanité.J'ai cherché et vu cet article, c'était à partir d'il y a 3 ans. J'ai fait référence à la première moitié et j'ai utilisé le plug-in Tampermonkey pour réaliser grossièrement l'effet souhaité. Vous pouvez obtenir ce script dans USERScript, qui est également disponible sur GitHub. Le code est moche, veuillez déboguer et me donner des conseils.
Parlons de l'idée: la toile dans HTML 5 a une interface getImagedata qui peut être utilisée pour obtenir des données de pixels à partir de l'image du code de vérification. Chaque pixel a quatre valeurs: r, g, b, a. R, G, B sont rouges, verts et bleus, et A est la transparence.
Il a été observé que le code de vérification du système de gestion des affaires académiques est de 5 nombres et que la taille de la police reste inchangée. Bien que l'arrière-plan soit perturbé, il est évidemment très différent de la couleur de la police, donc une méthode très rugueuse a été utilisée: nous savons que plus la couleur est plus claire, plus la valeur RVB est grande, plus la couleur est foncée et moins la valeur RVB. J'ai donc jugé chaque point de pixel. La somme de RVB est inférieure à 350 (cette valeur est mesurée) est les pixels appartenant à la police. Par souci d'une observation facile, la valeur RVB est définie sur 255, sinon elle est définie sur 0. Cela vous donne une image avec un fond noir et des caractères blancs.
var ctx = canvas.getContext ('2d');
CTX.DrawImage (IMG, 0,0);
var c = ctx.getImagedata (0,0, img.width, img.height);
pour (i = 0; i <c.Height; i ++) {
pour (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;
}
autre{
c.data [x] = c.data [x + 1] = c.data [x + 2] = 255;
}
}
}
Ensuite, j'ai utilisé l'outil de dessin pour agrandir l'image, l'ai observé et j'ai constaté que chaque numéro est un rectangle de 12 * 8 pixels, puis j'ai trouvé que le nombre de pixels correspondant à chaque numéro est le même, donc j'ai fait un jugement spécial (par exemple, s'il y a des pixels au milieu, il doit être 8 au lieu de 0). Ensuite, observez simplement ... les coordonnées de la matrice correspondant à chaque numéro ... Écrivez cette fonction:
fonction getnum (imgdata, x1, y1, x2, y2) {
var num = 0;
pour (i = y1; i <y2; i ++) {
pour (j = x1; j <x2; j ++) {
var x = (i * 4) * imgdata.width + (j * 4);
if (imgdata.data [x] == 255) num ++;
}
}
commutateur (num)
{
Cas 56: {
j = (x1 + x2) / 2;
i = (y1 + y2) / 2;
var x = (i * 4) * imgdata.width + (j * 4);
if (imgdata.data [x] == 255)
retour 8;
autre
retour 0;
}
Cas 30: retour 1;
Cas 50: retour 2;
Cas 51: retour 3;
Cas 48: retour 4;
Cas 57: retour 5;
Cas 58: {
i = y2-2;
j = x1;
var x = (i * 4) * imgdata.width + (j * 4);
if (imgdata.data [x] == 255)
retour 9;
autre
retour 6;
}
Cas 37: retour 7;
par défaut: return 0;
}
}
Le texte d'origine utilise un réseau de neurones pour juger et le taux de précision est considérablement amélioré. Je ne sais pas comment l'utiliser, donc c'est inutile ...
La précision du code de vérification que j'ai obtenu en utilisant cette méthode est également supérieure à 95%, ce qui est suffisant pour le moment. Si vous avez le temps, vous pouvez étudier le réseau neuronal.
Les étudiants qui en ont besoin peuvent l'utiliser. Le navigateur Chrome doit d'abord installer Tampermonkey, et Firefox est GeSemonkey, puis installer ce script.