Комментарий: Canvas в HTML 5 имеет интерфейс Getimagedata, который можно использовать для получения данных пикселей из изображения кода проверки. Каждый пиксель имеет четыре значения: r, g, b, a. R, G, B красные, зеленые и синие, а A - прозрачность. После наблюдения давайте поговорим об идеях и коде реализации. Если вам интересно, разве вы не уходите.
Система управления академическими делами нашей школы (кажется, это больше, чем просто для нашей школы) не объясняется, когда сервер времени выбора курса разрушается. Иногда, чтобы выбрать курс, вы должны многократно ввести код проверки. Когда я думаю о тысячах студентов колледжа, тратя время на вход в код проверки, я чувствую, что я обязан спасти человечество.Я искал и увидел эту статью, это было 3 года назад. Я сослался на первую половину и использовал плагин Tampermonkey, чтобы примерно достичь желаемого эффекта. Вы можете получить этот скрипт в Userscript, который также доступен на GitHub. Код уродливый, пожалуйста, отлаживает и дайте мне советы.
Давайте поговорим об этой идее: у Canvas в HTML 5 есть интерфейс Getimagedata, который можно использовать для получения данных Pixel из изображения кода проверки. Каждый пиксель имеет четыре значения: r, g, b, a. R, G, B красные, зеленые и синие, а A - прозрачность.
Было отмечено, что код проверки системы управления академическими делами составляет 5 чисел, а размер шрифта остается неизменным. Хотя фон нарушается, он, очевидно, сильно отличается от цвета шрифта, поэтому использовался очень грубый метод: мы знаем, что чем светлее цвет, тем больше значение RGB, тем темнее цвет и меньшее значение RGB. Поэтому я судил каждую точку пикселя. Сумма RGB составляет менее 350 (это значение измеряется) - это пиксели, принадлежащие к шрифту. Для простого наблюдения значение RGB установлено на 255, в противном случае оно установлено в 0. Это дает вам изображение с черным фоном и белыми символами.
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 ++) {
for (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;
}
еще{
c.data [x] = c.data [x+1] = c.data [x+2] = 255;
}
}
}
Затем я использовал инструмент для рисования, чтобы увеличить изображение, заметил ее, и обнаружил, что каждое число представляет собой прямоугольник 12*8 пикселей, а затем я обнаружил, что количество пикселей, соответствующих каждому номеру, одинаково, поэтому я вынес специальное суждение (например, если есть пиксели в середине, он должен быть 8 вместо 0). Затем ... просто наблюдать ... координаты матрицы, соответствующей каждому номеру ... напишите эту функцию:
Функция getNum (imgdata, x1, y1, x2, y2) {
var num = 0;
for (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 ++;
}
}
переключатель (num)
{
Случай 56: {
j = (x1+x2)/2;
i = (y1+y2)/2;
var x = (i*4)*imgdata.width+(j*4);
if (imgdata.data [x] == 255)
возврат 8;
еще
возврат 0;
}
Случай 30: возврат 1;
Случай 50: возврат 2;
Случай 51: возврат 3;
Случай 48: возврат 4;
Случай 57: возврат 5;
Случай 58: {
i = y2-2;
j = x1;
var x = (i*4)*imgdata.width+(j*4);
if (imgdata.data [x] == 255)
возврат 9;
еще
возврат 6;
}
Случай 37: возврат 7;
по умолчанию: return 0;
}
}
Оригинальный текст использует нейронную сеть для суждения, и уровень точности значительно улучшается. Я не знаю, как его использовать, так что это бесполезно ...
Точность кода проверки, которую я получил с использованием этого метода, также составляет более 95%, что достаточно для времени. Если у вас есть время, вы можете изучать нейронную сеть.
Студенты, которые это нуждаются, могут использовать его. Chrome Browser сначала должен установить Tampermonkey, а Firefox - Geasemonkey, а затем установить этот сценарий.