Spaces:
Configuration error
🏦 Analizador de Comprobantes Bancarios
📋 Descripción del Proyecto
Esta aplicación web desarrollada en Streamlit permite extraer información específica de comprobantes bancarios utilizando Amazon Textract, un servicio de AWS especializado en extracción de texto y análisis de documentos. La aplicación puede procesar imágenes de comprobantes y extraer automáticamente datos como montos, números de operación, fechas, y más información relevante.
🎯 Funcionalidades Principales
- ✅ Extracción automática de texto de comprobantes bancarios
- ✅ Análisis inteligente de formularios y tablas
- ✅ Reconocimiento de patrones específicos bancarios
- ✅ Exportación de datos extraídos en formato JSON
- ✅ Interfaz web intuitiva con vista previa de documentos
🛠️ Tecnologías Utilizadas
Librerías Principales
- Streamlit: Framework para crear aplicaciones web interactivas
- boto3: SDK oficial de AWS para Python (interacción con servicios AWS)
- PIL (Pillow): Procesamiento y manipulación de imágenes
- pandas: Manipulación y análisis de datos estructurados
- re: Expresiones regulares para extracción de patrones
Servicios AWS
- Amazon Textract: Servicio de extracción de texto y análisis de documentos
📁 Estructura del Código
1. Clase BankingReceiptAnalyzer
Propósito: Gestiona la comunicación con AWS Textract para el análisis de documentos.
Método __init__(self)
def __init__(self):
- Función: Constructor que inicializa la conexión con AWS Textract
- Consumo de librería: Utiliza
boto3.client()para crear cliente de Textract - Configuración: Lee credenciales desde
st.secrets(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_DEFAULT_REGION) - Manejo de errores: Valida credenciales y maneja excepciones de conexión
Método analyze_document_with_forms(self, image_bytes)
def analyze_document_with_forms(self, image_bytes: bytes) -> Dict[str, Any]:
- Función: Análisis avanzado de documentos con reconocimiento de formularios y tablas
- Consumo AWS: Utiliza
textract.analyze_document()con características:FORMS: Detecta pares clave-valor en formulariosTABLES: Reconoce estructuras tabulares
- Parámetros: Recibe bytes de la imagen del documento
- Retorno: Diccionario con bloques de texto estructurados o mensaje de error
Método extract_text_simple(self, image_bytes)
def extract_text_simple(self, image_bytes: bytes) -> Dict[str, Any]:
- Función: Extracción básica de texto línea por línea
- Consumo AWS: Utiliza
textract.detect_document_text()(método más simple) - Procesamiento: Filtra bloques de tipo 'LINE' para obtener texto legible
- Uso: Ideal para documentos con texto simple sin estructura compleja
2. Clase BankingDataExtractor
Propósito: Procesa el texto extraído y identifica campos específicos bancarios usando patrones.
Método extract_banking_fields(text)
@staticmethod
def extract_banking_fields(text: str) -> Dict[str, str]:
- Función: Extrae información bancaria específica usando expresiones regulares
- Consumo de librería: Utiliza
re.search()para patrones regex - Campos detectables:
- 💰 Importe enviado (S/ XXX.XX)
- 🏦 Entidad destino (nombre del banco)
- 💳 Comisión (S/ X.XX)
- 📊 ITF (Impuesto a las Transacciones Financieras)
- 🔢 Número de operación
- 📝 Tipo de operación
- 📅 Fecha y hora
- ✅ Estado de operación
Patrones de Búsqueda Ejemplo:
'importe_enviado': [
r'Importe enviado\s*S/\s*(\d+\.?\d*)',
r'S/\s*(\d+\.?\d*)',
r'Monto\s*S/\s*(\d+\.?\d*)'
]
Método _extract_account_numbers(text, fields)
@staticmethod
def _extract_account_numbers(text: str, fields: Dict[str, str]) -> None:
- Función: Identifica números de cuenta origen y destino
- Patrones: Busca formatos como "•1234", "Cuenta 123456789"
- Lógica: Asigna primera cuenta como origen y segunda como destino
Método _extract_bank_names(text, fields)
@staticmethod
def _extract_bank_names(text: str, fields: Dict[str, str]) -> None:
- Función: Detecta nombres de bancos peruanos comunes
- Bancos soportados: BBVA, Plin, BCP, Interbank, Scotiabank, BanBif
- Método: Búsqueda case-insensitive en el texto
3. Función display_extracted_banking_data(fields)
Propósito: Presenta los datos extraídos en una interfaz visual organizada.
- Consumo Streamlit: Utiliza
st.metric(),st.dataframe(),st.columns() - Funcionalidades:
- Métricas destacadas (importe, entidad, estado)
- Tabla detallada con todos los campos
- Indicadores de estado (detectado/no detectado)
- Botón de descarga en formato JSON
- Exportación: Genera archivo JSON con timestamp y estadísticas de completitud
4. Función process_banking_receipt(uploaded_file, analyzer)
Propósito: Orquesta el proceso completo de análisis de un comprobante.
- Consumo PIL: Utiliza
Image.open()para mostrar vista previa - Funcionalidades:
- Vista previa del documento subido
- Dos métodos de análisis (Tabs):
- Análisis avanzado con formularios
- Extracción simple de texto
- Procesamiento de bytes del archivo
- Manejo de errores y estados de carga
5. Función main()
Propósito: Función principal que construye la interfaz de usuario completa.
- Consumo Streamlit: Utiliza múltiples componentes:
st.title(),st.markdown(): Títulos y contenidost.sidebar: Panel lateral informativost.file_uploader(): Subida de archivosst.columns(): Layout en columnas
- Validaciones: Verifica credenciales AWS antes de continuar
- Tipos de archivo: Soporta JPG, PNG, PDF
FUNCIONAMIENTO
🧠 Dos "servicios" o capas distintas en el proceso
🔹 1. OCR con IA → Textract (extract_text_simple)
Es el servicio de reconocimiento de texto (OCR) de AWS Textract.
Detecta el texto visual en una imagen escaneada (como un comprobante bancario).
No interpreta lo que ese texto significa, solo lo reconoce y lo devuelve como líneas o palabras.
Es como un escáner con visión artificial inteligente, que ve:
"Importe enviado S/ 1250.00"
🔹 2. Servicio tipo “tag” semántico → BankingDataExtractor
Es un servicio personalizado, hecho por ti (o el desarrollador).
Usa expresiones regulares para “etiquetar” o clasificar partes del texto como:
importe_enviado,fecha,comisión, etc.
Es como un motor de reglas semánticas que dice:
Importe enviado S/ X, eso es el campoimporte_enviado.”
🧪 Definicion:
AWS Textract es como un lector que lee el contenido de una carta (OCR),
BankingDataExtractores un asistente que resalta lo importante con marcadores: el nombre del remitente, la fecha, el asunto, etc.
🧩 Diagrama:
🖼️ Imagen JPG/PDF
│
▼
🧠 AWS Textract (OCR IA)
└──▶ Texto plano
│
▼
🧾 BankingDataExtractor (Regex/tagger)
└──▶ Datos estructurados clave-valor
✅ Conclusión:
Se usan 2 servicios: uno (Textract) es como un OCR con inteligencia artificial que extrae el texto visible, y el otro (el extractor con regex) etiqueta o clasifica semánticamente ese texto para obtener información útil y estructurada.
🔧 Configuración y Uso
1. Configuración de AWS
Archivo: secrets.toml (Streamlit)
[aws]
AWS_ACCESS_KEY_ID = "tu_access_key"
AWS_SECRET_ACCESS_KEY = "tu_secret_key"
AWS_DEFAULT_REGION = "us-east-1"
2. Instalación de Dependencias
pip install streamlit boto3 pillow pandas
3. Ejecución
streamlit run app.py
📊 Flujo de Trabajo
- Carga de Documento: Usuario sube imagen del comprobante
- Procesamiento AWS: Textract extrae texto y estructura
- Análisis de Patrones: Regex identifica campos bancarios específicos
- Visualización: Streamlit muestra datos extraídos
- Exportación: Descarga opcional en JSON
🎯 Casos de Uso
- ✅ Automatización de contabilidad empresarial
- ✅ Reconciliación bancaria automatizada
- ✅ Digitalización de comprobantes físicos
- ✅ Auditorías y reportes financieros
- ✅ Integración con sistemas ERP
⚠️ Consideraciones Importantes
Limitaciones de AWS Textract
- Costo: Servicio pagado por documento procesado
- Calidad: Requiere imágenes claras y bien iluminadas
- Idioma: Optimizado para texto en español/inglés
Seguridad
- Credenciales AWS deben mantenerse seguras
- Los documentos se procesan temporalmente en AWS
- No se almacenan datos permanentemente
🚀 Mejoras Futuras
- 🔄 Procesamiento por lotes (múltiples comprobantes)
- 🤖 Machine Learning personalizado para patrones específicos
- 📱 Versión móvil optimizada
- 🔐 Autenticación de usuarios
- 📈 Dashboard de estadísticas
📞 Soporte
Para consultas técnicas o mejoras al código, contactar al desarrollador: @JoseJeampierJaraSalas1997
Nota: Este proyecto utiliza Amazon Textract, no Amazon Rekognition. Textract está especializado en extracción de texto y análisis de documentos, mientras que Rekognition se enfoca en reconocimiento de imágenes, caras y objetos.