Spaces:
Runtime error
Runtime error
Upload 3 files
Browse files- Dockerfile +29 -0
- app.py +40 -0
- 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
|