Можно ли изменить часть цвета фона изображения, когда изображение является таблицей? - PullRequest
0 голосов
/ 14 января 2019

Я использую pytesseract, pillow, cv2, чтобы распознать изображение и получить текст, присутствующий на изображении. Поскольку мой ввод представляет собой отсканированный документ PDF, я сначала преобразовал его в формат изображения (JPEG), а затем попытался извлечь текст. Я только на полпути. Входные данные являются таблицей, и заголовки не отображаются, поскольку заголовки имеют черный фон. Я также пытался получить элемент структуры, но не смог найти способ Вот что я сделал -

import cv2
import os  
import numpy as np 
import pytesseract
#import pillow 

#Since scanned PDF can't be handled by pdf2image, convert the scanned PDF into a JPEG format using the below code- 
filename = path   
from pdf2image import convert_from_path 
pages = convert_from_path(filename, 500) for page in pages:
page.save("dest", 'JPEG')


imgname = "path" 
oriimg = cv2.imread(imgname,cv2.IMREAD_COLOR) 
cv2.imshow("original image", oriimg)
cv2.waitKey(0)


#img = cv2.resize(oriimg,None,fx=0.5,fy=0.5,interpolation=cv2.INTER_CUBIC) 
img = cv2.resize(oriimg,(700,1500),interpolation=cv2.INTER_AREA) 
#here length height  
cv2.imshow("lol", img) 
cv2.waitKey(0) 
cv2.imwrite("changed_dimensionsimgpath", img)


import PIL.Image  
image = cv2.imread(imgname,cv2.IMREAD_COLOR) 
grayedimg = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) grayedimg = 
cv2.threshold(grayedimg, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1] 
cv2.imwrite("H://newim.jpg", grayedimg)


pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files (x86)\Tesseract- 
OCR\tesseract.exe"


text = pytesseract.image_to_string(PIL.Image.open("path"))
print(text)

Моя таблица ввода выглядит как показано ниже. Области с черным фоном не распознаются OCR и не извлекаются как текст. - input table

1 Ответ

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

У меня есть 3 возможных способа анализа изображения

Расщепление Вы можете разделить изображения на две части. Первая часть - это просто ваш обычный поток (загрузка изображения, определение текста на нем). Во втором потоке вы сначала берете негатив изображения (255 - img), а затем обнаруживаете текст.

После этого необходимо объединить два результата.

разностный фильтр Сначала вы можете применить разностный фильтр / обнаружение краев, это повысит все с высокой контрастностью, НО может изменить форму букв, если сделать их экстремальными или если некоторые буквы намного больше.

поиск контура + заполнение Снова обнаружение края, но теперь очень тонкое и сопровождаемое обнаружением контура. Это перерисовает все буквы в один цвет.

...