YYPOST群发软件 发表于 7 小时前

AIWROK苹果系统找图方法完整示例集合

AIWROK苹果系统找图方法完整示例集合



// 苹果系统找图方法汇集示例
// 交流QQ群711841924
// 苹果系统找图方法完整示例集合

function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}

function main() {
    printl("========== 苹果系统找图方法汇集示例 ==========\n");

    example1_findImagesEx();      // 示例1: CV文件模板匹配找图(最基础用法)
    example2_findImages();      // 示例2: 多图查找(支持超时和质量设置)
    example3_templateMatch();   // 示例3: 多模板匹配查找
    example4_findImagesEx_multi(); // 示例4: 单CV文件查找多个目标
    example5_findImages_region();// 示例5: 指定区域找图
    example6_findImages_timeout(); // 示例6: 带超时的找图
    example7_templateMatch_best(); // 示例7: 只返回最佳匹配
    example8_findImages_quality(); // 示例8: 不同截图质量的找图
    example9_templateMatch_region(); // 示例9: 指定区域的模板匹配
    example10_findImages_threshold(); // 示例10: 不同相似度阈值的找图
    example11_comprehensive_flow(); // 示例11: 综合自动化流程(实战案例)

    printl("\n========== 所有示例执行完毕 ==========");
}

// 方法一:findImagesEx - CV文件模板匹配找图(最基础用法)
function example1_findImagesEx() {
    printl("【示例1】findImagesEx - CV文件模板匹配找图");
    printl("适用场景:查找单个图片模板,最简单直接的找图方法");
    printl("演示效果:交替点击两个不同的目标");
    printl("等待2秒确保屏幕加载完成...");
    sleep(2000);
   
    try {
      var detects1 = opencv.findImagesEx('图色769598.cv');
      if (detects1 != null && detects1.length > 0) {
            printl("✓ 找到目标1,数量: " + detects1.length);
            var rect1 = detects1.getRect();
            printl("目标1中心点: x=" + rect1.getCenterX() + ", y=" + rect1.getCenterY());
            printl("点击目标1");
            detects1.clickRandom();
            sleep(1000);
      } else {
            printl("✗ 未找到目标1,等待1秒后重试...");
            sleep(1000);
            detects1 = opencv.findImagesEx('图色769598.cv');
            if (detects1 != null && detects1.length > 0) {
                printl("✓ 重试后找到目标1,数量: " + detects1.length);
                var rect1 = detects1.getRect();
                printl("目标1中心点: x=" + rect1.getCenterX() + ", y=" + rect1.getCenterY());
                printl("点击目标1");
                detects1.clickRandom();
                sleep(1000);
            } else {
                printl("✗ 重试后仍未找到目标1");
            }
      }

      var detects2 = opencv.findImagesEx('图色781849.cv');
      if (detects2 != null && detects2.length > 0) {
            printl("✓ 找到目标2,数量: " + detects2.length);
            var rect2 = detects2.getRect();
            printl("目标2中心点: x=" + rect2.getCenterX() + ", y=" + rect2.getCenterY());
            printl("点击目标2");
            detects2.clickRandom();
            sleep(1000);
      } else {
            printl("✗ 未找到目标2");
      }
    } catch (e) {
      printl("错误: " + e);
    }
    printl("");
}

// 方法二:findImages - 多图查找(支持超时和质量设置)
function example2_findImages() {
    printl("【示例2】findImages - 多图查找");
    printl("适用场景:同时查找多张相似图片,支持设置超时和截图质量");
    try {
      var targetImages = ['图色769598.cv', '图色769599.cv'];
      var multiFindResults = opencv.findImages(targetImages, 0.7, 3000, 1, );
      
      if (multiFindResults != null) {
            printl("多图查找成功,找到目标数量: " + multiFindResults.length);
            for (var i = 0; i < Math.min(3, multiFindResults.length); i++) {
                printl("目标" + i + ": x=" + multiFindResults.x + ", y=" + multiFindResults.y);
            }
            
            if (multiFindResults.length > 0) {
                printl("点击第一个目标");
                multiFindResults.clickRandom();
            }
      } else {
            printl("多图查找超时或失败");
      }
    } catch (e) {
      printl("错误: " + e);
    }
    printl("");
}

// 方法三:templateMatch - 多模板匹配查找目标对象
function example3_templateMatch() {
    printl("【示例3】templateMatch - 多模板匹配查找");
    printl("适用场景:基于多个模板图片在指定图像中匹配目标,可设置匹配区域、阈值等");
    try {
      var image = screen.screenShotFull();
      var mat = image.getMat();
      
      var templates = ['图色769598.cv', '图色769599.cv'];
      var matchResults = opencv.templateMatch(mat, templates, 0.8, , false);
      
      if (matchResults != null && matchResults.length > 0) {
            printl("模板匹配成功,找到目标数量: " + matchResults.length);
            for (var i = 0; i < Math.min(3, matchResults.length); i++) {
                printl("目标" + i + ": x=" + matchResults.x + ", y=" + matchResults.y +
                      ", width=" + matchResults.width + ", height=" + matchResults.height);
            }
            
            printl("点击第一个目标");
            matchResults.clickRandom();
      } else {
            printl("模板匹配未找到目标");
      }
      
      mat.close();
      image.close();
    } catch (e) {
      printl("错误: " + e);
    }
    printl("");
}

// 方法四:findImagesEx - 单CV文件查找多个目标
function example4_findImagesEx_multi() {
    printl("【示例4】findImagesEx - 单CV文件查找多个目标");
    printl("适用场景:屏幕中存在多个相同的目标,需要全部找到");
    printl("注意:此示例在示例1执行后运行,屏幕状态可能已改变");
    try {
      var detects = opencv.findImagesEx('图色769598.cv');
      if (detects != null && detects.length > 0) {
            printl("找到 " + detects.length + " 个目标");
            
            for (var i = 0; i < detects.length; i++) {
                var rect = detects.getRect();
                printl("目标" + i + ": 中心点 x=" + rect.getCenterX() + ", y=" + rect.getCenterY());
            }
            
            printl("点击所有目标");
            for (var i = 0; i < detects.length; i++) {
                detects.clickRandom();
                sleep(500);
            }
      } else {
            printl("未找到目标");
      }
    } catch (e) {
      printl("错误: " + e);
    }
    printl("");
}

// 方法五:findImages - 指定区域找图
function example5_findImages_region() {
    printl("【示例5】findImages - 指定区域找图");
    printl("适用场景:只在屏幕的特定区域查找目标,提高查找效率");
    try {
      var targetImages = ['图色769598.cv'];
      
      var region = ;
      printl("查找区域: [" + region.join(", ") + "]");
      printl("说明:区域坐标为百分比, 表示从屏幕20%位置开始查找");
      
      var regionResults = opencv.findImages(targetImages, 0.7, 3000, 1, region);
      
      if (regionResults != null) {
            printl("在指定区域内找到 " + regionResults.length + " 个目标");
            if (regionResults.length > 0) {
                regionResults.clickRandom();
            }
      } else {
            printl("指定区域内未找到目标");
      }
    } catch (e) {
      printl("错误: " + e);
    }
    printl("");
}

// 方法六:findImages - 带超时的找图
function example6_findImages_timeout() {
    printl("【示例6】findImages - 带超时的找图");
    printl("适用场景:设置查找超时时间,避免长时间等待");
    try {
      var targetImages = ['图色769598.cv'];
      
      printl("开始查找,超时时间: 5000毫秒");
      printl("说明:如果5000毫秒内未找到目标,将返回null");
      
      var timeoutResults = opencv.findImages(targetImages, 0.7, 5000, 1, );
      
      if (timeoutResults != null) {
            printl("在超时前找到目标");
            timeoutResults.clickRandom();
      } else {
            printl("查找超时,未找到目标");
      }
    } catch (e) {
      printl("错误: " + e);
    }
    printl("");
}

// 方法七:templateMatch - 只返回最佳匹配
function example7_templateMatch_best() {
    printl("【示例7】templateMatch - 只返回最佳匹配");
    printl("适用场景:只关心最匹配的结果,忽略其他匹配项");
    try {
      var image = screen.screenShotFull();
      var mat = image.getMat();
      
      var templates = ['图色769598.cv', '图色769599.cv'];
      
      printl("查找最佳匹配(best=true)");
      printl("说明:只返回相似度最高的一个匹配结果");
      
      var bestMatch = opencv.templateMatch(mat, templates, 0.8, , true);
      
      if (bestMatch != null && bestMatch.length > 0) {
            printl("找到最佳匹配: x=" + bestMatch.x + ", y=" + bestMatch.y);
            bestMatch.clickRandom();
      } else {
            printl("未找到最佳匹配");
      }
      
      mat.close();
      image.close();
    } catch (e) {
      printl("错误: " + e);
    }
    printl("");
}

// 方法八:findImages - 不同截图质量的找图
function example8_findImages_quality() {
    printl("【示例8】findImages - 不同截图质量的找图");
    printl("适用场景:根据需求选择不同的截图质量,平衡速度和准确度");
    try {
      var targetImages = ['图色769598.cv'];
      
      printl("测试不同截图质量:");
      printl("质量0(标清):速度快,适合快速查找");
      var result0 = opencv.findImages(targetImages, 0.7, 3000, 0, );
      printl("标清结果: " + (result0 != null ? "找到" : "未找到"));
      
      printl("质量1(高清):速度中等,适合一般场景");
      var result1 = opencv.findImages(targetImages, 0.7, 3000, 1, );
      printl("高清结果: " + (result1 != null ? "找到" : "未找到"));
      
      printl("质量2(超清):速度慢,适合精细查找");
      var result2 = opencv.findImages(targetImages, 0.7, 3000, 2, );
      printl("超清结果: " + (result2 != null ? "找到" : "未找到"));
      
    } catch (e) {
      printl("错误: " + e);
    }
    printl("");
}

// 方法九:templateMatch - 指定区域的模板匹配
function example9_templateMatch_region() {
    printl("【示例9】templateMatch - 指定区域的模板匹配");
    printl("适用场景:在屏幕的特定区域内进行模板匹配");
    try {
      var image = screen.screenShotFull();
      var mat = image.getMat();
      
      var templates = ['图色769598.cv'];
      var region = ;
      
      printl("在区域 [" + region.join(", ") + "] 内进行模板匹配");
      printl("说明:只在屏幕中央区域查找,提高效率");
      
      var matchResults = opencv.templateMatch(mat, templates, 0.8, region, false);
      
      if (matchResults != null && matchResults.length > 0) {
            printl("在指定区域内找到 " + matchResults.length + " 个目标");
            matchResults.clickRandom();
      } else {
            printl("指定区域内未找到目标");
      }
      
      mat.close();
      image.close();
    } catch (e) {
      printl("错误: " + e);
    }
    printl("");
}

// 方法十:findImages - 不同相似度阈值的找图
function example10_findImages_threshold() {
    printl("【示例10】findImages - 不同相似度阈值的找图");
    printl("适用场景:根据需求调整相似度阈值,平衡精确度和召回率");
    try {
      var targetImages = ['图色769598.cv'];
      
      printl("测试不同相似度阈值:");
      printl("阈值0.5(宽松):容易找到,但可能误匹配");
      var result05 = opencv.findImages(targetImages, 0.5, 3000, 1, );
      printl("阈值0.5结果: " + (result05 != null ? result05.length + "个" : "未找到"));
      
      printl("阈值0.7(中等):平衡精确度和召回率");
      var result07 = opencv.findImages(targetImages, 0.7, 3000, 1, );
      printl("阈值0.7结果: " + (result07 != null ? result07.length + "个" : "未找到"));
      
      printl("阈值0.9(严格):只匹配非常相似的目标");
      var result09 = opencv.findImages(targetImages, 0.9, 3000, 1, );
      printl("阈值0.9结果: " + (result09 != null ? result09.length + "个" : "未找到"));
      
    } catch (e) {
      printl("错误: " + e);
    }
    printl("");
}

// 方法十一:综合自动化流程 - 完整的自动化操作流程(实战案例)
function example11_comprehensive_flow() {
    printl("【示例11】综合自动化流程 - 实战案例");
    printl("适用场景:完整的自动化操作流程,模拟实际应用");
    try {
      printl("========== 步骤1: 使用findImagesEx查找第一个目标 ==========");
      var detects1 = opencv.findImagesEx('图色769598.cv');
      if (detects1 != null && detects1.length > 0) {
            printl("✓ 找到目标1,点击");
            printl("位置: x=" + detects1.x + ", y=" + detects1.y);
            detects1.clickRandom();
            sleep(2000);
            
            printl("\n========== 步骤2: 使用findImages查找多个目标 ==========");
            var targetImages = ['图色769598.cv', '图色769599.cv'];
            printl("查找图片列表: " + targetImages.join(", "));
            var multiResults = opencv.findImages(targetImages, 0.7, 3000, 1, );
            
            if (multiResults != null) {
                printl("✓ 找到 " + multiResults.length + " 个目标");
                if (multiResults.length > 0) {
                  printl("✓ 点击第一个目标");
                  multiResults.clickRandom();
                  sleep(2000);
                }
               
                printl("\n========== 步骤3: 使用templateMatch在指定区域查找 ==========");
                var image = screen.screenShotFull();
                var mat = image.getMat();
                var templates = ['图色769598.cv'];
                var region = ;
               
                printl("在区域 [" + region.join(", ") + "] 内查找");
                printl("说明:只在屏幕中央区域查找,提高效率");
                var matchResults = opencv.templateMatch(mat, templates, 0.8, region, true);
               
                if (matchResults != null && matchResults.length > 0) {
                  printl("✓ 在指定区域内找到目标");
                  printl("位置: x=" + matchResults.x + ", y=" + matchResults.y);
                  matchResults.clickRandom();
                } else {
                  printl("✗ 指定区域内未找到目标");
                }
               
                mat.close();
                image.close();
               
                printl("\n========== 步骤4: 查找所有相同目标并批量点击 ==========");
                var allDetects = opencv.findImagesEx('图色769598.cv');
                if (allDetects != null && allDetects.length > 0) {
                  printl("✓ 找到 " + allDetects.length + " 个相同目标");
                  printl("开始批量点击...");
                  for (var i = 0; i < allDetects.length; i++) {
                        printl("点击目标 " + (i + 1) + "/" + allDetects.length);
                        allDetects.clickRandom();
                        sleep(300);
                  }
                  printl("✓ 批量点击完成");
                } else {
                  printl("✗ 未找到目标");
                }
            } else {
                printl("✗ 多图查找失败");
            }
      } else {
            printl("✗ 未找到目标1");
      }
      
      printl("\n========== 综合流程执行完成 ==========");
    } catch (e) {
      printl("综合流程错误: " + e);
    }
    printl("");
}

// ========== 实用辅助函数集合 ==========

// 辅助函数1:安全找图(带重试机制)
function safeFindImage(cvFile, maxRetries) {
    printl("【辅助函数】safeFindImage - 安全找图(带重试机制)");
    for (var retry = 0; retry < maxRetries; retry++) {
      try {
            printl("查找图片: " + cvFile + " (尝试 " + (retry + 1) + "/" + maxRetries + ")");
            var detects = opencv.findImagesEx(cvFile);
            
            if (detects != null && detects.length > 0) {
                printl("✓ 找到目标");
                return detects;
            }
            
            if (retry < maxRetries - 1) {
                printl("未找到,等待重试...");
                sleep(1000);
            }
      } catch (error) {
            printl("查找出错: " + error);
            if (retry < maxRetries - 1) {
                sleep(2000);
            }
      }
    }
    printl("✗ 未找到图片: " + cvFile);
    return null;
}

// 辅助函数2:批量点击所有匹配目标
function clickAllTargets(detects) {
    printl("【辅助函数】clickAllTargets - 批量点击所有匹配目标");
    if (detects == null || detects.length === 0) {
      printl("没有可点击的目标");
      return;
    }
   
    printl("准备点击 " + detects.length + " 个目标");
    for (var i = 0; i < detects.length; i++) {
      printl("点击目标 " + (i + 1) + ": x=" + detects.x + ", y=" + detects.y);
      detects.clickRandom();
      sleep(300);
    }
    printl("✓ 所有目标点击完成");
}

// 辅助函数3:获取目标中心点
function getTargetCenter(detect) {
    printl("【辅助函数】getTargetCenter - 获取目标中心点");
    if (detect == null) {
      return null;
    }
    var center = {
      x: detect.x + detect.width / 2,
      y: detect.y + detect.height / 2
    };
    printl("目标中心点: x=" + center.x + ", y=" + center.y);
    return center;
}

// 辅助函数4:判断目标是否在指定区域内
function isTargetInRegion(detect, region) {
    printl("【辅助函数】isTargetInRegion - 判断目标是否在指定区域内");
    if (detect == null) {
      return false;
    }
    var centerX = detect.x + detect.width / 2;
    var centerY = detect.y + detect.height / 2;
    var inRegion = centerX >= region && centerX <= region &&
                   centerY >= region && centerY <= region;
    printl("目标中心点(" + centerX + ", " + centerY + ") " +
         (inRegion ? "在" : "不在") + "区域内");
    return inRegion;
}

// 辅助函数5:查找并点击最接近指定坐标的目标
function findAndClickNearestTarget(cvFile, targetX, targetY) {
    printl("【辅助函数】findAndClickNearestTarget - 查找并点击最接近指定坐标的目标");
    try {
      var detects = opencv.findImagesEx(cvFile);
      if (detects == null || detects.length === 0) {
            printl("未找到目标");
            return false;
      }
      
      var nearestIndex = 0;
      var minDistance = Number.MAX_VALUE;
      
      for (var i = 0; i < detects.length; i++) {
            var centerX = detects.x + detects.width / 2;
            var centerY = detects.y + detects.height / 2;
            var distance = Math.sqrt(Math.pow(centerX - targetX, 2) + Math.pow(centerY - targetY, 2));
            
            if (distance < minDistance) {
                minDistance = distance;
                nearestIndex = i;
            }
      }
      
      printl("找到最近的目标,距离: " + minDistance.toFixed(2));
      detects.clickRandom();
      return true;
    } catch (e) {
      printl("错误: " + e);
      return false;
    }
}

// 辅助函数6:查找并点击最相似的目标
function findAndClickBestMatch(cvFile, threshold) {
    printl("【辅助函数】findAndClickBestMatch - 查找并点击最相似的目标");
    try {
      var detects = opencv.findImagesEx(cvFile);
      if (detects == null || detects.length === 0) {
            printl("未找到目标");
            return false;
      }
      
      printl("找到 " + detects.length + " 个目标");
      printl("点击第一个目标(通常是最相似的)");
      detects.clickRandom();
      return true;
    } catch (e) {
      printl("错误: " + e);
      return false;
    }
}

// 辅助函数7:等待目标出现并点击
function waitForTargetAndClick(cvFile, maxWaitTime) {
    printl("【辅助函数】waitForTargetAndClick - 等待目标出现并点击");
    printl("最大等待时间: " + maxWaitTime + "毫秒");
   
    var startTime = Date.now();
    while (Date.now() - startTime < maxWaitTime) {
      try {
            var detects = opencv.findImagesEx(cvFile);
            if (detects != null && detects.length > 0) {
                printl("✓ 目标已出现,点击");
                detects.clickRandom();
                return true;
            }
            sleep(500);
      } catch (e) {
            printl("查找出错: " + e);
      }
    }
   
    printl("✗ 超时,目标未出现");
    return false;
}

// ========== 方法使用建议 ==========

function printUsageTips() {
    printl("========== 找图方法使用建议 ==========");
    printl("");
    printl("1. 方法选择建议:");
    printl("   - 单图找图 → opencv.findImagesEx(最简单直接)");
    printl("   - 多图查找 → opencv.findImages(支持超时和质量设置)");
    printl("   - 自定义匹配 → opencv.templateMatch(最灵活)");
    printl("");
    printl("2. 性能优化建议:");
    printl("   - 提高相似度阈值(如0.8-0.9)可减少误匹配");
    printl("   - 使用区域参数限定查找范围可提高速度");
    printl("   - 设置合理的超时时间避免长时间等待");
    printl("   - 根据需求选择合适的截图质量(0/1/2)");
    printl("");
    printl("3. 资源管理建议:");
    printl("   - 使用templateMatch时记得调用mat.close()和image.close()");
    printl("   - 避免在循环中频繁截图,可使用OCR.lockOCR()锁定缓存");
    printl("");
    printl("4. 实战技巧:");
    printl("   - 使用safeFindImage()实现带重试的找图");
    printl("   - 使用clickAllTargets()批量点击所有目标");
    printl("   - 使用waitForTargetAndClick()等待目标出现");
    printl("   - 使用findAndClickNearestTarget()点击最近的目标");
    printl("");
    printl("========== 使用建议结束 ==========");
}

// 运行主函数
main();

// 打印使用建议
printUsageTips();


页: [1]
查看完整版本: AIWROK苹果系统找图方法完整示例集合