Comentário: A tela no HTML 5 possui uma interface getImagedata que pode ser usada para obter dados de pixel da imagem do código de verificação. Cada pixel tem quatro valores: r, g, b, a. R, G, B são vermelhos, verdes e azuis, e A é transparência. Depois de observar, vamos falar sobre as idéias e o código de implementação. Se você estiver interessado, não vai embora.
O sistema de gerenciamento de assuntos acadêmicos da nossa escola (parece ser mais do que apenas para a nossa escola) não é explicado quando o servidor de tempo de seleção do curso entra em colapso. Às vezes, para escolher um curso, você deve inserir repetidamente o código de verificação. Quando penso em milhares de estudantes universitários perdendo tempo em entrar no código de verificação, sinto que tenho a obrigação de salvar a humanidade.Eu procurei e vi este artigo, foi de 3 anos atrás. Referi-me à primeira metade e usei o plug-in Timpermonkey para alcançar aproximadamente o efeito desejado. Você pode obter esse script no UserScript, que também está disponível no GitHub. O código é feio, por favor depure e me dê conselhos.
Vamos falar sobre a ideia: a tela no HTML 5 possui uma interface getImagedata que pode ser usada para obter dados de pixel da imagem do código de verificação. Cada pixel tem quatro valores: r, g, b, a. R, G, B são vermelhos, verdes e azuis, e A é transparência.
Observou -se que o código de verificação do sistema de gerenciamento de assuntos acadêmicos tem 5 números e o tamanho da fonte permanece inalterado. Embora o fundo seja perturbado, é obviamente muito diferente da cor da fonte; portanto, foi usado um método muito difícil: sabemos que quanto mais leve a cor, maior o valor RGB, mais escuro a cor e o menor valor de RGB. Então eu julguei cada ponto de pixel. A soma do RGB é menor que 350 (esse valor é medido) são os pixels pertencentes à fonte. Por uma questão de observação fácil, o valor RGB é definido como 255, caso contrário, ele está definido como 0. Isso fornece uma imagem com fundo preto e caracteres brancos.
var ctx = Canvas.getContext ('2D');
ctx.drawimage (img, 0,0);
var c = ctx.getImagedata (0,0, img.width, img.Height);
for (i = 0; i <c.Height; i ++) {
para (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;
}
outro{
c.data [x] = c.data [x+1] = c.data [x+2] = 255;
}
}
}
Em seguida, usei a ferramenta de desenho para ampliar a imagem, observei -la e descobri que cada número é um retângulo de 12*8 pixels, e então descobri que o número de pixels correspondentes a cada número é o mesmo, então fiz um julgamento especial (por exemplo, se houver pixels no meio, deve ser 8 em vez de 0). Então ... vou observar ... as coordenadas da matriz correspondentes a cada número ... Escreva esta função:
função getNum (imgdata, x1, y1, x2, y2) {
var num = 0;
para (i = y1; i <y2; i ++) {
for (j = x1; j <x2; j ++) {
var x = (i*4)*imgdata.width+(j*4);
if (imgdata.data [x] == 255) num ++;
}
}
Switch (NUM)
{
Caso 56: {
j = (x1+x2)/2;
i = (y1+y2)/2;
var x = (i*4)*imgdata.width+(j*4);
if (imgdata.data [x] == 255)
retornar 8;
outro
retornar 0;
}
Caso 30: retornar 1;
Caso 50: retornar 2;
Caso 51: retornar 3;
Caso 48: retornar 4;
Caso 57: retornar 5;
Caso 58: {
i = y2-2;
j = x1;
var x = (i*4)*imgdata.width+(j*4);
if (imgdata.data [x] == 255)
retornar 9;
outro
retornar 6;
}
Caso 37: retornar 7;
Padrão: retornar 0;
}
}
O texto original usa uma rede neural para julgar e a taxa de precisão é bastante aprimorada. Não sei como usá -lo, então é inútil ...
A precisão do código de verificação que obtive usando esse método também é superior a 95%, o que é suficiente por enquanto. Se você tiver tempo, pode estudar a rede neural.
Os alunos que precisam podem usá -lo. O navegador Chrome deve primeiro instalar o TamperMonkey, e o Firefox é o Geasonkey e depois instalar este script.