检测OCR文本图像是否倒置。

11 浏览
0 Comments

检测OCR文本图像是否倒置。

我有几百张图像(扫描文档),其中大部分都有倾斜。我想使用Python对它们进行去倾斜处理。

下面是我使用的代码:

import numpy as np
import cv2
from skimage.transform import radon
filename = '文件路径'
# 加载文件并转换为灰度图像
img = cv2.imread(filename)
I = cv2.cvtColor(img, COLOR_BGR2GRAY)
h, w = I.shape
# 如果分辨率较高,将图像调整大小以减少处理时间
if (w > 640):
    I = cv2.resize(I, (640, int((h / w) * 640)))
I = I - np.mean(I)  # 去平均值,使亮度在零上下延伸
# 进行Radon变换
sinogram = radon(I)
# 计算每行的RMS值,并找到“最繁忙”的旋转角度,
# 即变换与交替的深色文本和白线完全对齐的角度
r = np.array([np.sqrt(np.mean(np.abs(line) ** 2)) for line in sinogram.transpose()])
rotation = np.argmax(r)
print('旋转角度:{:.2f}度'.format(90 - rotation))
# 旋转并以原始分辨率保存
M = cv2.getRotationMatrix2D((w/2, h/2), 90 - rotation, 1)
dst = cv2.warpAffine(img, M, (w, h))
cv2.imwrite('rotated.jpg', dst)

这段代码对大多数文档都能很好地工作,除了某些角度:(180和0)以及(90和270)经常被检测为相同的角度(即无法区分(180和0)和(90和270))。因此,我得到了很多颠倒的文档。

以下是一个示例:

[图片链接](https://i.stack.imgur.com/Eyf0N.jpg)

我得到的结果图像与输入图像相同。

是否有任何建议使用Opencv和Python来检测图像是否颠倒?

附注:我尝试使用EXIF数据来检查方向,但没有找到解决方案。


编辑:

可以使用Tesseract(Python中的pytesseract)来检测方向,但仅适用于图像包含大量字符的情况。

对于可能需要此功能的任何人:

import cv2
import pytesseract
print(pytesseract.image_to_osd(cv2.imread(file_name)))

如果文档包含足够的字符,Tesseract可以检测到方向。然而,当图像只有少量线条时,Tesseract提供的方向角度通常是错误的。因此,这不能是一个百分之百的解决方案。

0