我的代码中需要获取截图然后进行OCR识别内容,本来连接3台设备均是正常的,我新加了一台设备后,原有的3台设备中有1台图像识别特别慢,怎么回事,仅是单独执行的1台设备的脚本
回答
文档地址 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 服务尝试。
结论与建议
你描述的现象——仅新增设备后某台变慢,其他正常——说明问题不是全局服务问题,而是特定设备的环境或性能瓶颈。
请优先对该设备进行以下操作:
- 检查并关闭所有省电策略;
- 升级 Hamibot 到最新版;
- 缩小 OCR 识别区域;
- 增加截图后的等待时间(sleep);
- 测试该设备单独长时间运行时是否发热降频。
若以上都无效,可尝试在该设备上导出日志(启用“调试信息”),观察具体卡在哪一步。