文字识别
from ascript.android.screen import Ocr
从屏幕中 识别文字,支持多引擎、便捷查找/点击/等待等操作。
使用场景
- 识别屏幕上的按钮文字、标题、提示语,判断当前页面状态
- 自动点击"确认"、"登录"、"下一步"等文字按钮
- 等待"加载完成"、"操作成功"等提示出现后再执行下一步
- 提取屏幕上的数字(金额、倒计时、验证码等)
- 游戏中识别对话框、任务提示、背包物品名称
引擎选择
AScript 内置两个 OCR 引擎:
| 引擎 | 说明 | 速度 | 精度 |
|---|---|---|---|
Ocr.MODE_MLK | 谷歌 ML Kit V2 | ⚡ 快 | 高 |
Ocr.MODE_PADDLE_V2 | 百度 PP-OCR V5 | 中等 | 高,支持多语言 |
默认引擎为 MODE_PADDLE_V2(PP-OCR V5),可通过 set_engine 全局切换。
设置默认引擎
# 切换为谷歌 MLKit
Ocr.set_engine("mlkit")
# 切换为百度 PaddleOCR
Ocr.set_engine("paddle")
便捷方法
以下方法自动截屏、自动调用当前默认引擎,无需关心底层细节。
查找文字
在屏幕上查找文字,返回第一个匹配结果。
- 函数
Ocr.find(text, rect=None, mode=None, binary=-1, confidence=0.1, image=None)
- 参数
| 参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| text | str | 是 | 要查找的文字(支持正则表达式) |
| rect | list | 否 | 搜索范围 [x, y, x1, y1] |
| mode | int | 否 | 引擎模式,None=使用默认引擎。Ocr.MODE_MLK=谷歌 MLKit,Ocr.MODE_PADDLE_V2=百度 PP-OCR V5 |
| binary | int | 否 | 二值化阈值,-1=不处理,0-255=二值化后再识别 |
| confidence | float | 否 | 可信度阈值,默认 0.1 |
| image | Bitmap/ndarray | 否 | 传入源图,None=自动截屏 |
- 返回值
匹配成功返回 dict,未找到返回 None
{
"text": "登录",
"rect": [320, 1080, 420, 1120],
"center_x": 370,
"center_y": 1100,
"confidence": 0.95
}
- 示例
from ascript.android.screen import Ocr
# 查找"登录"按钮
result = Ocr.find("登录")
if result:
print("找到:", result["text"], "位置:", result["center_x"], result["center_y"])
查找所有文字
返回所有匹配结果列表。text 传 None 可获取屏幕上全部文字。
- 函数
Ocr.find_all(text=None, rect=None, mode=None, binary=-1, confidence=0.1, image=None)
- 参数
同 Ocr.find(),其中 text 可为 None(返回所有识别结果)。
- 返回值
list[dict] 或 None
- 示例
from ascript.android.screen import Ocr
# 获取屏幕上所有文字
all_text = Ocr.find_all()
if all_text:
for item in all_text:
print(item["text"])
# 查找所有包含"设置"的结果
results = Ocr.find_all("设置")
判断文字是否存在
- 函数
Ocr.exists(text, rect=None, mode=None, binary=-1, confidence=0.1, image=None)
- 返回值
True 或 False
- 示例
from ascript.android.screen import Ocr
if Ocr.exists("登录"):
print("登录按钮存在")
找到文字并点击
找到文字后自动点击其中心位置。
- 函数
Ocr.click(text, rect=None, mode=None, binary=-1, confidence=0.1, timeout=0, image=None)
- 参数
| 参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| text | str | 是 | 要查找并点击的文字 |
| timeout | float | 否 | 超时秒数,0=只尝试一次,>0=持续重试直到超时 |
| 其他参数 | - | - | 同 Ocr.find() |
- 返回值
True=点击成功,False=未找到
- 示例
from ascript.android.screen import Ocr
# 找到"确认"并点击
Ocr.click("确认")
# 最多等 5 秒,找到"下一步"就点击
Ocr.click("下一步", timeout=5)
等待文字出现
持续截屏识别,直到找到目标文字或超时。
- 函数
Ocr.wait(text, timeout=10, rect=None, mode=None, binary=-1, confidence=0.1, image=None)
- 返回值
匹配成功返回 dict(同 Ocr.find()),超时返回 None
- 示例
from ascript.android.screen import Ocr
# 等待"加载完成"出现,最多等 15 秒
result = Ocr.wait("加载完成", timeout=15)
if result:
print("页面已加载")
等待文字出现并点击
组合 wait + click,等到文字出现后自动点击。
- 函数
Ocr.wait_click(text, timeout=10, rect=None, mode=None, binary=-1, confidence=0.1, image=None)
- 返回值
True=点击成功,False=超时未找到
- 示例
from ascript.android.screen import Ocr
# 等待"开始"按钮出现并点击,最多等 10 秒
Ocr.wait_click("开始", timeout=10)