|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import cv2 |
|
import numpy as np |
|
|
|
|
|
|
|
|
|
|
|
def redimensionar(imagenes,tamano): |
|
imagenes_ajustadas = [] |
|
for imagen in imagenes: |
|
imagen_temporal = cv2.resize (imagen,tamano) |
|
imagenes_ajustadas.append(imagen_temporal) |
|
return imagenes_ajustadas |
|
|
|
|
|
|
|
|
|
|
|
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 |
|
|
|
|
|
|
|
|
|
|
|
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 |
|
|
|
|
|
|
|
|
|
|
|
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') |
|
|
|
|
|
|
|
|
|
|
|
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'] |
|
|
|
return clase1 [resultado1], clase2 [resultado2], clase3 [resultado3], clase4 [resultado4] |
|
|
|
|
|
|
|
|
|
|
|
gui = gr.Interface ( |
|
fn = ejecutar_modelo, |
|
inputs = gr.Image (), |
|
outputs = ["text", "text", "text", "text"], |
|
title ='Evaluador de imagenes usando IA', |
|
) |
|
|
|
gui.launch(inbrowser = True) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|