Untitled
import cv2 import numpy as np from PIL import Image as PILImage from pdf2image import convert_from_path def correct_skew(image): # Преобразование в оттенки серого gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # Обнаружение границ edges = cv2.Canny(gray, 50, 150, apertureSize=3) # Использование преобразования Хафа для обнаружения линий lines = cv2.HoughLines(edges, 1, np.pi/180, 100) if lines is not None: angles = [] for rho, theta in lines[:, 0]: angle = (theta - np.pi/2) * 180/np.pi angles.append(angle) # Усреднение углов median_angle = np.median(angles) # Поворот изображения для коррекции наклона (h, w) = image.shape[:2] center = (w // 2, h // 2) M = cv2.getRotationMatrix2D(center, median_angle, 1.0) corrected_img = cv2.warpAffine(image, M, (w, h), flags=cv2.INTER_CUBIC, borderMode=cv2.BORDER_REPLICATE) return corrected_img else: return image # Текущий путь cur_path = pathlib.Path().resolve() # Путь к PDF файлу name = 'Доп_соглашение_о_мин_объеме_ТМС_от_01_10_2022' img_path = f'{cur_path}/{name}.pdf' # Конвертация PDF в изображения pages = convert_from_path(img_path) # Обработка первой страницы if pages: page_image = np.array(pages[0]) # Преобразование PIL Image в NumPy array corrected_image = correct_skew(page_image) # Коррекция наклона # Сохранение откорректированной первой страницы corrected_image_pil = PILImage.fromarray(corrected_image) corrected_image_pil.save(f'{name}_1st_page_corrected.jpg', 'JPEG') # ... Продолжение обработки изображения для извлечения таблиц и дальнейшего анализа ...
Leave a Comment