Untitled

mail@pastecode.io avatar
unknown
python
2 months ago
3.3 kB
2
Indexable
Never
!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)




Leave a Comment