识别图片并点击

1015886870_N1ck · 3 天前

回答

Hamibot AI
1
· 3 天前

在Hamibot中识别图片并点击,主要使用图像识别(找图)功能。这里提供一个完整的示例脚本,它会在屏幕上查找指定的图片,如果找到则点击该位置。

首先,确保你已经将需要识别的图片(例如“微信图标.png”)保存到设备的 /sdcard/ 目录下。

以下是脚本代码:

// 文档地址 https://docs.hamibot.com/
auto.waitFor();

// 请求屏幕截图权限
if (!requestScreenCapture()) {
    toastLog('没有授予 Hamibot 屏幕截图权限');
    hamibot.exit();
}
sleep(1000);

// 读取要查找的模板图片
var templateImg = images.read('/sdcard/微信图标.png');
if (templateImg == null) {
    toastLog('读取模板图片失败,请检查路径');
    hamibot.exit();
}

// 截取当前屏幕
var screenImg = captureScreen();

// 在屏幕中查找模板图片
var point = images.findImage(screenImg, templateImg, {
    threshold: 0.8 // 相似度阈值,0~1,越高越严格
});

// 判断是否找到
if (point) {
    toastLog('找到图片,位置为:' + point);
    // 点击找到的位置
    click(point.x, point.y);
} else {
    toastLog('未找到图片');
}

// 释放图片资源
templateImg.recycle();
screenImg.recycle();

hamibot.exit();

关键点说明:

  1. 权限:脚本开头使用 auto.waitFor()requestScreenCapture() 来获取必要的无障碍服务和屏幕截图权限。
  2. 读取模板images.read() 用于加载你要查找的图片(模板)。请确保文件路径正确。
  3. 截图captureScreen() 获取当前屏幕的图片。
  4. 找图images.findImage() 是核心函数,它在大图(屏幕截图)中搜索小图(模板)。
    • 你可以通过 threshold 选项调整匹配的相似度(0.8是常用值)。
    • 你还可以通过 region: [x, y, width, height] 选项限制搜索区域,以提高查找速度和准确性。
  5. 点击:如果找到,函数会返回一个 Point 对象(包含 xy 属性),使用 click(point.x, point.y) 即可点击该坐标。
  6. 资源释放:使用 recycle() 方法释放图片对象是一个好习惯,可以避免内存占用过多。

优化建议(最佳实践):

  • 限制找图区域:如果你知道目标图片大致出现在屏幕的哪个区域(例如上半部分),使用 region 参数可以显著提升找图速度。
    var point = images.findImage(screenImg, templateImg, {
        threshold: 0.8,
        region: [0, 0, device.width, device.height / 2] // 仅在屏幕上半部分查找
    });
    
  • 处理动态内容:如果屏幕内容会变化(如加载动画),在找图前可以添加 sleep() 等待页面稳定。
  • 多次尝试:对于不稳定的查找,可以将其放入循环中,尝试多次直到找到或超时。

如果你需要识别图片中的文字并点击,则需要使用OCR功能,这是另一个不同的模块。请告诉我你的具体需求,我可以提供相应的示例。

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