Junior16 commited on
Commit
7988f49
1 Parent(s): 676597e

Upload 3 files

Browse files
Files changed (3) hide show
  1. Dockerfile +29 -0
  2. app.py +40 -0
  3. requirements.txt +7 -0
Dockerfile ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Usa una imagen base de Python
2
+ FROM python:3.11.0
3
+
4
+ # Establece el directorio de trabajo
5
+ WORKDIR /code
6
+
7
+ # Copia los archivos necesarios al contenedor
8
+ COPY ./requirements.txt /code/requirements.txt
9
+
10
+ # Actualiza el sistema y instala dependencias adicionales necesarias
11
+ RUN apt-get update && apt-get install -y libgl1-mesa-glx
12
+
13
+ # Instalar las dependencias listadas en requirements.txt
14
+ RUN pip install --no-cache-dir -r /code/requirements.txt
15
+
16
+ # Instalar dependencias adicionales como fastapi, uvicorn, opencv, etc.
17
+ RUN pip install fastapi uvicorn pillow opencv-python datasets
18
+
19
+ # Copiar todo el código fuente al contenedor
20
+ COPY . .
21
+
22
+ # Dar permisos adecuados a los archivos
23
+ RUN chmod -R 777 /code
24
+
25
+ # Exponer el puerto en el que se ejecutará la aplicación
26
+ EXPOSE 7860
27
+
28
+ # Comando para ejecutar la aplicación
29
+ CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860"]
app.py ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from fastapi import FastAPI, File, UploadFile
2
+ import numpy as np
3
+ from PIL import Image
4
+ import io
5
+ import cv2
6
+ from datasets import load_dataset
7
+
8
+ app = FastAPI()
9
+
10
+ # Cargar el PlantVillage dataset predefinido
11
+ dataset = load_dataset("plant_village")
12
+
13
+ # Aquí puedes entrenar un modelo o usar uno preentrenado. Para simplificar, vamos a usar el dataset solo para mostrar ejemplos.
14
+ # Por ejemplo, podemos ver algunas imágenes del dataset, pero en producción deberías tener un modelo entrenado.
15
+ train_data = dataset["train"]
16
+
17
+ @app.post("/detect_disease/")
18
+ async def detect_disease(file: UploadFile = File(...)):
19
+ # Leer imagen cargada
20
+ image_bytes = await file.read()
21
+ image = Image.open(io.BytesIO(image_bytes))
22
+ img_np = np.array(image)
23
+
24
+ # Convertir la imagen a escala de grises
25
+ gray = cv2.cvtColor(img_np, cv2.COLOR_RGB2GRAY)
26
+ edges = cv2.Canny(gray, 100, 200)
27
+
28
+ # Aquí realizarías la predicción usando tu modelo, en lugar de solo mostrar bordes.
29
+ # Simularemos un diagnóstico simple usando el promedio de los bordes para ilustrar la idea.
30
+ disease_detected = "Enfermedad detectada" if np.mean(edges) > 50 else "Saludable"
31
+
32
+ # Visualización de la primera imagen del dataset de ejemplo
33
+ example_image = train_data[0]['image'] # Imagen del dataset para ejemplo
34
+ example_label = train_data[0]['label'] # Etiqueta de la enfermedad de la imagen de ejemplo
35
+
36
+ return {
37
+ "diagnosis": disease_detected,
38
+ "example_image": example_image,
39
+ "example_label": example_label
40
+ }
requirements.txt ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ fastapi
2
+ uvicorn
3
+ opencv-python
4
+ numpy
5
+ Pillow
6
+ python-multipart
7
+ datasets