Я хочу определить координаты заполняемых PDF-форм, точнее координаты ограничивающего прямоугольника текстового поля, в котором будет размещено конкретное текстовое поле (String).
В настоящее время я следуя жестко запрограммированному подходу Python -Pdfminer с использованием LTTBox для определения координат на основе наличия определенной строки.
Пример:
def identifyTextboxes(path, fieldName, fieldType):
# reading the file and setting prams
fp = open(path, 'rb')
rsrcmgr = PDFResourceManager()
laparams = LAParams()
device = PDFPageAggregator(rsrcmgr, laparams=laparams)
interpreter = PDFPageInterpreter(rsrcmgr, device)
pages = PDFPage.get_pages(fp)
# defining key-terms of custodian:
names=["Name of entity:", "Name of Investor (Please Print or Type)", "Print Name of Entity", "Name of Prospective Investor ",
"Investor's Name", "Name (the “Applicant” or “We”)", "On Behalf of:", "Name of Business"]
num_pages = 0
output = []
for page in pages:
temp_dict = {}
interpreter.process_page(page)
layout = device.get_result()
num_pages += 1
# fetching the coordinates of the text via bbox
for lobj in layout:
if isinstance(lobj, LTTextBox):
(x, y, xw, yh), text = lobj.bbox, lobj.get_text()
for name in names:
ResSearch = re.search(name, text)
if ResSearch:break
field='textbox'
if ResSearch:break
if ResSearch:
temp_dict['label'] = fieldName
temp_dict['type'] = fieldType
temp_dict["value"] = ''
temp_dict['group'] = ''
temp_dict["overlay"] = {'page': num_pages, 'left': (xw)-90, 'top':((y-10)-(yh-y))+90, 'height': 20, 'width':240}
output.append(temp_dict)
print(lobj)
return output
В приведенном выше коде я обнаруживаю места, где Соответствующая строка появляется из имен списков и определяет координату текстового поля справа от внешнего вида на основе координат LTTBox и фиксированной с помощью, как вы можете видеть на возвращаемом выходе ['overlay'].
Этот процесс очень жестко запрограммирован и терпит неудачу, когда в PDF-файле возникает какая-либо неизвестная строка или ситуация, следовательно, не такой надежный. ящик через CNN / RNN / CNN + RNN. Я прошел через детектор EAST , но это, похоже, не решает проблему, поэтому, возможно, обучение более индивидуальной сети, возможно, будет более полезным.
Пожалуйста, найдите прикрепленные изображения для лучше понять, что делает текущий код.
введите описание изображения здесь
Я новичок в ML, мне нужно руководство, чтобы построить такую сеть. Любая помощь приветствуется.