B2B网络软件

标题: 本地部署局域网内YOLO自动识别快手图标 [打印本页]

作者: YYPOST群发软件    时间: 1 小时前
标题: 本地部署局域网内YOLO自动识别快手图标
本地部署局域网内YOLO自动识别快手图标
本地部署局域网内YOLO自动识别快手图标 B2B网络软件

本地部署局域网内YOLO自动识别快手图标 B2B网络软件

本地部署局域网内YOLO自动识别快手图标 B2B网络软件

  1. // =====================================================================
  2. // AIWROK 自定义模型示例 —— 用 YOLO 自动识别快手图标并点击
  3. // =====================================================================
  4. // 【原理】手机截屏发到电脑 /api/detect,电脑用你训练的自定义模型
  5. // ---------------- 类别说明(模型能认的 4 个图标) ----------------
  6. // ┌──────────────┬────────────────────┬──────────────────────────┐
  7. // │ 类别名        │ 是什么              │ 在快手视频页的位置          │
  8. // ├──────────────┼────────────────────┼──────────────────────────┤
  9. // │ dianzan      │ 点赞·白色心心       │ 右侧图标列第1个(约x990,y870)│
  10. // │ pinglun      │ 评论·圆气泡         │ 右侧图标列第2个(约x990,y1060)│
  11. // │ shoucang     │ 收藏·五角星         │ 右侧图标列第3个(约x990,y1260)│
  12. // │ fenxiang     │ 分享·纸飞机箭头     │ 右侧图标列第4个(约x990,y1450)│
  13. // └──────────────┴────────────────────┴──────────────────────────┘
  14. //
  15. // 【center 中心点是什么】
  16. //   模型在截图里框住图标后,取"框的正中心"那个像素点 [x, y]。
  17. //   点中心点 = 稳定点中图标,不会点偏到边缘。
  18. //   坐标是"电脑收到的那张截图"里的像素位置,
  19. //   换算到你手机屏幕:sx = 中心x × 手机宽 ÷ 截图宽(脚本已自动换算成 sx/sy)。
  20. //
  21. // 【识别结果示例】
  22. //   { label:"dianzan", class:"dianzan", conf:0.98,   ← 类别名+置信度(0~1,越高越准)
  23. //     center:[988,868],                               ← 截图里的中心点
  24. //     box:[930,820,1046,916],                         ← 外接框(左上,右下)
  25. //     sx:988, sy:868 }                                ← 换算到手机屏幕的点击坐标
  26. // =====================================================================

  27. var SERVER_IP = "192.168.10.103";  // ★电脑IP
  28. var http = new okHttp();

  29. // ---------- 核心函数:截屏识别,返回目标列表 ----------
  30. function 识别图标(conf) {
  31.     var shot = screen.screenShotFull();
  32.     if (!shot) { print.log("截图失败"); return []; }
  33.     var body = ("b64=" + encodeURIComponent(shot.toBase64()) + "&conf=" + (conf || 0.4)).toString();
  34.     var r = JSON.parse(http.postForm(("http://" + SERVER_IP + ":8000/api/detect").toString(), body));
  35.     if (!r || !r.detections) { print.log("识别失败"); return []; }
  36.     // 给每个目标补充换算到手机屏幕的坐标
  37.     var list = [];
  38.     for (var i = 0; i < r.detections.length; i++) {
  39.         var d = r.detections[i];
  40.         if (d.conf < 0.5) continue;  // 过滤低置信度
  41.         d.sx = Math.round(d.center[0] * screen.getScreenWidth() / r.width);
  42.         d.sy = Math.round(d.center[1] * screen.getScreenHeight() / r.height);
  43.         list.push(d);
  44.     }
  45.     // 同位置去重:两个类别挤在同一坐标(<100px)时只留置信度最高的
  46.     // (防止 shoucang/fenxiang 混淆导致点错按钮)
  47.     var out = [];
  48.     for (var a = 0; a < list.length; a++) {
  49.         var ok = true;
  50.         for (var b = 0; b < list.length; b++) {
  51.             if (a == b) continue;
  52.             var dx = list[a].sx - list[b].sx, dy = list[a].sy - list[b].sy;
  53.             if (Math.abs(dx) < 100 && Math.abs(dy) < 100 && list[b].conf > list[a].conf) { ok = false; break; }
  54.         }
  55.         if (ok) out.push(list[a]);
  56.     }
  57.     return out;
  58. }

  59. // 按返回键收起误弹的面板
  60. function 按返回键() {
  61.     try {
  62.         input.sendKeyCode(4);  // KEYCODE_BACK
  63.         print.log("[恢复] 按返回键收起面板");
  64.         java.lang.Thread.sleep(1200);
  65.         return true;
  66.     } catch (e) { print.log("[恢复] 返回键失败: " + e); return false; }
  67. }

  68. // ---------- 按类别名找图标并点击(maxY=只点该高度以上的,防类别混淆点错) ----------
  69. function 找图标点击(类别名, 说明, maxY) {
  70.     var list = 识别图标(0.4);
  71.     for (var i = 0; i < list.length; i++) {
  72.         if ((list[i].label == 类别名 || list[i].class == 类别名)
  73.             && (!maxY || list[i].sy <= maxY)) {
  74.             print.log("[" + 说明 + "] 找到 " + list[i].label + " 置信度" + list[i].conf + " 点击(" + list[i].sx + "," + list[i].sy + ")");
  75.             auto.clickPoint(list[i].sx, list[i].sy);
  76.             return true;
  77.         }
  78.     }
  79.     print.log("[" + 说明 + "] 没找到 " + 类别名);
  80.     return false;
  81. }

  82. // ---------- 完整流程示例:点赞 → 进评论区 → 收藏 ----------
  83. function 自动养机() {
  84.     print.log("===== 自定义模型养机开始 =====");

  85.     // 0. 状态恢复:点赞图标不在 = 被误弹的面板挡住,按返回键收起(最多2次)
  86.     for (var r = 0; r < 2; r++) {
  87.         var list = 识别图标(0.4);
  88.         var 有心心 = false;
  89.         for (var i = 0; i < list.length; i++) if (list[i].label == "dianzan") 有心心 = true;
  90.         if (有心心) break;
  91.         print.log("[恢复] 第" + (r + 1) + "次没看到点赞图标,按返回键收面板");
  92.         按返回键();
  93.     }

  94.     // 1. 点赞
  95.     if (找图标点击("dianzan", "点赞")) {
  96.         java.lang.Thread.sleep(1500);
  97.     }

  98.     // 2. 进评论区(找不到=可能被弹窗挡住,按返回键恢复)
  99.     if (找图标点击("pinglun", "进评论")) {
  100.         java.lang.Thread.sleep(2000);
  101.         // 这里接"输入评论+发送"逻辑(参考 快捷评论点赞\主脚本.js 步骤2~4)
  102.     } else {
  103.         按返回键();
  104.     }

  105.     // 3. 收藏(maxY=1350:收藏星在y≈1257,分享箭头在y≈1450,
  106.     //    模型偶尔把两者认混,限制高度就不会点错)
  107.     if (找图标点击("shoucang", "收藏", 1350)) {
  108.         java.lang.Thread.sleep(1000);
  109.     }

  110.     // 4. 下滑下一个视频
  111.     auto.swip(540, 1500, 540, 500, 300, 0);
  112.     print.log("本轮完成");
  113. }

  114. // ---------- 纯查看模式:列出当前屏幕所有识别到的图标 ----------
  115. function 查看识别结果() {
  116.     var list = 识别图标(0.3);
  117.     print.log("当前屏幕识别到 " + list.length + " 个图标:");
  118.     for (var i = 0; i < list.length; i++) {
  119.         print.log("  " + list[i].label + " 置信度" + list[i].conf + " 中心(" + list[i].sx + "," + list[i].sy + ")");
  120.     }
  121.     return list;
  122. }

  123. // ======================= 【执行入口】 =======================
  124. 查看识别结果();     // 先看一眼识别到什么
  125. java.lang.Thread.sleep(2000);

  126. // 循环养机示例:每 6 秒一轮,共 20 轮
  127. for (var 轮 = 1; 轮 <= 20; 轮++) {
  128.     print.log("======== 第 " + 轮 + "/20 轮 ========");
  129.     自动养机();
  130.     java.lang.Thread.sleep(4000);
  131. }
  132. print.log("===== 全部完成 =====");
复制代码







欢迎光临 B2B网络软件 (http://bbs.niubt.cn/) Powered by Discuz! X3.2