#!/usr/bin/env python # coding: utf-8 # # 1. Pre-procesamiento de datos # In[1]: import cv2 import numpy as np # In[2]: def redimensionar(imagenes,tamano): imagenes_ajustadas = [] for imagen in imagenes: imagen_temporal = cv2.resize (imagen,tamano) imagenes_ajustadas.append(imagen_temporal) return imagenes_ajustadas # In[3]: def contraste(imagenes, valor_contraste): imagenes_ajustadas = [] for imagen in imagenes: imagen_temporal = np.clip(imagen*valor_contraste,0,255) imagenes_ajustadas.append(imagen_temporal) return imagenes_ajustadas # In[4]: def rasgos(imagenes,width): imagenes_ajustadas = [] for imagen in imagenes: img = imagen img = cv2.resize(img, (width,int(width*img.shape[0]/img.shape[1]))) c = cv2.dft(np.float32(img), flags = cv2.DFT_COMPLEX_OUTPUT) mag = np.sqrt(c[:,:,0]**2 + c[:,:,1]**2) spectralResidual = np.exp(np.log(mag) - cv2.boxFilter(np.log(mag), -1, (3,3))) c[:,:,0] = c[:,:,0] * spectralResidual / mag c[:,:,1] = c[:,:,1] * spectralResidual / mag c = cv2.dft(c, flags = (cv2.DFT_INVERSE | cv2.DFT_SCALE)) mag = c[:,:,0]**2 + c[:,:,1]**2 cv2.normalize(cv2.GaussianBlur(mag,(9,9),3,3), mag, 0., 1., cv2.NORM_MINMAX) imagenes_ajustadas.append(mag) return imagenes_ajustadas # In[130]: import gradio as gr import tensorflow as tf from tensorflow import keras from tensorflow.keras import models modelo1 = tf.keras.models.load_model('modeloIA_1.h5') modelo2 = tf.keras.models.load_model('modeloIA_2.h5') modelo3 = tf.keras.models.load_model('modeloIA_3.h5') modelo4 = tf.keras.models.load_model('modeloIA_4.h5') modelo1v = tf.keras.models.load_model('modeloIA_1v.h5') modelo2v = tf.keras.models.load_model('modeloIA_2v.h5') modelo3v = tf.keras.models.load_model('modeloIA_3v.h5') modelo4v = tf.keras.models.load_model('modeloIA_4v.h5') # In[131]: def ejecutar_modelo(imagen_app): imagen_app = cv2.cvtColor (imagen_app,cv2.COLOR_BGR2GRAY) imagenes_app = [] imagenes_app.append(imagen_app) imagen_temporal = rasgos (imagenes_app, 128) imagen_temporal = redimensionar(imagen_temporal,(256,256)) imagen_temporal = contraste(imagen_temporal,0.4) imagen_temporal = np.expand_dims(imagen_temporal, axis=3) resultado1 = modelo1.predict(imagen_temporal) resultado1 = int (np.argmax (resultado1, axis=1)) resultado2 = modelo2.predict(imagen_temporal) resultado2 = int (np.argmax (resultado2, axis=1)) resultado3 = modelo3.predict(imagen_temporal) resultado3 = int (np.argmax (resultado3, axis=1)) resultado4 = modelo4.predict(imagen_temporal) resultado4 = int (np.argmax (resultado4, axis=1)) clase1 = ['armonia', 'ausencia', 'contraste', 'ninguno'] clase2 =['ausencia', 'fragmentacion', 'ninguno', 'unidad'] clase3 = ['ausencia', 'equilibrio', 'inestabilidad', 'ninguno'] clase4 = ['agudeza', 'ausencia', 'difusividad', 'ninguno'] valor1 = '' if clase1[resultado1] != 'ausencia' and clase1[resultado1] != 'ninguno': valor1 = ': ' + str(int(np.clip(np.round(modelo1v.predict(imagen_temporal) + 1)[0][0],1,5))) valor2 = '' if clase2[resultado2] != 'ausencia' and clase2[resultado2] != 'ninguno': valor2 = ': ' + str(int(np.clip(np.round(modelo2v.predict(imagen_temporal) + 1)[0][0],1,5))) valor3 = '' if clase3[resultado3] != 'ausencia' and clase3[resultado3] != 'ninguno': valor3 = ': ' + str(int(np.clip(np.round(modelo3v.predict(imagen_temporal) + 1)[0][0],1,5))) valor4 = '' if clase4[resultado4] != 'ausencia' and clase4[resultado4] != 'ninguno': valor4 = ': ' + str(int(np.clip(np.round(modelo4v.predict(imagen_temporal) + 1)[0][0],1,5))) return clase1[resultado1] + valor1, clase3[resultado3] + valor3, clase2[resultado2] + valor2, clase4[resultado4] + valor4 # In[132]: from gradio.themes.base import Base from gradio.themes.utils import colors, fonts, sizes theme1 = gr.themes.Base( primary_hue = "emerald", secondary_hue = "blue", neutral_hue = "blue", text_size = gr.themes.Size(xs='10px', sm='12px', md='14px', lg='16px', xl='22px', xxl='16px',xxs='9px'), font = [gr.themes.GoogleFont('Supreme'), 'ui-sans-serif', 'system-ui', 'sans-serif'], ) theme1.set( body_background_fill = "#EDEFF0", background_fill_primary = "#FFFFFF50", background_fill_secondary = "#EDEFF000", #background_fill_secondary = "#EDEFF0", #azul omar #415DA1 body_text_size='12px', button_primary_background_fill = "#3E67B7", button_border_width = '*block_label_border_width', button_primary_border_color = "#52A6AA", button_primary_text_color = "#FFFFFF", button_primary_background_fill_hover = "linear-gradient(90deg,#52A6AA,#3E67B7)", button_primary_text_color_hover = "#FFFFFF", button_secondary_background_fill = "#BDE0F9", button_secondary_background_fill_hover = "#EDEFF0", button_secondary_text_color_hover = "#4888D8", block_border_width = "1.5px", block_border_color = "#3E67B7", block_radius = "0", block_label_text_size = '12px', input_text_size = '5px', panel_border_color = "#EDEFF0", ) gui = gr.Interface ( theme = theme1, fn = ejecutar_modelo, inputs = gr.Image (label='Imagen'), outputs = [gr.Label(label='Contraste o armonía:',elem_id = 'labelitem'), gr.Label(label='Inestabilidad o equilibrio:'), gr.Label(label='Fragmentación o unidad:'), gr.Label(label='Difusividad o agudeza:')], #title ='Evaluador de imágenes usando IA', ) gui.launch(inbrowser = True) # In[ ]: