TEVIS / app.py
oomarsaldivar's picture
Update app.py
e92c63e
#!/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[ ]: