步骤 1:安装必要的 Python 库
我们需要使用 Pillow 库来处理截图,并用 pytesseract 库进行文字识别。
可以通过以下命令安装:
pip install pillow
pip install pytesseract
此外,pytesseract 依赖于 Tesseract-OCR,需要先安装它,并确保它在系统路径中。
安装 Tesseract-OCR
Windows: 下载并安装 Tesseract-OCR。安装后,需要将 Tesseract 安装目录下的路径(例如 C:\Program Files\Tesseract-OCR)加入到系统的环境变量中。
步骤 2:连接设备并截图
我们可以使用 uiautomator2 来连接设备并截图,然后保存为图像文件。例如:
from PIL import Image
import uiautomator2 as u2
# 连接设备(确保已连接设备并启用ADB调试)
d = u2.connect() # 使用 d = u2.connect("设备IP地址") 也可以连接特定设备
# 截图并保存为 "screen.png"
d.screenshot("screen.png")
步骤 3:使用 OCR 进行文字识别
使用 pytesseract 来识别截图中的文字内容。
import pytesseract
# 打开截图
image = Image.open("screen.png")
# 使用 Tesseract OCR 识别文字
text = pytesseract.image_to_string(image, lang="chi_sim") # `lang="chi_sim"`用于识别中文
print("识别到的文字内容:")
print(text)
完整代码示例
以下是完整的代码,包含了截图、加载图像和识别文字的步骤:
from PIL import Image
import uiautomator2 as u2
import pytesseract
# 连接设备
d = u2.connect()
# 截图并保存
d.screenshot("screen.png")
# 加载图像
image = Image.open("screen.png")
# 使用 OCR 识别文字
text = pytesseract.image_to_string(image, lang="chi_sim") # 如果只需识别英文可以省略 `lang`
print("识别到的文字内容:")
print(text)
点击识别到的文字位置
要实现点击识别到的文字的位置,可以采取以下步骤:
- 使用 OCR 提取文字以及位置数据。
- 找到目标文字的坐标。
- 使用 uiautomator2 的 click 方法点击该位置。
具体实现方法如下:
1. 使用 pytesseract 的字符位置识别
pytesseract 可以返回文字的具体位置(bounding box)。可以使用** pytesseract.image_to_data()** 获取每个文字的位置信息。
import pytesseract
# 加载截图
image = Image.open("screen.png")
# 获取文字的详细位置信息
data = pytesseract.image_to_data(image, lang="chi_sim", output_type=pytesseract.Output.DICT)
# 打印文字和位置
for i in range(len(data["text"])):
if int(data["conf"][i]) > 60: # 设置置信度阈值,确保识别的文字准确
word = data["text"][i]
x, y, w, h = data["left"][i], data["top"][i], data["width"][i], data["height"][i]
print(f"文字: {word} 位置: x={x}, y={y}, 宽度={w}, 高度={h}")
2. 查找并点击特定文字
通过 OCR 返回的坐标,可以找到指定的文字并模拟点击。例如,如果想要点击包含“设置”字样的文字区域,可以这样操作:
# 查找目标文字并点击位置
target_word = "设置" # 目标文字
for i in range(len(data["text"])):
if data["text"][i] == target_word and int(data["conf"][i]) > 60: # 匹配目标文字
x, y, w, h = data["left"][i], data["top"][i], data["width"][i], data["height"][i]
# 计算点击的中心点
center_x = x + w // 2
center_y = y + h // 2
# 点击位置
d.click(center_x, center_y)
print(f"点击了文字 '{target_word}' 在位置: ({center_x}, {center_y})")
break
注意事项
1.OCR 识别语言:pytesseract 支持多语言识别,可以通过 lang=“chi_sim” 参数来指定识别中文,chi_sim 是简体中文语言包。
2.图像质量:OCR 效果很大程度上依赖于图像的清晰度和对比度。对于模糊的截图,OCR 的识别效果会下降,可以尝试通过图像处理提升效果。
3.自定义 Tesseract 路径:如果 Tesseract 没有自动配置,可以手动指定路径,例如 pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"。
1.截图的图片通常默认不会保存到手机的存储中,而是直接传输到你的电脑或服务器上。但是,如果希望截图存储在手机的特定位置,uiautomator2 可以支持这种操作
2.坐标转换:OCR 提供的坐标基于图片的分辨率。如果手机截图的分辨率不同,需要对坐标进行缩放转换,以确保点击位置正确。
OCR(光学字符识别)工具如 pytesseract,在识别文字时会返回一个 置信度(confidence),表示它对识别结果的准确性“信任”的程度。这个置信度是一个百分比值,数值范围通常是 0 到 100,越高表示识别的准确性越高。
在实际代码中,可以使用置信度来过滤低准确性的识别结果。通过 pytesseract.image_to_data(),我们可以获取每个单词的 conf 值并进行判断:import pytesseract from PIL import Image # 加载图像 image = Image.open("screen.png") # 获取文字的详细信息,包括置信度 data = pytesseract.image_to_data(image, lang="chi_sim", output_type=pytesseract.Output.DICT) # 过滤置信度低的文字 for i in range(len(data["text"])): word = data["text"][i] confidence = int(data["conf"][i]) if confidence > 60: # 置信度过滤 x, y, w, h = data["left"][i], data["top"][i], data["width"][i], data["height"][i] print(f"文字: {word}, 置信度: {confidence}, 位置: ({x}, {y}), 宽度: {w}, 高度: {h}")