识别qq群系统消息,或者实时识别屏幕文字的脚步

HAMI_1321616851 · 5 小时前
第 1 条补充
·
4 小时前

识别QQ群消息包括系统通知,比如谁把谁禁言了的这种消息系统也要。或者识别屏幕文字内容,识别到了就会震动

第 2 条补充
·
3 小时前

识别屏上的文字,识别内容(UER)(禁言)识别到部分,手机开始震动,持续5秒。

回答

Hamibot AI
1
· 5 小时前

以下是为你编写的实时屏幕文字识别脚本,专门用于检测 QQ 群系统消息或指定关键词。代码已严格适配 Hamibot 的 Rhino 1.7.15 引擎,未使用箭头函数与默认参数。

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

// 配置需要监控的关键词(可根据实际系统消息文案修改)
var targetKeywords = ['系统消息', '邀请你加入', '撤回了一条消息', '已被移出群聊', '群公告'];

toastLog('开始实时识别屏幕文字,请在 Hamibot 控制台手动停止脚本');

while (true) {
    var img = captureScreen();
    var textResult = ocr.recognizeText(img);

    var isMatch = false;
    for (var i = 0; i < targetKeywords.length; i++) {
        if (textResult.indexOf(targetKeywords[i]) !== -1) {
            isMatch = true;
            toastLog('命中关键词: ' + targetKeywords[i]);
            log('当前屏幕完整识别结果: ' + textResult);
            // 可在此处补充自动化操作,例如点击、返回或发送通知
            break;
        }
    }

    // 释放截图内存,防止长时间循环导致 OOM
    if (img) {
        img.recycle();
    }

    // 控制识别频率,平衡实时性与设备性能
    sleep(1500);
}

核心逻辑说明

  • requestScreenCapture():首次运行会触发系统截图授权,必须允许否则脚本直接退出。
  • ocr.recognizeText(img):Hamibot 1.2.2 及以上版本内置接口,直接返回纯文本结果,适合快速关键词匹配。
  • img.recycle():实时循环截图必须手动回收图片对象,否则内存会持续累积直至应用崩溃。
  • sleep(1500):OCR 属于高算力操作,1.5 秒间隔可兼顾响应速度与手机发热/耗电控制。

最佳实践建议

  1. 关键词校准:QQ 系统消息文案会随版本更新变化。建议先单独运行一次 log(ocr.recognizeText(captureScreen())) 抓取当前界面实际文案,再精准填入 targetKeywords
  2. 结合 UI 选择器提升稳定性:纯 OCR 易受聊天背景、气泡颜色或表情干扰。若需更高可靠性,可先用 UI 选择器预判,例如:
    if (className('TextView').textContains('系统消息').exists()) {
        // 触发后续 OCR 或点击逻辑
    }
    
  3. 局部识别优化:若系统消息固定出现在屏幕特定区域,可先全屏截图,再使用 images.clip(img, x, y, w, h) 裁剪局部区域传入 OCR,可显著降低识别耗时与误判率。
  4. 退出与防呆机制:该脚本为常驻循环,需通过 Hamibot 控制台点击“停止”或调用 hamibot.exit() 结束。建议在命中关键词并执行完对应操作后加入退出条件或状态标记,避免重复触发。

运行前请确保 Hamibot 版本 ≥ 1.2.2,无障碍服务与截图权限均已开启。如需针对特定 QQ 界面元素补充坐标点击、滑动或自动回复逻辑,提供具体界面特征即可,我会为你扩展对应代码。

ℹ️ 内容由 AI 生成,可能不准确,请注意核实
Hamibot AI
1
· 4 小时前

以下是为你编写的实时屏幕文字识别+震动提醒脚本。代码已严格适配 Hamibot 的 Rhino 1.7.15 引擎,未使用箭头函数与默认参数,并针对 QQ 群系统通知场景做了防抖与性能优化。

// 文档地址 https://docs.hamibot.com/
if (!requestScreenCapture()) {
    toastLog('未授予截图权限,脚本退出');
    hamibot.exit();
}

// 配置需要监控的关键词(覆盖常见QQ群系统通知)
var targetKeywords = [
    '禁言', '解除禁言', '移出群聊', '邀请你加入', '已成为管理员',
    '撤回了一条消息', '群公告', '系统消息', '拍了拍', '修改群名称'
];

// 震动时长(毫秒)
var vibrateDuration = 300;
// 命中后的冷却时间,防止连续震动
var cooldownMs = 2500;

toastLog('开始实时识别屏幕文字,命中关键词将触发震动');

while (true) {
    var img = captureScreen();
    var rawResult = ocr.recognizeText(img);
    // 兼容不同版本OCR返回值类型
    var textResult = typeof rawResult === 'string' ? rawResult : JSON.stringify(rawResult);

    var isMatch = false;
    var matchedWord = '';
    for (var i = 0; i < targetKeywords.length; i++) {
        if (textResult.indexOf(targetKeywords[i]) !== -1) {
            isMatch = true;
            matchedWord = targetKeywords[i];
            break;
        }
    }

    if (isMatch) {
        toastLog('命中关键词: ' + matchedWord + ',触发震动');
        device.vibrate(vibrateDuration);
        log('当前屏幕完整识别结果: ' + textResult);
        sleep(cooldownMs);
    }

    if (img) {
        img.recycle();
    }

    sleep(1500);
}

核心逻辑说明

  • ocr.recognizeText(img):Hamibot 内置 OCR 接口,直接提取屏幕可见文字。已做类型兼容处理,避免部分版本返回数组导致 indexOf 报错。
  • device.vibrate(vibrateDuration):调用系统震动马达。命中关键词后立即触发,并通过 cooldownMs 冷却防抖,避免同一画面重复识别导致连续震动。
  • img.recycle() + sleep(1500):实时截图必须手动释放内存,1.5秒间隔可兼顾识别实时性与设备发热控制。

针对 QQ 群系统消息的专项优化建议

  1. 系统消息文案特征:QQ 群系统通知(如“XXX已被禁言XX分钟”)通常为灰色小字,且位于聊天列表顶部或消息流中间。若 OCR 偶尔漏识别,可先运行一次 log(ocr.recognizeText(captureScreen())) 抓取当前界面实际文案,将精确词组补充到 targetKeywords
  2. 局部截图提速:系统消息多出现在屏幕中上区域。可替换全屏截图为局部裁剪,显著降低 OCR 耗时:
    var fullImg = captureScreen();
    var clipImg = images.clip(fullImg, 0, 0, fullImg.width, Math.floor(fullImg.height * 0.4));
    var textResult = ocr.recognizeText(clipImg);
    fullImg.recycle();
    clipImg.recycle();
    
  3. 结合 UI 选择器兜底:纯 OCR 受背景色、气泡遮挡影响较大。若需更高稳定性,可先用控件特征预判,再触发 OCR 或震动:
    if (className('TextView').textContains('禁言').exists()) {
        device.vibrate(vibrateDuration);
    }
    
  4. 震动权限与系统限制device.vibrate() 无需额外权限,但部分定制 ROM(如 MIUI、ColorOS)在省电模式或后台限制下可能拦截震动。建议将 Hamibot 加入电池白名单,并保持脚本在前台或无障碍服务活跃状态。

运行注意事项

  • 确保 Hamibot 版本 ≥ 1.2.2,已开启无障碍服务与截图权限。
  • 脚本为常驻循环,需通过 Hamibot 控制台点击“停止”或调用 hamibot.exit() 结束。
  • 若需命中后执行额外操作(如自动点击、跳转、推送通知),在 if (isMatch) 代码块内补充对应逻辑即可。

如需针对特定 QQ 版本界面调整识别区域、补充自动点击坐标或接入消息推送,提供具体界面截图或控件特征,我会为你扩展对应代码。

ℹ️ 内容由 AI 生成,可能不准确,请注意核实
Hamibot AI
1
· 3 小时前

以下是为你编写的实时屏幕文字识别与震动提醒脚本。代码已严格适配 Hamibot 的 Rhino 1.7.15 引擎,未使用箭头函数与默认参数,并针对你的需求做了防重复触发与内存优化。

// 文档地址 https://docs.hamibot.com/
if (!requestScreenCapture()) {
    toastLog('未授予截图权限,脚本退出');
    hamibot.exit();
}

// 配置需要监控的关键词(支持部分匹配)
var targetKeywords = ['(UER)', '(禁言)'];
var vibrateDuration = 5000; // 震动时长:5秒
var cooldownMs = 5500;      // 冷却时间:略大于震动时长,防止重复触发
var checkInterval = 1500;   // 识别间隔:1.5秒

toastLog('开始监控屏幕文字,命中关键词将震动5秒');

while (true) {
    var img = captureScreen();
    var rawResult = ocr.recognizeText(img);
    // 兼容不同版本OCR返回值类型,统一转为字符串进行匹配
    var textResult = String(rawResult);

    var isMatch = false;
    var matchedWord = '';
    for (var i = 0; i < targetKeywords.length; i++) {
        if (textResult.indexOf(targetKeywords[i]) !== -1) {
            isMatch = true;
            matchedWord = targetKeywords[i];
            break;
        }
    }

    if (isMatch) {
        toastLog('命中关键词: ' + matchedWord + ',开始震动5秒');
        device.vibrate(vibrateDuration);
        log('当前屏幕识别结果: ' + textResult);
        // 震动期间暂停循环,避免重复识别导致震动叠加
        sleep(cooldownMs);
    }

    if (img) {
        img.recycle();
    }

    sleep(checkInterval);
}

核心逻辑说明

  • 部分匹配机制text.indexOf(keyword) !== -1 天然支持部分匹配。只要屏幕文字中包含 (UER)(禁言) 任意一个片段,即可触发后续逻辑。
  • 5秒震动控制device.vibrate(5000) 直接调用系统马达持续震动 5000 毫秒。配合 sleep(5500) 冷却期,确保震动完整执行且不会因循环过快导致多次触发。
  • 内存与性能保护:每次循环后执行 img.recycle() 释放截图对象,防止长时间运行引发 OOM 崩溃。1.5 秒识别间隔可显著降低 CPU 占用与发热。
  • OCR 类型兼容:使用 String(rawResult) 统一转换返回值,避免部分 Hamibot 版本返回数组或对象时 indexOf 报错。

最佳实践建议

  1. 精准命中优化:若 (UER)(禁言) 在特定界面固定出现,可先运行一次 log(String(ocr.recognizeText(captureScreen()))) 抓取实际排版文案,确认括号是否为全角/半角,必要时在 targetKeywords 中补充变体(如 UER禁言)。
  2. 局部识别提速:若目标文字仅出现在屏幕固定区域(如顶部通知栏或聊天列表中上部),可替换全屏截图为局部裁剪,大幅降低 OCR 耗时:
    var fullImg = captureScreen();
    var clipImg = images.clip(fullImg, 0, 0, fullImg.width, Math.floor(fullImg.height * 0.35));
    var textResult = String(ocr.recognizeText(clipImg));
    fullImg.recycle();
    clipImg.recycle();
    
  3. 震动权限与系统限制device.vibrate() 依赖系统震动权限。部分定制 ROM(如 MIUI、OriginOS)在低电量模式或后台严格限制下可能拦截长震动。建议将 Hamibot 加入电池无限制白名单,并保持无障碍服务活跃。
  4. 安全退出机制:该脚本为常驻循环,需通过 Hamibot 控制台点击“停止”或悬浮窗按钮结束。若需命中后自动停止,可在 device.vibrate() 后追加 hamibot.exit();

运行前请确保 Hamibot 版本 ≥ 1.2.2,已开启无障碍服务与截图权限。如需调整识别区域、补充自动点击或接入消息推送,提供具体界面特征即可,我会为你扩展对应逻辑。

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