Untitled
unknown
python
a year ago
3.3 kB
8
Indexable
!pip install opencv-python !pip install opencv-contrib-python !pip install opencv-python-headless==4.9.0.80 import cv2 !pip install img2table from img2table.document import Image pip install Pillow from PIL import Image as PILImage pip install pdf2image conda install -c conda-forge poppler pip install easyocr import easyocr import pathlib import pandas as pd cur_path = pathlib.Path().resolve() # текущий путь до папки cur_path name = 'Доп_соглашение_о_мин_объеме_ТМС_от_01_10_2022' # название pdf файла # name = 'ДС_о_минимальном_объеме_№1_от_01.12.2022' # name = 'ДС_тест_качество' img_path = f'{cur_path}/{name}.pdf' # расположение pdf файла img_path from pdf2image import convert_from_path pages = convert_from_path(img_path) pages for count, page in enumerate(pages): if count == 0: page.save(f'{name}_1st_page.jpg', 'JPEG') # сохраняем 1-ую страницу в текущую папку instance_path = f'{cur_path}/{name}_1st_page.jpg' img = Image(instance_path) # Extract tables extracted_tables = img.extract_tables() # Display extracted tables table_img = cv2.imread(instance_path) for table in extracted_tables: for row in table.content.values(): for cell in row: cv2.rectangle(table_img, (cell.bbox.x1, cell.bbox.y1), (cell.bbox.x2, cell.bbox.y2), (255, 0, 0), 2) PILImage.fromarray(table_img) !mkdir {cur_path}/rus_ft # создаем папку !unzip {cur_path}/rus_ft.zip -d {cur_path}/rus_ft # распаковываем архив с моделью в папку EXPERIMENT_NAME = 'rus_ft' # название эксперимента OUT_MODEL_PATH = f'{cur_path}/rus_ft' # путь до папки с моделью reader = easyocr.Reader(["ru"], # код языка распознавания (ISO 639) model_storage_directory=OUT_MODEL_PATH, user_network_directory=OUT_MODEL_PATH, recog_network=EXPERIMENT_NAME) res_table = [] # список строк со всеми значениями ячеек current_row = [] # значения ячеек текущей строки for table in extracted_tables: # цикл по всем таблицам for row in table.content.values(): # цикл по всем строкам for cell in row: # цикл по всем столбцам crop = table_img[cell.bbox.y1:cell.bbox.y2, cell.bbox.x1:cell.bbox.x2] # берем ячейку result = reader.readtext(crop) # координаты bounding boxes, распознанный текст в них и вероятность txt = "\n".join([elem[1] for elem in result]) # распознанный текст из всех bounding boxes txt_n = txt.replace('\n',' ') # распознанный текст без переноса строк current_row.append(txt_n) res_table.append(current_row) current_row = [] df = pd.DataFrame(res_table) df df.to_csv(f'{name}.csv', encoding='cp1251', header=False)
Editor is loading...
Leave a Comment