PDF识别中位置偏移和PDF体系下的坐标单位转换

PDF识别中出现位置偏移

在识别PDF中,使用OCR技术或者基于传统技术进行识别,可能会出现一些位置偏移的识别结果。还有一些文本或列表不是水平或者竖直的,存在一些角度偏移,影响识别的结果。因此,我们需要提供一些相应的算法来解决这些问题。

分辨率和PDF坐标单位的转换

PDF中在识别时会根据场景的不同用到不同的数据单位,有些单位是inch,有些单位是pixel.在识别时会有差异,根据不同(DPI)Dots Per Inch,坐标也不一样。OCR过程中使用的DPI与PDF渲染的DPI不同步。同时,如果PDF在不同的设备或应用中以不同的缩放级别显示,坐标也可能不一致。

坐标系转换

在不同坐标系统之间进行转换时(例如从英寸到像素),可能会因为精度问题导致偏移。使用一致的DPI可以解决大部分问题。

DPI和Inch的转换公式和像素坐标的计算

像素坐标=英寸坐标×DPI
PS:常见的DPI值是72、96、150、300
代码的例子如下
# Define the DPI
dpi = 72

# Define the inch coordinates
inch_coords = [(1.9106, 1.4107), (1.977, 1.4105), (1.9741, 1.5094), (1.9075, 1.509)]

# Convert inch coordinates to pixel coordinates
pixel_coords = [(x * dpi, y * dpi) for x, y in inch_coords]

# Print the pixel coordinates
pixel_coords
上面可能会存在精度丢失的问题,造成页面局部位置的偏移

确定DPI的方法

import PyPDF2
pdf_file = open('example.pdf', 'rb')
pdf_reader = PyPDF2.PdfFileReader(pdf_file)
doc_info = pdf_reader.getDocumentInfo()
print(doc_info)
import fitz  # PyMuPDF

pdf_document = fitz.open('example.pdf')
# 获取第一页
page = pdf_document[0]
# 获取页面的矩形区域(像素)
pix = page.get_pixmap()
width_in_pixels = pix.width
height_in_pixels = pix.height
# 获取页面的尺寸(英寸)
width_in_inches = page.rect.width / 72  # 默认单位是points,每英寸72points
height_in_inches = page.rect.height / 72
# 计算DPI
dpi_x = width_in_pixels / width_in_inches
dpi_y = height_in_pixels / height_in_inches
# 输出DPI
print(f'DPI X: {dpi_x}, DPI Y: {dpi_y}')

精度问题造成的页面偏移可以通过使用高精度浮点数来减少误差,或者在导入PDF文件是保证DPI的数值是一致的。

确定文本的倾斜角度的方法

  1. 霍夫变换,Hough变换是一种图像处理技术,用于检测图像中的直线。通过检测文本行的直线并计算它们的角度,可以估计文本的倾斜角度。
  2. 使用最小二乘法拟合曲线,判断倾斜角度
  3. 使用投影分析找相应的角度
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值