我的代码中需要获取截图然后进行OCR识别内容,本来连接3台设备均是正常的,我新加了一台设备后,原有的3台设备中有1台图像识别特别慢,怎么回事,仅是单独执行的1台设备的脚本

HAMI_2631912741 · 5 天前

回答

Hamibot AI
1
· 5 天前

文档地址 https://docs.hamibot.com/

你遇到的问题是:在新增一台设备后,原本正常的三台设备中有一台在执行截图 + OCR 识别时变得特别慢,即使只单独运行该设备的脚本。

这个问题可能的原因和排查方向如下:

1. 设备自身性能或系统限制

OCR 识别速度高度依赖设备的 CPU 性能、内存情况以及系统优化策略。新接入设备可能导致资源调度变化,但根本原因通常出在目标设备本身:

  • 该设备可能是低配置机型(如入门级安卓机),处理截图和图像运算能力较弱。
  • 系统版本过低或厂商深度定制(如老旧 MIUI、EMUI 等)会显著影响 captureScreen() 和图像处理函数的执行效率。

建议检查项

  • 查看该设备的型号、RAM、CPU 核心数等硬件信息。
  • 检查是否启用了省电模式、后台限制、冻结服务等情况。

2. 省电策略与后台管理干扰

部分 Android 厂商会对后台应用进行严格管控,Hamibot 若被系统“休眠”或降频运行,会导致脚本执行延迟。

你需要确保在这台设备上完成以下设置

  • ✅ 开启自启动
  • ✅ 关闭电池优化 / 省电模式
  • ✅ 将 Hamibot 加入锁屏不冻结白名单
  • ✅ 开启前台服务(通知栏显示 Hamibot 正在运行)
  • ✅ 不锁定屏幕(或使用“保持唤醒”功能)

参考知识库 [keep-hamibot-running]:不同系统存在差异,MIUI、EMUI、ColorOS 等需手动调整权限。


3. 截图获取延迟(captureScreen 性能问题)

captureScreen() 在某些设备上初始化时间较长,尤其是首次调用时。如果未合理等待,可能出现卡顿或假死现象。

推荐写法(增加容错与等待)

// 文档地址 https://docs.hamibot.com/
auto.waitFor();
if (!requestScreenCapture()) {
    toastLog('请授予截图权限');
    hamibot.exit();
}

// 给予足够时间建立截图通道
sleep(1500); // 部分设备需要更长等待

let img;
try {
    img = captureScreen();
    if (!img) {
        toastLog('截图失败,返回空图像');
        hamibot.exit();
    }
} catch (e) {
    toastLog('截图异常: ' + e);
    hamibot.exit();
}

4. OCR 处理区域过大或未优化

如果你对整张截图直接调用 ocr.recognizeText(img),而没有裁剪关键区域,会导致 OCR 引擎处理大量无效像素,拖慢速度。

优化方式

  • 使用 images.clip() 裁剪出需要识别的小区域再传给 OCR。
  • 可先缩放图片(images.resize)或转灰度(images.grayscale)提升处理速度。

示例:

// 只识别屏幕中间验证码区域
const region = images.clip(img, 300, 500, 600, 600);
const text = ocr.recognizeText(region);

5. 设备连接稳定性(USB 或无线)

如果是通过 ADB 连接(USB 或 Wi-Fi),该设备的连接不稳定也可能导致数据传输延迟,表现为“脚本卡顿”。

排查方法

  • 检查该设备的 ADB 延迟:运行 adb shell echo test 测试响应速度。
  • 换 USB 口、换线材、重启 ADB 服务尝试。

结论与建议

你描述的现象——仅新增设备后某台变慢,其他正常——说明问题不是全局服务问题,而是特定设备的环境或性能瓶颈

请优先对该设备进行以下操作:

  1. 检查并关闭所有省电策略;
  2. 升级 Hamibot 到最新版;
  3. 缩小 OCR 识别区域;
  4. 增加截图后的等待时间(sleep);
  5. 测试该设备单独长时间运行时是否发热降频。

若以上都无效,可尝试在该设备上导出日志(启用“调试信息”),观察具体卡在哪一步。

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