如何使用Python中的Tesseract提取图片高亮区域的文本内容?
使用Python + Tesseract 提取图片高亮区域文本的实现方案
前置准备
先安装依赖:
- 首先安装Tesseract OCR引擎(Windows安装时记得勾选添加到系统环境变量,或后续在代码中手动指定路径)
- 安装Python依赖包:
pip install pytesseract pillow opencv-python
实现逻辑
- 用OpenCV读取图片,转换到HSV色彩空间,通过颜色阈值筛选出高亮(通常为黄色)区域的掩码
- 从原图中裁剪出高亮对应的ROI(感兴趣区域)
- 对ROI做图像预处理(灰度化、二值化、降噪)提升识别准确率
- 调用Tesseract识别预处理后的区域文本
完整代码示例
import cv2 import numpy as np import pytesseract # 【Windows用户如果没加环境变量需要取消下一行注释,替换为自己的Tesseract安装路径】 # pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe' # 读取图片,路径替换为自己本地的图片路径 img = cv2.imread("test.jpg") # 转HSV色彩空间方便筛选颜色 hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # 黄色高亮的HSV阈值范围,可根据实际高亮颜色调整 lower_yellow = np.array([20, 100, 100]) upper_yellow = np.array([30, 255, 255]) # 生成高亮区域掩码 mask = cv2.inRange(hsv, lower_yellow, upper_yellow) # 查找高亮区域的轮廓 contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # 遍历每个高亮区域识别文本 for cnt in contours: # 过滤过小的噪点区域 if cv2.contourArea(cnt) < 10: continue # 获取区域坐标 x, y, w, h = cv2.boundingRect(cnt) # 裁剪高亮区域 roi = img[y:y+h, x:x+w] # ROI预处理提升识别率 gray_roi = cv2.cvtColor(roi, cv2.COLOR_BGR2GRAY) _, binary_roi = cv2.threshold(gray_roi, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) # 识别文本,如果是中文替换lang参数为lang='chi_sim'(需提前安装Tesseract中文语言包) text = pytesseract.image_to_string(binary_roi, lang='eng', config='--psm 6') print(f"识别到高亮区域文本:{text.strip()}")
优化提示
- 如果高亮不是黄色,可调整
lower_yellow和upper_yellow的HSV阈值适配对应颜色 - 识别准确率低时可调整Tesseract的
--psm参数,比如--psm 7表示将图像视为单行文本,--psm 8视为单个单词 - 识别中文需在安装Tesseract时勾选中文语言包,调用时指定
lang='chi_sim'
内容的提问来源于stack exchange,提问作者Bro From Space
相关产品推荐
相关产品推荐

