使用截图 + OCR 的方法来识别手机页面的文字内容

步骤 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)

点击识别到的文字位置

要实现点击识别到的文字的位置,可以采取以下步骤:

  1. 使用 OCR 提取文字以及位置数据。
  2. 找到目标文字的坐标。
  3. 使用 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}")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嗪磕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值