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

Я хочу выделить определенные слова / предложения на скриншоте сайта.

После создания снимка экрана я извлекаю текст, используя pytesseract и cv2. Это хорошо работает, и я могу получить текст и данные об этом.

import pytesseract
import cv2


if __name__ == "__main__":
    img = cv2.imread('test.png')
    img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    result = pytesseract.image_to_data(img, lang='eng', nice=0, output_type=pytesseract.Output.DICT)
    print(result)

Используя объект результатов, я могу найти нужные слова и предложения.

Вопрос в том, как вернуться к изображению и выделить это слово?

Стоит ли искать другие библиотеки или есть способ получить значения в пикселях, а затем выделить текст?

В идеале я хотел бы получить начальную и конечную координаты каждого слова, как это можно сделать?

1 Ответ

0 голосов
/ 10 января 2019

Вы можете использовать метод pytesseract.image_to_boxes, чтобы получить положение ограничивающего прямоугольника для каждого символа, указанного на вашем изображении. Вы также можете использовать метод, чтобы нарисовать ограничивающую рамку вокруг некоторых конкретных символов, если хотите. Ниже код рисует прямоугольники вокруг моего идентифицированного изображения.

import cv2
import pytesseract
import matplotlib.pyplot as plt

filename = 'sf.png'

# read the image and get the dimensions
img = cv2.imread(filename)
h, w, _ = img.shape # assumes color image

# run tesseract, returning the bounding boxes
boxes = pytesseract.image_to_boxes(img)use
print(pytesseract.image_to_string(img)) #print identified text

# draw the bounding boxes on the image
for b in boxes.splitlines():
    b = b.split()
    cv2.rectangle(img, ((int(b[1]), h - int(b[2]))), ((int(b[3]), h - int(b[4]))), (0, 255, 0), 2)

plt.imshow(img)

enter image description here

...