NatalyL18 commited on
Commit
7afeb92
1 Parent(s): e4a87ed
Files changed (3) hide show
  1. app.py +63 -0
  2. modeloDEM.h5 +3 -0
  3. requirements.txt +1 -0
app.py ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #Importar librerías.
2
+ import streamlit as st
3
+ import tensorflow as tf
4
+ import numpy as np
5
+
6
+ #Definir los nombres de las clases en un arreglo.
7
+ names = ['Corn__Common_rust','Corn__Northern_Leaf_Blight','Corn__healthy']
8
+
9
+ #Función de predicción que toma como parámetro una imagen, y devuelve la predicción.
10
+ def model_prediction(test_image):
11
+ #Cargar el modelo previamente entrenado utilizando TensorFlow/Keras.
12
+ model = tf.keras.models.load_model("modeloDEM.h5")
13
+ #Carga una imagen de prueba y la redimensiona a un tamaño específico de 128x128 píxeles.
14
+ image = tf.keras.preprocessing.image.load_img(test_image,target_size=(128,128))
15
+ #Convierte la imagen cargada en una matriz.
16
+ input_arr = tf.keras.preprocessing.image.img_to_array(image)
17
+ #Agrega una dimensión adicional que representa el tamaño del lote (batch).
18
+ input_arr = np.array([input_arr])
19
+ #Utiliza el modelo cargado para realizar predicciones.
20
+ predictions = model.predict(input_arr)
21
+ #Retorna el índice de la clase con mayor probabilidad y las probabilidades para cada clase.
22
+ return np.argmax(predictions), predictions
23
+
24
+ #Barra lateral donde el usuario puede seleccionar entre dos páginas: "Acerca del proyecto" y "Predicción".
25
+ app_mode = st.sidebar.selectbox("Seleccione una página",["Acerca del proyecto","Predicción"])
26
+
27
+ #Página de la aplicación web que muestra información sobre el proyecto, si el valor de la variable app_mode es igual a "Acerca del proyecto".
28
+ if(app_mode=="Acerca del proyecto"):
29
+ st.header("Acerca del proyecto: Detectar enfermedades del maíz")
30
+ st.write("Aplicación web que predice si la hoja de una planta de maíz está sana o si tiene la roya común o el tizón foliar del norte.")
31
+ st.subheader("Dataset")
32
+ st.write("El conjunto de datos contiene imágenes de las hojas de cultivos de maíz sanas y enfermas clasificadas en 3 clases:")
33
+ st.code("Corn__Common_rust, Corn__Northern_Leaf_Blight, Corn__healthy")
34
+ st.subheader("Contenido")
35
+ st.write("El dataset utilizado está dividido en tres carpetas:")
36
+ st.markdown("**:red[1.]** train (2400 imágenes)")
37
+ st.markdown("**:red[2.]** valid (400 imágenes)")
38
+ st.markdown("**:red[3.]** test (400 imágenes)")
39
+
40
+
41
+ #Página que permite a los usuarios cargar una imagen y realizar predicciones, si el valor de la variable app_mode es igual a "Predicción".
42
+ elif(app_mode=="Predicción"):
43
+ st.header("Detectar enfermedades del maíz")
44
+ #Muestra un componente para cargar imágenes en la aplicación web en formato PNG, JPG o JPEG.
45
+ test_image = st.file_uploader("Carga una imagen:", type=["png", "jpg", "jpeg"])
46
+ #Verifica si se ha cargado una imagen.
47
+ if test_image is not None:
48
+ #Muestra la imagen cargada en su tamaño original, con la leyenda indicada en el parámetro caption
49
+ st.image(test_image, caption="Imagen de la hoja del maíz", use_column_width=False)
50
+ #st.image(test_image, caption="Imagen de la hoja del maíz", use_column_width=True)
51
+
52
+ #Verifica si se ha hecho clic en el botón "Predecir".
53
+ if(st.button("Predecir")):
54
+ #Realiza una predicción, que se espera que devuelva el índice de la clase predicha y las probabilidades para cada clase.
55
+ result_index,predictions = model_prediction(test_image)
56
+ #Muestra un mensaje que indica la clase predicha basada en el índice devuelto por la función de predicción.
57
+ st.success("La predicción indica: {}".format(names[result_index]))
58
+ #Muestra la probabilidad de que la imagen pertenezca a la clase "Corn__Common_rust"
59
+ st.markdown("La probabilidad de que pertenezca a la clase **Corn__Common_rust** es: %s" %float(predictions[0][0]))
60
+ #Muestra la probabilidad de que la imagen pertenezca a la clase "Corn__Northern_Leaf_Blight"
61
+ st.markdown("La probabilidad de que pertenezca a la clase **Corn__Northern_Leaf_Blight** es: %s" %float(predictions[0][1]))
62
+ #Muestra la probabilidad de que la imagen pertenezca a la clase "Corn__healthy"
63
+ st.markdown("La probabilidad de que pertenezca a la clase **Corn__healthy** es: %s" %float(predictions[0][2]))
modeloDEM.h5 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:13ca515f56b45e05a364cdff236d49e55c7bc9f571585204bac73c40875d2973
3
+ size 93602760
requirements.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ tensorflow==2.15.0