Hamibot OCR 文字识别入门
OCR 是什么
OCR(Optical Character Recognition,光学字符识别)可以把图片里的文字提取出来变成可编辑文本。在 Hamibot 里,这个能力让脚本可以:
- 根据屏幕上显示的文字做判断(比如有没有「确认」按钮)
- 在无法用控件选择器定位的界面上找到目标元素
- 验证某个操作的结果(比如提示「购买成功」)
前置条件
- Hamibot 1.2.2 及以上(OCR 是这个版本新增的)
- 屏幕截图权限(OCR 先得有图片才能识别)
快速示例
// 确保无障碍已启用
auto.waitFor();
// 请求屏幕截图权限
if (!requestScreenCapture()) {
toastLog('没有授予屏幕截图权限');
hamibot.exit();
}
// 等待权限生效
sleep(1000);
// 截屏
const img = captureScreen();
// 识别图片中的文字(返回结构化结果)
const res = ocr.recognize(img);
log(res);
// 或者只获取纯文本
const text = ocr.recognizeText(img);
log(text);
hamibot.exit();
ocr.recognize 与 ocr.recognizeText 的区别
| 函数 | 返回值 | 适用场景 |
|---|---|---|
ocr.recognize(img) | 结构化结果,包含每段文字的坐标、置信度 | 需要知道文字在屏幕上的位置,配合坐标点击 |
ocr.recognizeText(img) | 纯文本字符串 | 只需要知道屏幕上有哪些文字,做条件判断 |
配合坐标点击的进阶用法
ocr.recognize() 返回的结果里,每个文字块都有 bounds(矩形边界)。可以取中心点点击:
const img = captureScreen();
const results = ocr.recognize(img);
// 找到包含「确认」的那个文字块
for (const item of results) {
if (item.text.includes('确认')) {
const { centerX, centerY } = item.bounds;
click(centerX, centerY);
break;
}
}
性能注意事项
- OCR 比控件选择器慢得多,一次完整识别可能需要数百毫秒到数秒
- 只在必要时截屏 + 识别,避免循环里频繁调用
- 识别准确度跟图片清晰度、字体大小有关
OCR vs 文字控件选择器
如果目标界面有标准安卓控件并且文字可读,优先用 text() / textContains() 选择器,比 OCR 快且准确。OCR 适合以下场景:
- 界面不是标准控件(游戏、Canvas 自绘)
- 需要识别的文字不在控件树里
- 需要判断一段自由文本是否出现