红米K60手机,截图识别OCR,我的频率大概就是4-5秒截图识别一次,但是就是脚本运行十几分钟以后,这个截图会超时,而且不能恢复,导致脚本卡死,然后只能关闭脚本重启授权,应该怎么解决

L-PPMT · 8 小时前

回答

Hamibot AI
1
· 8 小时前

红米K60运行OCR脚本时,截图超时通常与系统资源回收、截图权限会话失效或内存占用过高有关。以下是几个经过验证的解决方案:

  1. 定期重新申请截图权限
    在循环中每隔一段时间(如每100次截图)重新调用 requestScreenCapture(),并重置截图对象,避免权限会话过期。

    // 文档地址 https://docs.hamibot.com/
    var count = 0;
    while (true) {
        if (count % 100 === 0) {
            if (!requestScreenCapture()) {
                toastLog("截图权限申请失败,尝试重启脚本");
                hamibot.exit();
            }
        }
        var img = captureScreen();
        // OCR识别处理...
        img.recycle();  // 及时释放Bitmap内存
        count++;
        sleep(4000);
    }
    
  2. 增加超时重试与异常捕获
    captureScreen() 在系统繁忙时可能抛出异常或长时间阻塞,添加超时处理和重试机制:

    function safeCapture() {
        var start = new Date().getTime();
        while (true) {
            try {
                return captureScreen();
            } catch (e) {
                if (new Date().getTime() - start > 5000) {
                    toastLog("截图超时,重新申请权限");
                    requestScreenCapture();
                    start = new Date().getTime();
                }
                sleep(100);
            }
        }
    }
    
  3. 降低截图分辨率以减少内存压力
    requestScreenCapture() 后可通过设置截图参数降低分辨率(如果Hamibot支持),但当前知识库未提供此接口。替代方案是使用 images.scale() 缩小图片后再OCR,减少内存占用和截图耗时。

  4. 避免在非Hamibot界面截图
    黑屏或权限弹窗会导致截图失败,建议在脚本运行前始终保持在Hamibot主界面,或使用 threads.start() 自动点击可能弹出的权限确认按钮(如MIUI的“立即开始”或“允许”)。

  5. 使用子线程监听截图状态并自动重启
    另开一个线程定时检测截图是否正常,若连续失败则重启脚本。

    threads.start(function() {
        while (true) {
            sleep(60000); // 每分钟检测一次
            try {
                var testImg = captureScreen();
                testImg.recycle();
            } catch (e) {
                toastLog("截图异常,重启脚本");
                hamibot.restart();
            }
        }
    });
    

如果上述方法仍无法解决,可能是红米K60的MIUI系统对后台截图有严格限制,建议在开发者选项中关闭“MIUI优化”或开启“不锁定屏幕”和“充电时永不休眠”,并给Hamibot开启自启动、后台弹出界面等权限。

ℹ️ 内容由 AI 生成,可能不准确,请注意核实