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

EasyOCR提取文本无法正确添加换行符的问题求助

问题描述
  • 核心代码:
import fitz
import easyocr
from PIL import Image

def extract_text_from_pdf(pdf_path):
    reader = easyocr.Reader(['en'], download_enabled=False)
    extracted_text = ""
    for page_number in range(pdf_document.page_count):
    
        page = pdf_document[page_number]
        resolution = 300
        zoomfactor = resolution/72.0
        pixmap = page.get_pixmap(matrix=fitz.Matrix(zoomfactor, zoomfactor))  # 修正原代码语法错误:matrix-fitz → matrix=
        image = pixmap.tobytes()
        result = reader.readtext(image, paragraph=True)

        print(f"Page {page_number + 1} - OCR Result:") 
        for detection in result:
            extracted_text += detection[1]

    pdf_document.close()
    
return extracted_text
  • 待识别内容:两行文本,第一行account: 1234,第二行url: xyz
  • 实际提取结果:"account: 1234url: xyz"
  • 预期结果:
account: 1234
url: xyz
  • 问题根因:单行内单词间距过大,EasyOCR未按行识别,导致两行文本被无间隔拼接。
解决方案

针对该问题,可通过以下几种方式解决:

1. 调整EasyOCR识别参数

通过readtext方法的参数优化大间距文本的行识别逻辑:

# 修改readtext调用,增加参数控制
result = reader.readtext(
    image,
    paragraph=True,
    min_size=10,  # 过滤过小的文本区域,减少误判
    text_threshold=0.7,  # 提高文本置信度阈值,强化行识别准确性
    low_text=0.4
)

2. 基于检测框坐标手动判断换行

利用EasyOCR返回结果中的文本框坐标,通过垂直位置差异判断是否换行:

extracted_text = ""
prev_y_center = None
line_height_threshold = 20  # 根据实际文本高度调整阈值

for detection in result:
    text_box = detection[0]
    # 计算文本框垂直中心坐标
    y_center = (text_box[0][1] + text_box[2][1]) / 2
    text = detection[1]
    
    if prev_y_center is not None:
        # 垂直中心距离超过阈值则判定为新行,添加换行符
        if abs(y_center - prev_y_center) > line_height_threshold:
            extracted_text += "\n"
    extracted_text += text
    prev_y_center = y_center

3. 图像预处理增强行特征

对PDF转成的图像做预处理,强化文本行的辨识度:

from PIL import Image

# 将pixmap转为PIL图像
image = Image.frombytes("RGB", [pixmap.width, pixmap.height], pixmap.samples)
# 提高图像对比度,增强文本与背景差异
image = image.point(lambda p: p * 1.5)
# 转回字节格式供EasyOCR识别
image_bytes = image.tobytes()
result = reader.readtext(image_bytes, paragraph=True)

4. 修正原代码语法错误

原代码中matrix-fitz.Matrix是语法错误,需改为matrix=fitz.Matrix,否则代码无法正常执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 19:32:40