#!/usr/bin/env python3 """Script de prueba para verificar que OCR funciona correctamente.""" import sys import os def test_imports(): """Verificar que todas las librerías necesarias están instaladas.""" print("🔍 Verificando imports...") try: import pytesseract print(" ✓ pytesseract") except ImportError as e: print(f" ✗ pytesseract: {e}") return False try: from PIL import Image print(" ✓ Pillow (PIL)") except ImportError as e: print(f" ✗ Pillow: {e}") return False try: from pdf2image import convert_from_bytes print(" ✓ pdf2image") except ImportError as e: print(f" ✗ pdf2image: {e}") return False try: import fitz print(" ✓ PyMuPDF") except ImportError as e: print(f" ✗ PyMuPDF: {e}") return False return True def test_tesseract(): """Verificar que Tesseract está instalado y accesible.""" print("\n🔍 Verificando Tesseract...") try: import pytesseract version = pytesseract.get_tesseract_version() print(f" ✓ Tesseract versión: {version}") return True except Exception as e: print(f" ✗ Error: {e}") print(" → Asegúrate de que Tesseract esté instalado y en el PATH") return False def test_languages(): """Verificar idiomas disponibles.""" print("\n🔍 Verificando idiomas disponibles...") try: import pytesseract langs = pytesseract.get_languages() print(f" Idiomas instalados: {', '.join(langs)}") if 'spa' in langs: print(" ✓ Español (spa) disponible") else: print(" ✗ Español (spa) NO disponible") print(" → Reinstala Tesseract con el paquete de idioma español") return False return True except Exception as e: print(f" ✗ Error: {e}") return False def test_poppler(): """Verificar que poppler está disponible.""" print("\n🔍 Verificando poppler...") try: from pdf2image import convert_from_bytes # Intentar convertir un PDF simple (1x1 pixel blanco) # Este es un PDF mínimo válido en base64 import base64 minimal_pdf = base64.b64decode( "JVBERi0xLjEKJeLjz9MKMSAwIG9iaiAKPDwgL1R5cGUgL0NhdGFsb2cgL1BhZ2VzIDIgMCBSID4+" "CmVuZG9iaiAKMiAwIG9iaiAKPDwgL1R5cGUgL1BhZ2VzIC9LaWRzIFszIDAgUl0gL0NvdW50IDEK" "L01lZGlhQm94IFswIDAgMzAwIDE0NF0gPj4KZW5kb2JqIAozIDAgb2JqIAo8PCAvVHlwZSAvUGFn" "ZSAvUGFyZW50IDIgMCBSIC9SZXNvdXJjZXMgPDwgL0ZvbnQgPDwgL0YxIDQgMCBSID4+ID4+IC9D" "b250ZW50cyA1IDAgUiA+PgplbmRvYmogCjQgMCBvYmogCjw8IC9UeXBlIC9Gb250IC9TdWJ0eXBl" "IC9UeXBlMSAvQmFzZUZvbnQgL1RpbWVzLVJvbWFuID4+CmVuZG9iaiAKNSAwIG9iaiAKPDwgL0xl" "bmd0aCA0NCA+PgpzdHJlYW0KQlQKNzAgNTAgVGQKL0YxIDEyIFRmCihIZWxsbykgVGoKRVQKZW5k" "c3RyZWFtCmVuZG9iaiAKeHJlZgowIDYKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDAwMDEwIDAw" "MDAwIG4gCjAwMDAwMDAwNzkgMDAwMDAgbiAKMDAwMDAwMDE3MyAwMDAwMCBuIAowMDAwMDAwMzAx" "IDAwMDAwIG4gCjAwMDAwMDAzODAgMDAwMDAgbiAKdHJhaWxlcgo8PCAvU2l6ZSA2IC9Sb290IDAg" "MCBSID4+CnN0YXJ0eHJlZgo0OTEKJSVFT0YK" ) images = convert_from_bytes(minimal_pdf, dpi=72) print(f" ✓ poppler funciona correctamente") print(f" → Convertido PDF a {len(images)} imagen(es)") return True except Exception as e: print(f" ✗ Error: {e}") print(" → Instala poppler y agrégalo al PATH del sistema") return False def test_ocr_simple(): """Realizar una prueba simple de OCR.""" print("\n🔍 Realizando prueba de OCR...") try: import pytesseract from PIL import Image, ImageDraw, ImageFont # Crear una imagen simple con texto img = Image.new('RGB', (300, 100), color='white') draw = ImageDraw.Draw(img) # Dibujar texto simple draw.text((10, 40), "Hola Mundo", fill='black') # Intentar OCR text = pytesseract.image_to_string(img, lang='spa') print(f" Texto detectado: '{text.strip()}'") if text.strip(): print(" ✓ OCR funciona correctamente") return True else: print(" ⚠ OCR no detectó texto (esto puede ser normal con fuentes simples)") return True except Exception as e: print(f" ✗ Error en OCR: {e}") return False def test_service_import(): """Verificar que el servicio OCR se puede importar.""" print("\n🔍 Verificando servicio OCR del proyecto...") try: # Agregar el directorio del proyecto al path si no está project_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) if project_dir not in sys.path: sys.path.insert(0, project_dir) from app.services.ocr_service import extract_text_with_ocr, is_pdf_scanned print(" ✓ Servicio OCR importado correctamente") from app.services.pdf_text import extract_text_from_pdf print(" ✓ Servicio PDF importado correctamente") return True except Exception as e: print(f" ✗ Error: {e}") return False def main(): """Ejecutar todas las pruebas.""" print("=" * 50) print("🧪 Prueba de Configuración OCR") print("=" * 50) results = { "Imports": test_imports(), "Tesseract": test_tesseract(), "Idiomas": test_languages(), "Poppler": test_poppler(), "OCR Simple": test_ocr_simple(), "Servicios": test_service_import() } print("\n" + "=" * 50) print("📊 Resumen") print("=" * 50) for test_name, result in results.items(): status = "✓" if result else "✗" print(f"{status} {test_name}") all_passed = all(results.values()) print("\n" + "=" * 50) if all_passed: print("🎉 ¡Todas las pruebas pasaron exitosamente!") print("Tu sistema está listo para usar OCR.") else: print("⚠️ Algunas pruebas fallaron.") print("Revisa los errores arriba y consulta OCR_SETUP.md") print("=" * 50) return 0 if all_passed else 1 if __name__ == "__main__": sys.exit(main())