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

YOLOv5训练流程自动化:Azure坐标转换与PDF转图坐标匹配问题

问题解答

1. Azure Parser坐标转YOLOv5格式的方法

YOLOv5的标注格式为class_id x_center y_center width height,所有数值是相对于图像宽高的归一化值(0-1范围内),而Azure Parser返回的ROI坐标是基于PDF页面的绝对坐标(通常为用户单位,1单位=1/72英寸,原点在页面左上角,y轴向下),转换步骤如下:

  • 第一步:获取基础数据
    从Azure Parser拿到ROI的bounding box数据(格式为[x, y, width, height],x/y是左上角坐标,width/height是ROI的宽高),同时获取对应PDF页面的原生尺寸(pdf_page_width、pdf_page_height,单位为用户单位),以及PDF转图像后的实际图像尺寸(img_width、img_height,单位为像素)。

  • 第二步:将Azure坐标转换为图像像素坐标
    由于PDF转图像是按dpi缩放的,需先把Azure的用户单位坐标转成图像像素坐标:

    # 计算比例系数
    scale_x = img_width / pdf_page_width
    scale_y = img_height / pdf_page_height
    
    # 转换为像素坐标
    x_px = x * scale_x
    y_px = y * scale_y
    w_px = width * scale_x
    h_px = height * scale_y
    
  • 第三步:转换为YOLO归一化格式
    基于图像尺寸计算归一化值:

    # 计算中心坐标的归一化值
    x_center = (x_px + w_px / 2) / img_width
    y_center = (y_px + h_px / 2) / img_height
    
    # 计算宽高的归一化值
    yolo_width = w_px / img_width
    yolo_height = h_px / img_height
    
  • 第四步:生成标注行
    将上述数值按class_id x_center y_center yolo_width yolo_height格式写入.txt文件,保留6位左右小数即可。

2. 保证PDF转图像后坐标一致的方法

核心是让图像与PDF页面保持严格的比例映射,避免缩放或偏移,推荐两种可靠的实现方式:

方式一:用PyMuPDF(fitz)直接转换

PyMuPDF可以精确控制转换的dpi,生成的图像尺寸与PDF页面严格对应,坐标无偏差:

import fitz

# 打开PDF文件
doc = fitz.open("your_input.pdf")
# 选择目标页面(示例为第一页)
page = doc[0]

# 设置转换dpi(常用300,可根据需求调整)
dpi = 300
# 创建转换矩阵,1用户单位=1/72英寸,所以dpi/72是缩放系数
mat = fitz.Matrix(dpi/72, dpi/72)

# 转换为图像
pix = page.get_pixmap(matrix=mat)
# 保存图像
pix.save("page_0.png")

# 获取图像尺寸(用于后续坐标转换)
img_width = pix.width
img_height = pix.height

doc.close()

方式二:用pdf2image配合PDF尺寸校准

如果坚持用pdf2image,需先获取PDF页面尺寸,再指定dpi转换,禁止使用自定义size参数:

from pdf2image import convert_from_path
import fitz

# 先获取PDF页面原生尺寸
doc = fitz.open("your_input.pdf")
page = doc[0]
pdf_page_width = page.rect.width
pdf_page_height = page.rect.height
doc.close()

# 指定dpi转换图像
dpi = 300
images = convert_from_path("your_input.pdf", dpi=dpi)
img = images[0]
img_width, img_height = img.size

此时图像尺寸会严格等于pdf_page_width*(dpi/72)和pdf_page_height*(dpi/72),保证坐标比例完全匹配。

注意:如果PDF页面存在旋转,需通过page.rotation获取旋转角度,转换图像时同步旋转(PyMuPDF会自动处理旋转,pdf2image需添加rotation参数),否则坐标会错位。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 00:53:19