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

5

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

这段代码运行良好,我需要从我创建的图像中获取所需的文本。使用边界框位置进行操作。


可以给一些图片示例吗?很难猜测你现在看到的是什么。请提供输入、您现在拥有的内容以及您想在图纸上呈现的内容。然后我们会给您答案。 - Dr Yuan Shenghai
我已经在问题部分添加了图像,请查看,我所生成的内容只想转换为文本(仅选择框中的文本)。 - Neeraj Nawariya
2个回答

3
你可以使用这段代码从图像中获取自定义文本,然后进行更改和修改,并将文本保存到文本文件中。
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)

感谢Rajeev Shankhwar。 - Neeraj Nawariya
这是为了正确获取此图像中的所有OCR文本。我认为问题是仅使用边界框获取突出显示的文本。 - Prajeesh T S
@PrajeeshTS 这就是我的代码在做什么。 你看这一行 extracted_text.append(d['text'][9]) (x, y, w, h) = (d['left'][9], d['top'][9], d['width'][9], d['height'][9]) 我传递的是硬编码值而不是 i 的范围,因此只提取了有界框文本。 - Rajeev Shankhwar
我们能否借助鼠标绘制多个矩形并提取所需信息? - Nithin Reddy

0

假设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])]

所以你有边界框。然后尝试从分割的裁剪图像中检测文本。无论哪一面是你想要的。


我们可以通过鼠标绘制多个矩形并提取所需信息吗? - Nithin Reddy
可能的话,请使用鼠标点击下事件作为边界框1的左上角初始化(x1,y1),然后释放事件作为框1的右下角(x2,y2)。重复点击事件。然后您可以执行多个操作。 - Dr Yuan Shenghai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接