axelbm29 commited on
Commit
1ceb201
·
verified ·
1 Parent(s): 9a0bf21

Upload 5 files

Browse files
Dockerfile CHANGED
@@ -1,14 +1,12 @@
1
  # Dockerfile
2
 
3
  # Usar una imagen base oficial de Python.
4
- # 'slim' es una versión ligera, ideal para producción.
5
  FROM python:3.9-slim
6
 
7
  # Establecer el directorio de trabajo dentro del contenedor
8
  WORKDIR /app
9
 
10
  # Copiar el archivo de requerimientos primero para aprovechar el cache de Docker.
11
- # Si los requerimientos no cambian, esta capa no se reconstruirá.
12
  COPY requirements.txt .
13
 
14
  # Instalar las dependencias de Python
@@ -18,10 +16,8 @@ RUN pip install --no-cache-dir -r requirements.txt
18
  # Esto incluye app.py y tu modelo .h5
19
  COPY . .
20
 
21
- # Exponer el puerto en el que se ejecutará la aplicación.
22
- # Hugging Face Spaces espera que las apps escuchen en el puerto 7860.
23
  EXPOSE 7860
24
 
25
  # El comando para iniciar la aplicación cuando el contenedor se ejecute.
26
- # --host 0.0.0.0 es crucial para que la app sea accesible desde fuera del contenedor.
27
  CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860"]
 
1
  # Dockerfile
2
 
3
  # Usar una imagen base oficial de Python.
 
4
  FROM python:3.9-slim
5
 
6
  # Establecer el directorio de trabajo dentro del contenedor
7
  WORKDIR /app
8
 
9
  # Copiar el archivo de requerimientos primero para aprovechar el cache de Docker.
 
10
  COPY requirements.txt .
11
 
12
  # Instalar las dependencias de Python
 
16
  # Esto incluye app.py y tu modelo .h5
17
  COPY . .
18
 
19
+ # Exponer el puerto en el que se ejecutará la aplicación (7860 para Hugging Face).
 
20
  EXPOSE 7860
21
 
22
  # El comando para iniciar la aplicación cuando el contenedor se ejecute.
 
23
  CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860"]
app.py CHANGED
@@ -9,24 +9,24 @@ from tensorflow.keras.models import load_model
9
 
10
  # Inicializar la aplicación FastAPI
11
  app = FastAPI(
12
- title="API de Clasificación de TBC",
13
- description="Una API para clasificar radiografías de tórax como 'normal' o 'tbc' usando un modelo CNN.",
14
- version="1.0"
15
  )
16
 
17
  # --- Carga del Modelo ---
18
- # Cargar el modelo .h5 al iniciar la aplicación para que esté listo para las predicciones.
19
- # Esto es mucho más eficiente que cargarlo en cada solicitud.
20
  try:
21
- model = load_model('modelo_cnn_tbc.h5')
22
- print("Modelo cargado exitosamente.")
 
23
  except Exception as e:
24
  print(f"Error al cargar el modelo: {e}")
25
  model = None
26
 
27
- # Definir las constantes del modelo
28
- IMG_HEIGHT = 150
29
- IMG_WIDTH = 150
30
  CLASS_NAMES = ["normal", "tbc"]
31
 
32
  # --- Endpoints de la API ---
@@ -34,7 +34,7 @@ CLASS_NAMES = ["normal", "tbc"]
34
  @app.get("/")
35
  def read_root():
36
  """Endpoint raíz para verificar que la API está funcionando."""
37
- return {"message": "Bienvenido a la API de Clasificación de TBC. Usa el endpoint /predict/ para hacer una predicción."}
38
 
39
  @app.post("/predict/")
40
  async def predict(file: UploadFile = File(...)):
@@ -56,18 +56,18 @@ async def predict(file: UploadFile = File(...)):
56
  return JSONResponse(status_code=400, content={"error": f"Archivo inválido. No se pudo procesar la imagen: {e}"})
57
 
58
  # 3. Preprocesar la imagen para que coincida con la entrada del modelo
59
- # Redimensionar la imagen
60
  image = image.resize((IMG_WIDTH, IMG_HEIGHT))
61
  # Convertir la imagen a un array de numpy
62
  img_array = np.array(image)
63
  # Normalizar los valores de los píxeles (de 0-255 a 0-1)
64
  img_array = img_array / 255.0
65
- # Añadir una dimensión de batch (el modelo espera una forma de [1, 150, 150, 3])
66
  image_batch = np.expand_dims(img_array, axis=0)
67
 
68
  # 4. Realizar la predicción
69
  prediction = model.predict(image_batch)
70
- score = prediction[0][0] # La salida de la sigmoide
71
 
72
  # 5. Interpretar el resultado
73
  if score > 0.5:
 
9
 
10
  # Inicializar la aplicación FastAPI
11
  app = FastAPI(
12
+ title="API de Clasificación de TBC (Mejorado)",
13
+ description="Una API para clasificar radiografías de tórax como 'normal' o 'tbc' usando un modelo CNN con Transfer Learning (MobileNetV2).",
14
+ version="2.0"
15
  )
16
 
17
  # --- Carga del Modelo ---
18
+ # Cargar el modelo .h5 mejorado al iniciar la aplicación.
 
19
  try:
20
+ # Asegúrate de que el nombre del archivo coincida con el que guardaste
21
+ model = load_model('modelo_cnn_tbc_mejorado.h5')
22
+ print("Modelo mejorado cargado exitosamente.")
23
  except Exception as e:
24
  print(f"Error al cargar el modelo: {e}")
25
  model = None
26
 
27
+ # Definir las constantes del nuevo modelo
28
+ IMG_HEIGHT = 224 # <-- ¡CAMBIO IMPORTANTE!
29
+ IMG_WIDTH = 224 # <-- ¡CAMBIO IMPORTANTE!
30
  CLASS_NAMES = ["normal", "tbc"]
31
 
32
  # --- Endpoints de la API ---
 
34
  @app.get("/")
35
  def read_root():
36
  """Endpoint raíz para verificar que la API está funcionando."""
37
+ return {"message": "Bienvenido a la API de Clasificación de TBC v2.0. Usa el endpoint /predict/."}
38
 
39
  @app.post("/predict/")
40
  async def predict(file: UploadFile = File(...)):
 
56
  return JSONResponse(status_code=400, content={"error": f"Archivo inválido. No se pudo procesar la imagen: {e}"})
57
 
58
  # 3. Preprocesar la imagen para que coincida con la entrada del modelo
59
+ # Redimensionar la imagen al tamaño esperado por MobileNetV2
60
  image = image.resize((IMG_WIDTH, IMG_HEIGHT))
61
  # Convertir la imagen a un array de numpy
62
  img_array = np.array(image)
63
  # Normalizar los valores de los píxeles (de 0-255 a 0-1)
64
  img_array = img_array / 255.0
65
+ # Añadir una dimensión de batch (el modelo espera una forma de [1, 224, 224, 3])
66
  image_batch = np.expand_dims(img_array, axis=0)
67
 
68
  # 4. Realizar la predicción
69
  prediction = model.predict(image_batch)
70
+ score = prediction[0][0]
71
 
72
  # 5. Interpretar el resultado
73
  if score > 0.5:
modelo_cnn_tbc_mejorado.h5 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a40c8162063a472172d00f480684013773a74322057b39fa539b6ab313e51c4e
3
+ size 11540584
modelo_cnn_tbc_mejorado.json ADDED
The diff for this file is too large to render. See raw diff