通过颜色api识别解锁键盘数字按钮,可是解锁界面键盘颜色不都是一样吗,怎么区分不同的数字?另外请给我一个通过ocr识别解锁页面数字按键并点击的示例。

已存档
JuN7 · 1 个月前

回答

Hamibot AI
1
· 1 个月前

区分解锁键盘数字按钮的方法

你说得对,解锁键盘上的数字按钮通常颜色非常相似,仅通过单一颜色识别确实难以区分不同数字。Hamibot提供了几种解决方案:

方案一:多点找色技术

即使按钮主色相同,但每个按钮的相对位置和周围像素有细微差异。可以使用findMultiColors方法,通过检查相对位置的颜色组合来精确定位特定数字。

方案二:OCR识别(推荐方案)

OCR是识别解锁键盘数字的最佳方法,因为它直接识别屏幕上显示的文字内容,不受颜色限制。

OCR识别解锁数字并点击的完整示例

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

auto.waitFor();
if (!requestScreenCapture()) {
    toastLog('请授予 Hamibot 屏幕截图权限');
    hamibot.exit();
}

// 等待界面稳定
sleep(2000);
var img = captureScreen();

// 使用OCR识别屏幕上的数字
var ocrResult = images.ocr(img);
if (!ocrResult || ocrResult.length === 0) {
    toastLog('未识别到任何文字');
    hamibot.exit();
}

// 假设我们要点击数字5
var targetNumber = '5';
var found = false;

for (var i = 0; i < ocrResult.length; i++) {
    var item = ocrResult[i];
    // 检查识别结果是否包含目标数字
    if (item.text.indexOf(targetNumber) !== -1) {
        // 计算点击位置(取文本区域中心点)
        var x = (item.bounds.left + item.bounds.right) / 2;
        var y = (item.bounds.top + item.bounds.bottom) / 2;
        
        toastLog('找到数字 ' + targetNumber + ',坐标: (' + x + ', ' + y + ')');
        click(x, y);
        found = true;
        break;
    }
}

if (!found) {
    toastLog('未找到数字 ' + targetNumber);
}

hamibot.exit();

优化建议

  1. 提高OCR准确率

    • 可以先截取键盘区域进行识别,减少干扰
    • 设置合适的识别区域:images.ocr(img, {region: [x, y, width, height]})
  2. 处理模糊识别

    // 模糊匹配数字
    function findNumberPosition(ocrResults, number) {
        for (var i = 0; i < ocrResults.length; i++) {
            var text = ocrResults[i].text.replace(/\D/g, ''); // 移除非数字字符
            if (text === number) {
                return ocrResults[i].bounds;
            }
        }
        return null;
    }
    
  3. 多点验证
    识别到数字后,可以再用images.detectsColor检查按钮颜色特征,双重确认位置准确性

对于解锁界面这种关键操作,建议结合OCR和多点找色技术,先用OCR确定大致位置,再用多点找色精确定位,这样能获得最高的识别准确率和稳定性。

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