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

如何准确识别90°与270°旋转文本?PaddleOCR识别优化问询

针对含旋转文本的PaddleOCR优化方案

1. 启用内置文本方向检测与单区域校正

PaddleOCR自带文本方向分类模型(cls),可以针对每个检测到的文本区域单独判断方向(0°/90°/180°/270°),校正后再识别,无需整图旋转。初始化OCR时加载cls模型即可:

from paddleocr import PaddleOCR

# 加载带方向检测的模型,指定语言为中英文
ocr = PaddleOCR(use_angle_cls=True, lang='ch')
# 识别时自动处理文本方向
result = ocr.ocr('your_image.jpg', cls=True)

该方式会自动对每个文本区域做方向判断与校正,能解决大部分90°/270°旋转文本的识别问题。

2. 基于区域宽高比的二次识别补全

如果部分旋转区域仍识别不准,可以根据检测框的宽高比筛选疑似竖排/旋转区域(比如区域高度远大于宽度),手动旋转该区域后二次识别,取置信度更高的结果:

import cv2

# 假设已通过ocr得到初始识别结果
img = cv2.imread('your_image.jpg')
for line in result:
    box, (text, score) = line
    # 计算区域宽高
    x_min, y_min = box[0]
    x_max, y_max = box[2]
    width = x_max - x_min
    height = y_max - y_min
    # 高度远大于宽度,判定为疑似旋转文本
    if height > 2 * width:
        # 截取目标区域
        roi = img[int(y_min):int(y_max), int(x_min):int(x_max)]
        # 旋转90度(可根据实际情况调整旋转方向)
        roi_rotated = cv2.rotate(roi, cv2.ROTATE_90_CLOCKWISE)
        # 单独识别旋转后的区域
        rot_result = ocr.ocr(roi_rotated, cls=True)
        if rot_result and rot_result[0][0][1][1] > score:
            # 替换为置信度更高的识别结果
            text = rot_result[0][0][1][0]
            score = rot_result[0][0][1][1]
    # 输出最终结果
    print(f"文本: {text}, 置信度: {score}")

3. 改进区域去重逻辑,基于坐标映射避免重复识别

之前整图旋转+覆盖方案失效的核心是未对旋转后的区域坐标做映射,导致同一区域被多次识别且置信度混乱。可以按以下逻辑优化:

  • 每次旋转图像后,将检测到的区域坐标反向旋转回原图坐标系
  • 用IOU(交并比)判断是否为同一区域,保留置信度最高的文本结果

4. 模型与参数调优

  • 更换更大的预训练模型:PaddleOCR提供轻量版和标准版模型,标准版对复杂文本(含旋转)的识别准确率更高,有GPU的话开启use_gpu=True可加速推理
  • 调整检测与识别参数:比如提高det_db_thresh减少误检,调整rec_image_shape适配竖排文本(例如将默认的(3, 32, 320)改为(3, 320, 32))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 22:48:22