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

如何用Python为图像逐行生成边界框,解决Tesseract文本识别不准问题

问题修复方案

问题原因

pytesseract.image_to_data返回的结果包含多个层级的识别单元,level字段对应不同粒度:

  • level=1:整页
  • level=2:文本块
  • level=3:段落
  • level=4:文本行
  • level=5:单个单词
    你现有代码未过滤层级,只要检测到非空文本就画框,会把所有单词级别的边界框全部绘制,因此无法得到逐行框选效果。

优化调整说明

  1. 新增图像预处理步骤:转灰度、降噪、二值化,提升行边界识别准确率
  2. 过滤层级为4的行级识别结果,仅保留文本行的边界框
  3. 新增行区域裁剪、保存逻辑,可直接输出每行的单独jpeg文件
  4. 可选单独对每行文本做识别,提升整体识别准确率

完整修改后代码

import cv2
import pytesseract
from pytesseract import Output

# 配置tesseract路径
pytesseract.pytesseract.tesseract_cmd = r'C:\\ProgramData\\Tesseract-OCR\\tesseract.exe'

# 读取图像,可替换为自身实际路径
img = cv2.imread('1.png')
# 图像预处理:减少噪声干扰,提升行识别准确率
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray, (5,5), 0)
thresh = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]

# 调用tesseract获取识别数据,lang参数可按需调整,比如中英文混合用'chi_sim+eng'
d = pytesseract.image_to_data(thresh, output_type=Output.DICT, lang='eng')
n_boxes = len(d['level'])

line_count = 0
for i in range(n_boxes):
    # 仅保留行级、非空文本的边界框
    if d['level'][i] == 4 and d['text'][i].strip() != "":
        (x, y, w, h) = (d['left'][i], d['top'][i], d['width'][i], d['height'][i])
        # 绘制行边界框
        cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
        # 裁剪行区域
        line_region = img[y:y+h, x:x+w]
        # 保存行区域为jpeg文件
        cv2.imwrite(f'line_{line_count}.jpeg', line_region)
        # 可选:单独识别该行文本,准确率更高
        line_text = pytesseract.image_to_string(line_region, lang='eng')
        print(f"第{line_count}行识别结果:{line_text.strip()}")
        line_count += 1

# 展示带框的结果
cv2.imshow('行识别结果', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

参数调整提示

如果行识别效果不符合预期,可以调整image_to_data的config参数,添加--psm分页模式配置:

  • config='--psm 3':默认自动分页,适用于常规排版文档
  • config='--psm 6':假设图像为单块统一文本,适用于排版规整的表格/单据
  • config='--psm 12':稀疏文本模式,可识别任意顺序的文本行,适用于排版零散的图像

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:30:03