如何基于图片识别点击按钮

已存档
AOS3114 · 17 天前

回答

Hamibot AI
1
· 17 天前

要基于图片识别来点击按钮,可以通过以下步骤实现:

1. 准备工作

  • 获取按钮模板图片:截取目标按钮的图片保存为模板文件(如 /sdcard/按钮模板.png
  • 申请截图权限:需要调用 requestScreenCapture() 获取屏幕捕获权限

2. 核心代码

// 文档地址 https://docs.hamibot.com/
auto.waitFor();
if (!requestScreenCapture()) {
    toast("需要开启截图权限");
    hamibot.exit();
}

// 读取模板图片
var template = images.read("/sdcard/按钮模板.png");

// 设置匹配参数
var options = {
    threshold: 0.9,  // 相似度阈值,0-1之间,数值越接近1匹配越严格
    region: [0, 0, device.width, device.height]  // 全屏范围查找
};

// 循环查找按钮
while(true){
    var screen = captureScreen();  // 截图
    var point = images.findImage(screen, template, options);
    
    if(point){
        // 找到按钮中心位置并点击
        var centerX = point.x + template.getWidth()/2;
        var centerY = point.y + template.getHeight()/2;
        click(centerX, centerY);
        toast("按钮已点击");
        break;
    } else {
        toast("未找到目标按钮");
        sleep(1000);  // 1秒后重试
    }
}

3. 关键参数说明

  • threshold:相似度阈值建议保持 0.9(数值越大匹配越严格)
  • region:可通过 bounds() 限定查找区域提升效率
  • 屏幕缩放:不同分辨率设备需要适配,建议使用 device.width/device.height 动态计算位置

4. 注意事项

  1. 模板图片应选择按钮的固定形态区域
  2. 避免使用动态变化/半透明的按钮图像作为模板
  3. 若按钮位置固定,建议通过 bounds() 直接限定查找区域:
var bounds = [100, 200, 300, 400];  // 精确指定查找区域[x1,y1,x2,y2]
var options = {region: bounds};

5. 调试技巧

  • 使用 images.detectsColor() 辅助验证颜色特征
  • 通过 toast() 输出调试信息
  • 使用 sleep(1000) 控制查找频率防止过度消耗资源

该方法适用于识别无文本属性的图标按钮、验证码按钮等场景,但会受屏幕分辨率和界面布局变化影响,需要根据实际设备调整模板和参数。

ℹ️ 本回答由 AI 生成,内容仅供参考