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

如何通过PaddleOCR获取文本区域旋转角度以校正裁剪方向?

获取PaddleOCR旋转文本的角度信息以正确裁剪区域

开启use_angle_cls=True模式时,PaddleOCR可正确识别90°、180°甚至270°旋转的文本,但默认返回结果未包含旋转角度信息,导致依据返回坐标裁剪出的文本区域方向通常不正确(如原始图片中的旋转文本,裁剪后呈现方向错误的状态)。以下是两种获取旋转角度并得到正确方向裁剪区域的方法:

方法一:从PaddleOCR推理结果中直接提取角度分类值

PaddleOCR的角度分类模块实际会输出文本的旋转角度类别,只是默认返回的结果结构未包含该信息。你可以通过修改推理代码,在输出中加入角度分类结果:

  • 找到PaddleOCR推理流程中调用角度分类器的部分(通常在paddleocr.py或相关推理脚本里);
  • 获取angle_cls模型的输出值(不同版本的映射关系略有差异,一般0对应0°、1对应180°,部分模型会细分90°/270°的类别);
  • 将角度值与文本识别结果、坐标信息一起返回。

方法二:通过文本框坐标计算旋转角度

如果不想修改源码,可以利用返回的文本框四点坐标计算旋转角度:

计算角度的代码示例

import math

def get_text_rotation_angle(points):
    # points为文本框的四点坐标,格式:[[x1,y1], [x2,y2], [x3,y3], [x4,y4]]
    # 取左上角和右上角的坐标计算水平夹角
    dx = points[1][0] - points[0][0]
    dy = points[1][1] - points[0][1]
    # 计算弧度并转换为角度
    angle = math.degrees(math.atan2(dy, dx))
    # 调整角度到0-360°范围
    if angle < 0:
        angle += 360
    return angle

裁剪后修正图像方向

得到角度后,使用OpenCV或PIL对裁剪后的图像进行旋转修正:

import cv2
import numpy as np

def correct_image_orientation(image, angle):
    # 获取图像尺寸与中心
    h, w = image.shape[:2]
    center = (w // 2, h // 2)
    # 生成旋转矩阵
    rotation_matrix = cv2.getRotationMatrix2D(center, -angle, 1.0)
    # 计算旋转后的图像尺寸,避免内容被裁剪
    cos_val = np.abs(rotation_matrix[0, 0])
    sin_val = np.abs(rotation_matrix[0, 1])
    new_width = int((h * sin_val) + (w * cos_val))
    new_height = int((h * cos_val) + (w * sin_val))
    # 调整旋转矩阵的平移参数,保证图像居中
    rotation_matrix[0, 2] += (new_width / 2) - center[0]
    rotation_matrix[1, 2] += (new_height / 2) - center[1]
    # 执行旋转,用白色填充空白区域
    corrected_image = cv2.warpAffine(image, rotation_matrix, (new_width, new_height), borderValue=(255, 255, 255))
    return corrected_image

内容的提问来源于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 17:45:56