PDF,图片,方向检测模型-旋转角度.md 2.5 KB

🔄 旋转角度的约定差异

1. 图像处理中的旋转约定(OpenCV/PIL)

在大多数图像处理库中:

  • 逆时针旋转 = 正角度
  • 顺时针旋转 = 负角度

    # OpenCV/PIL 的旋转约定
    cv2.rotate(image, cv2.ROTATE_90_COUNTERCLOCKWISE)  # 逆时针90° = +90°
    cv2.rotate(image, cv2.ROTATE_90_CLOCKWISE)         # 顺时针90° = -90° = 270°
    

2. 方向分类模型的输出约定

在 MinerU 的方向分类模型中,输出的旋转角度表示的是需要旋转多少度来恢复正常方向,具体含义如下:

  • → 图片已经是正常方向,无需旋转 ocr_tools/universal_doc_parser/models/adapters/mineru_adapter.py

但是,MinerU 的方向分类模型 返回的是:

0°   → 正常方向
90°  → 需要顺时针旋转90°才能恢复(图片当前是逆时针旋转了90°)
180° → 需要旋转180°才能恢复(倒置)
270° → 需要顺时针旋转270°才能恢复(图片当前是顺时针旋转了90°)

关键理解:模型返回的是"需要旋转多少度来恢复正常",而不是"图片当前旋转了多少度"。

rotated_table, table_angle = self.preprocessor.process(cropped_table)会返回恢复正常方向的图片和角度值


2. pdf_coordinate_transform.py (~250行)

作用: PDF坐标系与图像坐标系的转换

核心函数:

  • pdf_rotation_to_image_rotation(): PDF旋转角度转换为图片旋转角度
  • transform_bbox_for_rotation_fitz(): fitz引擎的完整几何坐标变换
  • transform_bbox_for_rotation_pypdfium2(): pypdfium2引擎的坐标值交换

坐标系说明:

  • PDF坐标系: 左下角原点 (0,0),X向右,Y向上
  • 图像坐标系: 左上角原点 (0,0),X向右,Y向下

旋转定义(重要):

  • PDF rotation: 0/90/180/270度(顺时针旋转,PDF规范)
  • 图片rotation: 0/90/180/270度(逆时针旋转,图像处理标准)
  • 对外API统一返回图片rotation(逆时针定义)

旋转转换映射: | PDF Rotation (顺时针) | 图片 Rotation (逆时针) | |---------------------|---------------------| | 0° | 0° | | 90° | 270° | | 180° | 180° | | 270° | 90° |

关键区别: | 特性 | fitz | pypdfium2 | |------|------|-----------| | 输入坐标系 | PDF原始坐标系 | 已旋转的坐标系(但bbox顺序错误) | | 变换类型 | 几何空间变换 | 坐标值交换(修正min/max) | | 复杂度 | 高(涉及旋转公式) | 低(只是交换) |