脚本识图失败

HAMI_0107014893 · 2 天前

回答

Hamibot AI
1
· 2 天前

脚本识图失败是常见问题,通常由以下几个原因导致。请按以下步骤逐一排查:

一、常见原因及解决方案

1. 屏幕截图权限未授予

识图功能需要先获取屏幕截图权限。

// 文档地址 https://docs.hamibot.com/
if (!requestScreenCapture()) {
    toastLog('没有授予 Hamibot 屏幕截图权限');
    hamibot.exit();
}
sleep(1000);

2. 图片相似度阈值过高

默认阈值为 0.9,如果截图与模板有细微差异会导致匹配失败。可适当降低阈值。

// 文档地址 https://docs.hamibot.com/
var img = captureScreen();
var template = images.read('/sdcard/template.png');
// 降低阈值到 0.8 或 0.7
var point = images.findImage(img, template, {threshold: 0.8});
if (point) {
    click(point.x, point.y);
}

3. 截图时机不当

页面未完全加载时截图会导致识图失败。

// 文档地址 https://docs.hamibot.com/
sleep(2000); // 等待页面加载
var img = captureScreen();

4. 找图区域过大

限定找图区域可提高效率和准确率。

// 文档地址 https://docs.hamibot.com/
// region: [x, y, width, height]
var point = images.findImage(img, template, {
    threshold: 0.8,
    region: [0, 100, 1080, 800]
});

5. 模板图片问题

  • 模板图片与当前屏幕分辨率不匹配
  • 模板图片截取范围不准确
  • 模板图片有动态元素(如时间、电量等)

建议:重新截取模板图片,确保只包含静态特征区域。

二、完整排查代码示例

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

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

// 2. 设置屏幕分辨率(可选,用于坐标适配)
setScreenMetrics(1080, 1920);

// 3. 截图
var img = captureScreen();
if (!img) {
    toastLog('截图失败');
    hamibot.exit();
}

// 4. 读取模板
var template = images.read('/sdcard/template.png');
if (!template) {
    toastLog('模板图片不存在');
    hamibot.exit();
}

// 5. 找图(降低阈值,增加容错)
var point = images.findImage(img, template, {threshold: 0.7});

if (point) {
    toastLog('找到图片,位置:' + point.x + ', ' + point.y);
    click(point.x, point.y);
} else {
    toastLog('未找到图片');
}

// 6. 释放资源
img.recycle();
template.recycle();

三、最佳实践建议

问题 建议
阈值设置 从 0.9 开始,失败后逐步降至 0.7
模板图片 截取特征明显、无动态元素的区域
截图时机 页面加载完成后等待 1-2 秒再截图
多次尝试 可循环尝试 3-5 次,每次间隔 500 毫秒
资源释放 使用完毕后调用 recycle() 释放图片资源

四、替代方案

如果识图持续失败,可考虑以下替代方案:

  1. 文字识别(OCR):使用 ocr.recognizeText() 识别文字后定位
  2. 控件查找:使用 text()id() 等控件选择器
  3. 坐标点击:使用 setScreenMetrics() 配合固定坐标

如问题仍未解决,请提供以下信息以便进一步分析:

  • 脚本代码片段
  • 目标应用名称
  • 设备型号和 Android 版本
  • 错误日志内容
ℹ️ 本回答由 AI 生成,内容仅供参考