You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化pytesseract+OpenCV图像文本提取速度适配高时效需求

基于pytesseract+OpenCV的OCR耗时优化方案

现有流程的最大冗余开销是磁盘IO操作,截图存盘再读取的步骤完全可以砍掉,所有操作都在内存中完成即可,配合参数优化可以大幅降低耗时,具体优化方案如下:

  • 砍掉磁盘IO流程,直接在内存中传递图像数据
    不管你用哪种截图工具(PIL、mss、pyautogui等),截图结果直接在内存中转成OpenCV可识别的格式,不需要写入磁盘生成temp_chit.png再用cv2.imread读取,仅这一步就能节省30%以上的整体耗时。
  • 固定Tesseract识别参数,减少无效计算
    调用image_to_string时指定固定参数,避免Tesseract做多余的布局分析、全语言包加载操作:
    • 用lang参数仅加载你需要的语言包,比如仅识别简体中文就填lang='chi_sim',不要加载全量语言
    • 用config参数指定--psm布局模式,比如识别固定区域的块状文本用--psm 6,识别单行文本用--psm 7,同时指定--oem 3用默认引擎组合,避免动态适配开销
  • 初始化逻辑前置
    把tesseract_cmd路径配置、识别参数定义放到程序初始化阶段执行,不要每次识别都重复配置,减少重复初始化开销。
  • 简化不必要的预处理操作
    如果你的截图清晰度足够,不需要额外做二值化、降噪等OpenCV预处理操作,可以直接把内存中的截图对象传给pytesseract,省去格式转换开销。

优化后示例代码

import pytesseract
import cv2
import numpy as np
from PIL import ImageGrab
from timeit import default_timer as timer

# 程序初始化阶段执行,仅跑一次
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
# 固定识别参数,根据你的业务场景调整psm和lang即可
OCR_CONFIG = '--psm 6 --oem 3'
OCR_LANG = 'chi_sim' # 仅识别英文就改成'eng'

start = timer()

# 直接截指定区域屏幕到内存,无需存盘,bbox填你要识别的区域坐标
pil_screenshot = ImageGrab.grab(bbox=(100, 100, 800, 400))
# 内存中转成OpenCV格式,无磁盘操作
cv_img = cv2.cvtColor(np.array(pil_screenshot), cv2.COLOR_RGB2BGR)
# 识别文本
text = pytesseract.image_to_string(cv_img, lang=OCR_LANG, config=OCR_CONFIG)
print(text)

end = timer()
print(f"耗时:{end - start}s")

内容的提问来源于stack exchange,提问作者James

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 00:06:08