本校の学業管理システム(本校以外でも使われているようです)ですが、コース選択時に何の説明もなくサーバーが落ちてしまい、コースを選択するために認証コードを何度も入力しなければならないことがあります。何千人もの大学生が認証コードを入力して時間を無駄にしていることを考えると、私には人類を救う義務があると感じました。
検索したら、3年前に書かれたこの記事を見つけました。前半を参考にTamperMonkeyプラグインを使用しておおよその効果を実現しました。このスクリプトは Userscript から入手できます。GitHub からも入手できます。コードは醜いのでデバッグしてください。アドバイスをお願いします。
アイデアについて話しましょう: HTML 5 のキャンバスには、検証コード イメージからピクセル データを取得するために使用できるインターフェイス getImageData があります。各ピクセルはr、g、b、aに対応する4つの値を持ちます。r、g、bは赤、緑、青の3色で、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); 0; ifor(j=0; jvar x = (i*4)*c.width (j*4);
var r = c.data[x];
var g = c.data[x 1];
if(r g b > 350) ){
c.data[x] = c.data[x 1] = c.data[x 2] = 0;
}
else{
c.data[x] = c .data[ x 1] = c.data[x 2] = 255;
}
}
}
次に、描画ツールを使用して画像を拡大しました。各 A 数値は 12*8 ピクセルの長方形であると結論付けられ、各数値に対応するピクセル数が求められます。0 と 8 と 6 と 9 のピクセル数は同じであることがわかります。特別な判断を行います(正の場合、中央にピクセルがある場合は 0 ではなく 8 でなければならないなど)。次に...各数値に対応する行列の座標を観察します...次の関数を作成します:
function getNum(imgData,x1,y1,x2,y2){
var num = 0; i< ;y2; i ){
for(j=x1; jvar x = (i*4)*imgData.width (j*4);データ[x] == 255) ;
}
}
スイッチ(数値)
{
ケース 56:{
j = (x1 x2)/2; >i = ( y1 y2)/2;
var x = (i*4)*imgData.width (j*4);
if(imgData.data[x] == 255)
return 8;
else
リターン 0;
ケース 50:リターン 2;
ケース 51:リターン 3; 4;
case 57:return 5;
i = y2-2;
var x = (i*4)*imgData.width ( j*4) ;
if(imgData.data[x] == 255)
else
return 6;
case 37:return 7; 🎜>default: return 0;
}
}
元の記事ではニューラルネットワークを使って判定しているのですが、使い方がよくわかりません。これではダメですね…
私も使っています この方法で得られる認証コードの精度は95%以上で、とりあえずは十分です。時間があるときにもう一度ニューラル ネットワークについて勉強しましょう。
必要な学生はそれを使用できます。Chrome ブラウザにはまず TamperMonkey をインストールする必要があり、Firefox には GeaseMonkey が必要です。その後、このスクリプトをインストールすれば問題ありません。