ความคิดเห็น: ผืนผ้าใบใน HTML 5 มีส่วนต่อประสาน getImagedata ที่สามารถใช้เพื่อรับข้อมูลพิกเซลจากภาพรหัสการตรวจสอบ แต่ละพิกเซลมีสี่ค่า: R, G, B, A R, G, B เป็นสีแดงสีเขียวและน้ำเงินและ A คือความโปร่งใส หลังจากสังเกตไปพูดคุยเกี่ยวกับแนวคิดและรหัสการใช้งาน หากคุณสนใจคุณจะไม่ไป
ระบบการจัดการกิจการด้านวิชาการของโรงเรียนของเรา (ดูเหมือนว่าจะเป็นมากกว่าแค่โรงเรียนของเรา) จะไม่ได้รับการอธิบายเมื่อเซิร์ฟเวอร์การเลือกหลักสูตรเวลายุบ บางครั้งในการเลือกหลักสูตรคุณต้องป้อนรหัสการยืนยันซ้ำ ๆ เมื่อฉันคิดถึงนักศึกษาหลายพันคนที่เสียเวลาในการป้อนรหัสการตรวจสอบฉันรู้สึกว่าฉันมีภาระผูกพันในการช่วยมนุษยชาติฉันค้นหาและเห็นบทความนี้มาเมื่อ 3 ปีก่อน ฉันอ้างถึงครึ่งแรกและใช้ปลั๊กอิน Tampermonkey เพื่อให้ได้เอฟเฟกต์ที่ต้องการ คุณสามารถรับสคริปต์นี้ใน Userscript ซึ่งมีอยู่ใน GitHub รหัสน่าเกลียดโปรดแก้ไขข้อเสนอแนะและให้คำแนะนำ
มาพูดถึงแนวคิด: ผืนผ้าใบใน HTML 5 มีอินเทอร์เฟซ getImagedata ที่สามารถใช้เพื่อรับข้อมูลพิกเซลจากภาพรหัสการตรวจสอบ แต่ละพิกเซลมีสี่ค่า: 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);
สำหรับ (i = 0; i <c.height; i ++) {
สำหรับ (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 พิกเซลและจากนั้นฉันก็พบว่าจำนวนพิกเซลที่สอดคล้องกับแต่ละหมายเลขนั้นเหมือนกันดังนั้นฉันจึงตัดสินใจพิเศษ (ตัวอย่างเช่นถ้ามีพิกเซลอยู่ตรงกลาง จากนั้น ... ฉันจะสังเกต ... พิกัดของเมทริกซ์ที่สอดคล้องกับแต่ละหมายเลข ... เขียนฟังก์ชั่นนี้:
ฟังก์ชั่น getNum (imgdata, x1, y1, x2, y2) {
var num = 0;
สำหรับ (i = y1; i <y2; i ++) {
สำหรับ (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: return 1;
กรณีที่ 50: return 2;
กรณีที่ 51: return 3;
กรณีที่ 48: กลับ 4;
กรณีที่ 57: return 5;
กรณี 58: {
i = y2-2;
j = x1;
var x = (i*4)*imgdata.width+(j*4);
if (imgdata.data [x] == 255)
กลับ 9;
อื่น
กลับ 6;
-
กรณีที่ 37: return 7;
ค่าเริ่มต้น: return 0;
-
-
ข้อความต้นฉบับใช้เครือข่ายประสาทเพื่อตัดสินและอัตราความแม่นยำดีขึ้นอย่างมาก ฉันไม่รู้วิธีใช้ดังนั้นมันจึงไร้ประโยชน์ ...
ความแม่นยำของรหัสการตรวจสอบที่ฉันได้รับโดยใช้วิธีนี้ก็มากกว่า 95%ซึ่งเพียงพอสำหรับเวลา หากคุณมีเวลาคุณสามารถศึกษาเครือข่ายประสาท
นักเรียนที่ต้องการมันสามารถใช้งานได้ เบราว์เซอร์ Chrome ต้องติดตั้ง tampermonkey ก่อนและ Firefox เป็น geasemonkey จากนั้นติดตั้งสคริปต์นี้