通过边框从图像中提取所选文本

时间:2019-06-04 10:34:24

标签: python opencv ocr cv2 python-tesseract

image

我正在尝试通过在图像上加上边框来获取选定的文本。 例如,如果仅通过边界框选择单词,并且我想获取该文本并将其转换为文本文件。 请查看我的代码并进行一些评论,以便我可以实现该功能。

到目前为止,我已经完成了将PDF文件转换为带有文本边界框的图像的操作。

import numpy as np
import csv
import io
from PIL import Image
import pytesseract
from wand.image import Image as wi
from pytesseract import Output
import cv2

pdf = wi(filename="samplecompany.pdf", resolution=100)
pdfImg = pdf.convert('jpg')
j = 1
for img in pdfImg.sequence:
    page = wi(image=img)
    page.save(filename=str(j)+".jpg")
    img1 = cv2.imread(str(j)+".jpg")

    d = pytesseract.image_to_data(img1, output_type=Output.DICT)
    n_boxes = len(d['level'])
    print(n_boxes)
    for i in range(n_boxes):
        (x, y, w, h) = (d['left'][i], d['top']
                        [i], d['width'][i], d['height'][i])
        print((x, y, w, h))
        cv2.rectangle(img1, (x, y), (x + w, y + h), (0, 255, 0), 2)

    cv2.imwrite(str(j)+".jpg", img1)

    cv2.waitKey(0)
    j += 1

此代码工作正常,我需要使用边界框位置从创建的图像中提取所需的文本

2 个答案:

答案 0 :(得分:0)

let r表示目标的边界框(x,y,w,h)。可以通过

# Crop image
Croped_image = Image[int(r[1]):int(r[1]+r[3]), int(r[0]):int(r[0]+r[2])]

所以您有了边界框。然后尝试从分割的裁剪图像中检测文本。无论您想要什么面

答案 1 :(得分:0)

  

您可以使用此代码从图像中获取自定义文本,并进行相应的更改和修改   这也将您的文本保存到文本文件

import io
import cv2
import numpy as np
import pytesseract
from PIL import Image
from pytesseract import Output
from wand.image import Image as wi
import sys


pdf = wi(filename="Resume.pdf", resolution=100)
pdfImg = pdf.convert('jpg')
j = 1
imgBlobs = []
img1= []
for img in pdfImg.sequence:
    page = wi(image=img)
    page.save(filename=str(j)+".jpg")
    img1.append(cv2.imread(str(j)+".jpg"))
    j += 1

extracted_text = []

for img2 in img1:
    d = pytesseract.image_to_data(img2, output_type=Output.DICT)
    n_boxes = len(d['level'])
    print(n_boxes)
    extracted_text.append(d['text'][9])
    (x, y, w, h) = (d['left'][9], d['top'][9], d['width'][9], d['height'][9])
    cv2.rectangle(img2, (x, y), (x + w, y + h), (0, 255, 0), 2)


    cv2.imshow('img', img2)

    print(d)


with open('Prototype.txt', 'w') as filehandle:
        for listitem in extracted_text:
            filehandle.write('%s\n' % listitem)