如何自适应地将图像分成多个区域并为每个图像设置不同的文本方向?

时间:2019-05-17 08:09:29

标签: python-3.x opencv image-processing ocr tesseract

输入样本

Input-Sample

我正在尝试对图像进行预处理,以提高ocr的质量。但是,我遇到了一个问题。 我要处理的图像在同一图像内包含不同的文本方向(两页,第一页为垂直,第二页为水平,然后将它们扫描到同一图像。

自动检测到第一部分的文本方向。但是,其他页面上的其余文本完全被遗漏了。 我当时想创建一个区域模板来检测感兴趣的区域,但我不知道如何。 或自动检测边界并自适应地分割图像,然后翻转分割的部分以获得所需的结果。
我可以基于固定的像素高度设置拆分,但它也不是恒定的。

from tesserocr import PyTessBaseAPI, RIL
import cv2
from PIL import Image
with PyTessBaseAPI() as api:
    filePath = r'sample.jpg'
img = Image.open(filePath)
api.SetImage(img)
boxes = api.GetComponentImages(RIL.TEXTLINE, True)
print('Found {} textline image components.'.format(len(boxes)))
for i, (im, box, _, _) in enumerate(boxes):
    # im is a PIL image object
    # box is a dict with x, y, w and h keys
    api.SetRectangle(box['x'], box['y'], box['w'], box['h'])
    ocrResult = api.GetUTF8Text()
    conf = api.MeanTextConf()
    for box in boxes:
     box = boxes[0][1]
     x = box.get('x')
     y = box.get('y')
     h = box.get('h')
     w = box.get('w')
     cimg = cv2.imread(filePath)
     crop_img = cimg[y:y+h, x:x+w]
     cv2.imshow("cropped", crop_img)
     cv2.waitKey(0)

output image 如您所见,我可以应用方向检测,但是我会从此类图像中获取任何有意义的文本。

1 个答案:

答案 0 :(得分:0)

在每个组件图像上尝试使用Tesseract API方法GetComponentImages,然后DetectOrientationScript