File size: 6,597 Bytes
67b82ae e0b339d 67b82ae d35e97b 67b82ae e0b339d fda1a93 e0b339d b226794 e0b339d 2e0d094 e0b339d d56556d e0b339d d56556d 93a5ed3 d56556d b226794 d56556d b226794 eabea5d d56556d eabea5d d56556d eabea5d b226794 eabea5d b226794 eabea5d b226794 d56556d eabea5d 2e0d094 d56556d eabea5d b226794 eabea5d b226794 eabea5d b226794 d9436e3 b226794 d9436e3 b226794 d9436e3 eabea5d d9436e3 eabea5d b226794 eabea5d b226794 d56556d b226794 eabea5d b226794 eabea5d d56556d 2e0d094 b226794 eabea5d b226794 eabea5d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 |
import re
import time
import tempfile
from gradio_client import Client, handle_file
async def procesaImagen(image):
try:
temp_image = await imageToTemp(image)
client = Client("BuzzwordMx/ai_ocr")
dict_recibido = client.predict(
img=handle_file(temp_image),
lang="en",
api_name="/predict"
)
#Aquí es donde personalizo el proceso:
textos_extraidos = listaTextosExtraidos(dict_recibido)
return textos_extraidos
except Exception as e:
print(f"Error al procesar el archivo: {e}")
return 'Error'
async def imageToTemp(image):
try:
with tempfile.NamedTemporaryFile(delete=False, suffix=f"_{image.filename}") as tmp_file:
contents = await image.read()
tmp_file.write(contents)
temp_file_path = tmp_file.name
print(f"Archivo temporal guardado en: {temp_file_path}")
return temp_file_path
except Exception as e:
print(f"Error al procesar la imagen: {e}")
return {"error": "Error al procesar la imagen"}
def listaTextosExtraidos(dict_recibido):
result = dict_recibido['data']
print("Datos extraídos (acceso directo):")
textos_extraidos = []
for item in result:
texto = item[1][0]
print(texto)
textos_extraidos.append(texto)
return textos_extraidos
def simplificaTextos(textos_extraidos):
textos_extraidos_simplificados = [texto.lower().replace(" ", "") for texto in textos_extraidos]
print("Textos extraídos simplificados:")
print(textos_extraidos_simplificados)
return textos_extraidos_simplificados
#Herramientas para DNI Panamá.
def buscaIndexPalabra(arreglo, palabra):
palabra_limpia = palabra.lower().replace(" ", "")
for i, texto_limpio in enumerate(arreglo):
if palabra_limpia in texto_limpio:
return i
return None # Cambiado de 'error' a None
def buscaIndexMultiplesPalabras(arreglo_textos, conceptos_requeridos):
"""
Busca el índice de la primera línea que contiene todas las palabras requeridas (o sus alternativas)
y devuelve la línea con las alternativas corregidas a su forma preferida.
Args:
arreglo (list): Lista de strings de texto extraído (limpios).
conceptos_requeridos (list): Lista de diccionarios, donde cada diccionario define un concepto:
Ej: {'preferida': 'nacimiento', 'alternativas': ['nacimento', 'nacimuento']}
Returns:
tuple: (índice, arreglo_corregido) si se encuentra, o (None, None) si no se encuentra.
"""
print(f"\n--- Entre a busqueda palabras index ---")
# Paso 1: Normalizar los conceptos y prepararlos para la búsqueda y corrección
conceptos_preparados = []
for concepto in conceptos_requeridos:
print("Preparación de conceptos, estoy en el concepto: ", concepto)
preferida = concepto['preferida'].lower().replace(" ", "")
alternativas = [alt.lower().replace(" ", "") for alt in concepto.get('alternativas', [])]
# Combinamos la preferida con las alternativas para la búsqueda
todas_las_formas = [preferida] + alternativas
print("Todas las formas quedó como: ", todas_las_formas)
conceptos_preparados.append({
'preferida': preferida,
'todas_las_formas': todas_las_formas,
})
print("Conceptos preparados quedó como: ", conceptos_preparados)
for i, texto_linea in enumerate(arreglo_textos):
texto_linea_lower = texto_linea.lower()
print("Trabajando la línea: ", texto_linea_lower)
# Variables para seguir el rastro de la línea actual
es_coincidencia_completa = False
print("La var es_coincidencia_completa empieza como false...")
palabras_encontradas_en_linea = {} # Almacena {forma_encontrada: forma_preferida}
# Paso 2: Verificar si TODAS las condiciones se cumplen en esta línea
for concepto in conceptos_preparados:
encontrado_en_esta_linea = False
print("Revisando CONCEPTO: ", concepto)
# Buscamos si alguna forma (preferida o alternativa) está en la línea
for forma in concepto['todas_las_formas']:
print("Evaluando la siguiente forma en el concepto: Forma: ", forma)
print(f"Ahora, si la forma --{forma}-- está en la línea: --{texto_linea_lower}--, entonces: ")
if forma in texto_linea_lower:
print("Encontrado línea es True!")
encontrado_en_esta_linea = True
# Guardamos qué forma se encontró y cuál es la preferida
palabras_encontradas_en_linea[forma] = concepto['preferida']
print("Estoy por hacer break porque encontré la línea...")
# Hemos encontrado una forma para este concepto, pasamos al siguiente concepto
break #Éste break entonces si se sale del for. De no hacerlo, volvería arriba.
if encontrado_en_esta_linea:
es_coincidencia_completa = True
print(f"Línea {i}: Concepto '{concepto['preferida']}' : Encontrado.")
break # Se sale del for grande.
print("Paso: if es_coincidencia_completa:")
# Paso 3: Si se encontró una coincidencia completa, corregimos la línea y la retornamos
if es_coincidencia_completa:
print("Aquí llega cuando encuentra algo, en su línea respectiva, pero cuando no encuentra nada, se queda en cero.")
print(f"ÉXITO: Coincidencia completa en el índice {i}.")
print(f"Texto linea es: {texto_linea}")
linea_corregida = texto_linea
for forma_encontrada, forma_preferida in palabras_encontradas_en_linea.items():
patron_reemplazo = re.compile(re.escape(forma_encontrada), re.IGNORECASE)
linea_corregida = patron_reemplazo.sub(forma_preferida, linea_corregida, count=1)
print(f"Línea corregida: '{linea_corregida}'")
arreglo_textos[i] = linea_corregida
return i, arreglo_textos
print("Paso: Búsqueda finalizada.:")
print(f"\n--- Búsqueda finalizada ---")
print("Ninguna línea contiene todas las palabras requeridas.")
return None, None |