Post

Replies

Boosts

Views

Activity

OCR using automator
OCR using automator How to make it more efficient and better? im using grok, to do it #!/usr/bin/env python3 import os import sys import subprocess import glob import re import easyocr import cv2 import numpy as np Verificar argumentos if len(sys.argv) < 2: print("Uso: python3 ocr_global.py <ruta_del_pdf> [carpeta_de_salida]") sys.exit(1) Obtener la ruta del PDF y la carpeta de salida pdf_path = sys.argv[1] output_folder = sys.argv[2] if len(sys.argv) > 2 else os.path.dirname(pdf_path) basename = os.path.splitext(os.path.basename(pdf_path))[0] output_prefix = os.path.join(output_folder, f"{basename}_ocr") Crear la carpeta de salida si no existe os.makedirs(output_folder, exist_ok=True) try: # Generar TIFFs *** pdftoppm, forzando numeración a 300 DPI result = subprocess.run( ["/usr/local/bin/pdftoppm", "-r", "300", "-tiff", "-forcenum", pdf_path, output_prefix], check=True, capture_output=True, text=True ) print("TIFFs generados:", result.stdout) if result.stderr: print("Advertencias/errores de pdftoppm:", result.stderr) # Buscar todos los TIFFs generados dinámicamente (prueba .tif y .tiff) tiff_pattern = f"{output_prefix}-*.tif" # Prioriza .tif basado en tu ejemplo tiff_files = glob.glob(tiff_pattern) if not tiff_files: tiff_pattern = f"{output_prefix}-*.tiff" # Intenta *** .tiff si no hay .tif tiff_files = glob.glob(tiff_pattern) if not tiff_files: print("Archivos encontrados para depuración:", glob.glob(f"{output_prefix}*")) raise FileNotFoundError(f"No se encontraron TIFFs en {tiff_pattern}") # Ordenar por número tiff_files.sort(key=lambda x: int(re.search(r'-(\d+)', x).group(1))) # Procesamiento de OCR *** EasyOCR para todos los TIFFs reader = easyocr.Reader(['es']) # 'es' para español, ajusta según idioma ocr_output_text = os.path.join(output_folder, "out.text") with open(ocr_output_text, 'a', encoding='utf-8') as f: f.write(f"\n=== Inicio de documento: {pdf_path} ===\n") for i, tiff_path in enumerate(tiff_files, 1): tiff_base = os.path.basename(tiff_path) print(f"--- Documento: {tiff_base} | Página: {i} ---") f.write(f"--- Documento: {tiff_base} | Página: {i} ---\n") # Leer y preprocesar la imagen img = cv2.imread(tiff_path, 0) if img is None: raise ValueError("No se pudo leer la imagen") _, thresh = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) # Extraer texto *** EasyOCR result = reader.readtext(thresh) ocr_text = " ".join([text for _, text, _ in result]) # Unir *** espacios print(ocr_text) f.write(ocr_text + "\n") print(f"--- Fin página {i} de {tiff_base} ---") f.write(f"--- Fin página {i} de {tiff_base} ---\n") f.write(f"=== Fin de documento: {pdf_path} ===\n") # Borrar los TIFFs generados después de OCR for tiff in tiff_files: os.remove(tiff) print("TIFFs borrados después de OCR.") except subprocess.CalledProcessError as e: print(f"Error al procesar el PDF: {e}") print("Salida de error:", e.stderr) except FileNotFoundError as e: print(f"Error: {e}") except Exception as e: print(f"Error inesperado: {e}")
0
0
18
2w