Извлечение выделенного текста с помощью ограничительной рамки из изображения - PullRequest
0 голосов
/ 04 июня 2019

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 голосов
/ 20 июня 2019

Вы можете использовать этот код, чтобы получить пользовательский текст из изображения и соответственно изменить и изменить и это также сохранить ваш текст в текстовый файл

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)
0 голосов
/ 05 июня 2019

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

Итак, у вас есть ограничивающая рамка.Затем попробуйте определить текст на сегментированном кадрированном изображении.Какую бы сторону вы ни хотели

...