|
|
ͨÓÃÕÒͼOCRµã×ÖÍêÕû½Å±¾¹Ç¼Ü
- // ============================================================================
- // AIWROK ͨÓá¸ÕÒͼ + OCR µã×Ö¡¹ÍêÕû½Å±¾¹Ç¼Ü £¨°¸Àý #02 ÅäÌ×£©
- // ============================================================================
- // Õâ²ÅÊÇÒ»ÌõÕý³£ÔÚÅܵĽű¾£º¸´Î» ¡ú Ö÷Ñ»· ¡ú ÿÂÖ ÕÒͼ/OCR ¡ú ÃüÖо͵㠡ú Ï»¬ ¡ú Ëæ»úµÈ´ý ¡ú ´òÈÕÖ¾¡£
- // »á³ÖÐøÔËÐУ¨Ä¬ÈÏ 20 ÂÖ¡¢Ã¿ÂÖµÈ 1.5~4 Ã룬¼¸Ê®Ãë~¼¸·ÖÖÓ£©£¬²»ÊÇÒ»Ãë½áÊøµÄ×Լ졣
- //
- // Ó÷¨£º
- // 1) Ö»¸Ä¡¾ÅäÖÃÇø CFG¡¿£ºtargets ÀïÌîÄãµÄ°´Å¥Ä£°å(base64£¬Ã»ÓоÍÁô null)£¬words ÀïÌî½çÃæÕæÊµÎÄ×Ö£»
- // 2) Ö±½ÓÔËÐУ¬¿´ÈÕÖ¾£ºÃ¿Ò»ÂÖ×öʲô¡¢µãûµã¡¢×ø±ê¶àÉÙ¡¢ÏÂÒ»ÂÖʲôʱºò¿ª£¬È«´ò³öÀ´£»
- // 3) ÀïÃæ findPic / ocrFind / doClick / doSwipe ¶¼ÊǿɿÙ×ßµÄͨÓú¯Êý£¬±Ü¿Óд·¨ÒѺ¸ËÀ£º
- // ÅÐ null ²»±À¡¢°Ù·Ö±È×ø±ê percentToWidth/Height תÏñËØ¡¢½ØÍ¼ÓÃÍê recycle¡£
- //
- // °²È«£ºÄ¬ÈÏ RUN_CLICK=false ʱֻ¡°ÕÒµ½²¢´òÓ¡×ø±ê¡±²»Õæµã£¬ÏÈ¿ÕÅÜÑéÖ¤ÔÙ·Å¿ª£¬·ÀÎóµã¡£
- // ============================================================================
- // ============================ Ò»¡¢ÅäÖÃÇø£¨Ö»¸ÄÕâÀ ============================
- var CFG = {
- rounds: 20, // ÅܶàÉÙÂÖºó×Ô¶¯½áÊø£¨ÏëÒ»Ö±ÅܾÍдºÜ´ó£¬Èç 999999£©
- runClick: true, // ¡ïÏÈ false ¿ÕÅÜ¿´ÈÕÖ¾£¬È·ÈÏÕҵöÔÔÙ¸Ä true Õæµã
- scroll: true, // ÿÂÖ½áÊøºóÏ»¬Ò»ÆÁ£¨Ñø»ú/ÐÅÏ¢Á÷³£Óã©
- waitMin: 1500, waitMax: 4000, // ÿÂÖËæ»úµÈ´ý(ms)£¬·À·â£¬±ðÉè¹Ì¶¨Öµ
- idleStop: 6, // Á¬ÐøÕâô¶àÂÖɶ¶¼Ã»ÃüÖоÍÌáǰÊÕ¹¤£¨0=²»Í££©
- // Ä£°åÕÒͼ£º{Ãû×Ö, base64Ä£°å(ûÓÐÌî null), ËÑË÷ÇøÓò±ÈÀý[x1,y1,x2,y2]}
- targets: [
- { name: "¹Ø×¢°´Å¥", tpl: null, region: [0, 0, 1, 1] },
- { name: "¹Ø±Õ¹ã¸æX", tpl: null, region: [0.80, 0, 1, 0.20] },
- ],
- // OCR µã×Ö¶µµ×£º½çÃæÀï³öÏÖÕâЩÎÄ×־͵ãËü£¨»»³ÉÄã App µÄÕæÊµ°´Å¥Îݸ£©
- words: ["¹Ø×¢", "µãÔÞ", "ÏÂÒ»Ìõ"],
- threshold: 0.82, // ÕÒͼãÐÖµ£¬ÕÒ²»µ½ÏȽµµ½ 0.75 ÔÙÊÔ
- };
- // ============================ ¶þ¡¢Í¨Óú¯Êý£¨¿ÉÕû¶Î¸´Öƽø¹¤³Ì£© ============================
- function log(msg) { printl("[" + new Date().getTime() % 100000 + "] " + msg); } // printl ²ÅÓÐÊä³ö
- function getScr() {
- var s = { w: 1080, h: 2400 };
- try { s.w = screen.getScreenWidth(); s.h = screen.getScreenHeight(); } catch (e) {}
- return s;
- }
- function rand(a, b) { return Math.floor(a + Math.random() * (b - a + 1)); }
- function sleepMs(ms) { try { sleep.millisecond(ms); } catch (e) { java.lang.Thread.sleep(ms); } }
- // µã»÷£ºÎÞÕϰ auto.clickPoint ¡ú È«¾Ö click Á½¼¶½µ¼¶£¨²»ÓÃHID£©£»runClick=false ʱֻ´òÓ¡
- function doClick(x, y, tag) {
- x = Math.max(1, Math.min(getScr().w - 1, x));
- y = Math.max(1, Math.min(getScr().h - 1, y));
- if (!CFG.runClick) { log(" ռλ²»µã[" + tag + "] (" + x + "," + y + ") ¡ª¡ª runClick=false"); return false; }
- var ok = false;
- try { if (typeof auto !== "undefined" && auto.clickPoint) { auto.clickPoint(x, y); ok = true; } } catch (e) {}
- if (!ok) { try { click(x, y); ok = true; } catch (e) {} }
- log(" µã»÷[" + tag + "] (" + x + "," + y + ") ok=" + ok);
- return ok;
- }
- // Ï»¬Ò»ÆÁ£ºauto.swip ¡ú auto.dispatchGesture Á½¼¶½µ¼¶£¨ÎÞÕϰ£¬²»ÓÃHID£©
- function doSwipe() {
- if (!CFG.scroll) return;
- var s = getScr();
- var cx = Math.round(s.w * 0.5), y1 = Math.round(s.h * 0.75), y2 = Math.round(s.h * 0.30);
- var ok = false;
- try { if (typeof auto !== "undefined" && auto.swip) { auto.swip(cx, y1, cx, y2, 600, 0); ok = true; } } catch (e) {}
- if (!ok) { try { if (typeof auto !== "undefined" && auto.dispatchGesture) { auto.dispatchGesture(cx, y1, cx, y2, 600); ok = true; } } catch (e) {} }
- log(" Ï»¬ (" + y1 + "¡ú" + y2 + ") ok=" + ok);
- }
- // ÕÒͼ£º¡ïÅÐ null + ¡ï°Ù·Ö±ÈתÏñËØ£¨°¸Àý #02 Á½ÌõÃüÃŶ¼ÔÚÕ⣩
- function findPic(templateB64, regionPct, threshold) {
- if (!templateB64) return null;
- var region = regionPct || [0, 0, 1, 1];
- var detects = null;
- try { detects = auto.findImages([templateB64], threshold == null ? CFG.threshold : threshold, 0, 1, region); }
- catch (e) { log(" findImagesÒì³£(µ±null): " + e); return null; }
- if (!detects || detects.length === 0) return null; // ÃüÃÅ¢Ù£ºÏÈÅпգ¬ÕÒ²»µ½·µ»Ø null ²»±À
- var cx = detects[0].getRect().getCenterX(); // ÃüÃÅ¢Ú£ºÕâÊÇ°Ù·Ö±È 0~1
- var cy = detects[0].getRect().getCenterY();
- var px = screen.percentToWidth(cx), py = screen.percentToHeight(cy); // ±ØÐë»»Ëã³ÉÏñËØ
- return { px: Math.round(px), py: Math.round(py), count: detects.length };
- }
- // OCR ÕÒ×Ö²¢µã»÷£¨»»·Ö±æÂÊ/¸Ä°æ¶¼Äܵ㣬ÕÒͼµÄ×î¼Ñ¶µµ×£©
- function ocrFindAndClick(word) {
- var img = screen.screenShotFull();
- try {
- var ocr = img.paddleOCR(640, [0, 0, 1, 1]);
- var hit = (ocr && ocr.findIncludeText) ? ocr.findIncludeText(word) : null;
- if (!hit) return null;
- var r = (hit.getRect) ? hit.getRect() : null;
- var x, y;
- if (r) { x = screen.percentToWidth(r.getCenterX()); y = screen.percentToHeight(r.getCenterY()); }
- else { x = null; y = null; }
- if (CFG.runClick) { try { hit.click(); } catch (e) {} }
- return { x: x, y: y };
- } catch (e) { return null; }
- finally { try { img.recycle(); } catch (e) {} } // ÃüÃÅ¢Û£ºÓÃÍê»ØÊÕ
- }
- // ============================ Èý¡¢Ö÷Ñ»·£¨ÕæÔÚÅܵÄÄǶΣ© ============================
- function reset() {
- log("¸´Î»£º»Øµ½×ÀÃæÇå²ÐÁô£¬ÔÙ½øÄ¿±êÒ³");
- try { if (typeof auto !== "undefined" && auto.home) auto.home(); } catch (e) {}
- sleepMs(800);
- try { if (typeof back !== "undefined") back(); } catch (e) {}
- sleepMs(500);
- }
- function oneRound(i) {
- log("¡ª µÚ " + i + " ÂÖ ¿ªÊ¼£¨ÆÁ " + getScr().w + "x" + getScr().h + "£¬runClick=" + CFG.runClick + "£©");
- var acted = false;
- // 1) ÏȰ´Ä£°åÕÒͼ
- for (var t = 0; t < CFG.targets.length; t++) {
- var tg = CFG.targets[t];
- if (!tg.tpl) continue; // ûÅäÄ£°åÌø¹ý
- var f = findPic(tg.tpl, tg.region, CFG.threshold);
- if (f) { log(" ÕÒͼÃüÖÐ[" + tg.name + "] ¹²" + f.count + "´¦ ¡ú ÏñËØ(" + f.px + "," + f.py + ")"); doClick(f.px, f.py, tg.name); acted = true; }
- else { log(" ÕÒͼδÃüÖÐ[" + tg.name + "]£¨²»±À£¬¼ÌÐø£©"); }
- }
- // 2) ÕÒͼûÖÐ ¡ú OCR µã×Ö¶µµ×
- if (!acted) {
- for (var w = 0; w < CFG.words.length; w++) {
- var o = ocrFindAndClick(CFG.words[w]);
- if (o) { log(" OCRÃüÖÐÎÄ×Ö¡¸" + CFG.words[w] + "¡¹¡ú " + (o.x == null ? "Òѵã(Î´È¡×ø±ê)" : "ÏñËØ(" + o.x + "," + o.y + ")")); acted = true; break; }
- }
- }
- if (!acted) log(" ±¾ÂÖûÕÒµ½ÈκÎÄ¿±ê ¡ú Ï»¬»»ÄÚÈÝ");
- // 3) Ï»¬ + Ëæ»úµÈ´ý
- doSwipe();
- var wait = rand(CFG.waitMin, CFG.waitMax);
- log(" ±¾ÂÖ½áÊø£¬µÈ´ý " + wait + "ms ºó½øÈëÏÂÒ»ÂÖ\n");
- sleepMs(wait);
- return acted;
- }
- function main() {
- var s = getScr();
- log("========================================");
- log(" Æô¶¯ ͨÓÃÕÒͼ/OCRµã»÷½Å±¾ ±¾»ú " + s.w + "x" + s.h + " ¹² " + CFG.rounds + " ÂÖ");
- log(" runClick=" + CFG.runClick + "£¨false=¿ÕÅÜÖ»¿´ÈÕÖ¾²»Õæµã£¬ÑéÖ¤OKÔÙ¸Ätrue£©");
- log("========================================");
- reset();
- var idle = 0;
- for (var i = 1; i <= CFG.rounds; i++) {
- var acted = oneRound(i);
- if (acted) idle = 0; else idle++;
- if (CFG.idleStop > 0 && idle >= CFG.idleStop) { log("Á¬Ðø " + idle + " ÂÖÎÞÃüÖУ¬ÌáǰÊÕ¹¤¡£¶à°ëÊÇ£ºÄ¿±êÎÄ×Ö/Ä£°å²»¶Ô£¬»ò·Ö±æÂʱäÁËÄ£°åʧÅä ¡ú ¼û°¸Àý #02 µÚ6½Ú"); break; }
- }
- log("È«²¿½áÊø¡£");
- }
- main();
¸´ÖÆ´úÂë
|
|