댓글 : HTML 5의 캔버스에는 검증 코드 이미지에서 픽셀 데이터를 얻는 데 사용할 수있는 인터페이스 getImagedata가 있습니다. 각 픽셀은 네 가지 값이 있습니다 : r, g, b, a. R, G, B는 빨간색, 녹색 및 파란색이며 A는 투명성입니다. 관찰 후 아이디어와 구현 코드에 대해 이야기 해 봅시다. 관심이 있으시면 떠나지 마십시오.
우리 학교의 학업 관리 시스템 (학교를위한 것 이상인 것 같습니다)은 코스 선택 시간 서버가 무너질 때 설명되지 않습니다. 때로는 코스를 선택하려면 검증 코드를 반복적으로 입력해야합니다. 수천 명의 대학생이 검증 코드에 들어가는 데 시간을 낭비 할 때 인류를 구할 의무가 있다고 생각합니다.나는이 기사를 검색하고 보았습니다. 3 년 전부터 나왔습니다. 전반전을 언급하고 TamperMonkey 플러그인을 사용하여 원하는 효과를 대략적으로 달성했습니다. 이 스크립트를 usercript에서 얻을 수 있으며 Github에서도 사용할 수 있습니다. 코드는 못 생겼습니다. 디버그하고 조언을 해주세요.
아이디어에 대해 이야기 해 봅시다 : HTML 5의 캔버스에는 검증 코드 이미지에서 픽셀 데이터를 얻는 데 사용할 수있는 인터페이스 getImagedata가 있습니다. 각 픽셀은 네 가지 값이 있습니다 : r, g, b, a. R, G, B는 빨간색, 녹색 및 파란색이며 A는 투명성입니다.
Academic Affairs Management System의 검증 코드는 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 픽셀 사각형임을 발견 한 다음 각 숫자에 해당하는 픽셀의 수가 동일하다는 것을 알았으므로 특별한 판단을했습니다 (예 : 중간에 픽셀이있는 경우 0 대신 8 여야합니다). 그런 다음 ... 그냥 관찰 ... 각 숫자에 해당하는 행렬의 좌표 ...이 기능을 작성하십시오.
함수 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;
기본값 : 반환 0;
}
}
원래 텍스트는 신경망을 사용하여 판단하며 정확도가 크게 향상됩니다. 사용 방법을 모르겠으므로 쓸모가 없습니다…
이 방법을 사용하여 얻은 검증 코드 정확도도 95%이상이므로 당분간 충분합니다. 시간이 있다면 신경망을 공부할 수 있습니다.
필요한 학생들은 그것을 사용할 수 있습니다. Chrome 브라우저는 먼저 TamperMonkey를 설치하고 Firefox는 Geasemonkey 이며이 스크립트를 설치해야합니다.