← Volver al blog

Construye un detector de plazas de aparcamiento con visión artificial | Parte 2

Despliega el modelo de machine learning. Publicado originalmente en The Deep Hub.

Modelo de detección de plazas construido en la parte 1 Modelo de detección de plazas construido en la parte 1 | Fuente

Parte 1: crear el modelo de machine learning.

Para poner un modelo de ML en producción podemos seguir varias rutas. En este artículo veremos cómo contenedorizar el programa y alojarlo en la nube para que pueda ejecutarse continuamente e interactuar con otros sistemas.

¿Qué significa hosting?

Hosting es almacenar y servir aplicaciones, webs o servicios desde uno o varios servidores, haciéndolos accesibles por Internet o una red privada.

Una opción popular para alojar un modelo es usar proveedores de servicios cloud.

Proveedores cloud

Los proveedores cloud ofrecen servidores, almacenamiento, bases de datos, redes, software, analítica e inteligencia a través de Internet.

Los más conocidos son:

En este proyecto usaremos Azure.

Un programa almacenado en tu ordenador solo estará disponible mientras lo uses. Además, un equipo personal tiene CPU, memoria y almacenamiento limitados; mantener un servidor 24/7 requiere electricidad, conexión y mantenimiento.

Los proveedores cloud aplican normalmente pago por uso.

Hosting tradicional frente a cloud Hosting tradicional frente a cloud | Fuente

Contenedores

Los contenedores son paquetes ejecutables ligeros que incluyen código, entorno de ejecución, herramientas de sistema, librerías y configuración.

Al empaquetar aplicación y dependencias juntas, se asegura que funcione igual en el portátil, pruebas o producción. Así se evita el típico problema de «en mi máquina funciona».

Contenedor frente a máquina virtual Contenedor frente a máquina virtual | Fuente

Docker y Kubernetes son tecnologías conocidas; aquí utilizaremos Docker.

Contenedorizar no es obligatorio, pero aporta:

  • Consistencia.
  • Portabilidad.
  • Aislamiento.
  • Integración con CI/CD.

Docker

Docker simplifica desarrollar, distribuir y ejecutar aplicaciones con contenedores.

Componentes principales:

  • Docker Engine: runtime y herramientas que gestionan contenedores e imágenes.
  • Imágenes: plantillas de solo lectura con código y dependencias.
  • Contenedores: instancias ejecutables de imágenes, aisladas aunque comparten kernel con el host.
  • Dockerfile: documento de instrucciones para construir una imagen.
  • Docker Hub: registro cloud para compartir imágenes.

Componentes principales de Docker Componentes principales de Docker | Fuente

El flujo es: crear Dockerfile, construir imagen con Docker CLI, ejecutar un contenedor y, si procede, publicar la imagen en un registro.

Dockerfile → imagen → contenedor Dockerfile → imagen → contenedor | Fuente

Contenedorizar el modelo

1. Instalar Docker

Instala Docker desde su sitio oficial.

2. Preparar la aplicación

Coloca Dockerfile, app.py y requirements.txt en la raíz del proyecto.

requirements.txt contiene las dependencias:

tensorflow==2.15.0
opencv-python==4.9.0.80
numpy==1.26.4

3. Crear Dockerfile

FROM python:3.8-slim

RUN apt-get update && apt-get install -y libopencv-dev

WORKDIR /app
COPY . /app

RUN pip install --no-cache-dir -r requirements.txt

EXPOSE 5000
CMD ["python", "app.py"]

Este archivo parte de Python 3.8, instala las bibliotecas de sistema de OpenCV, establece /app como directorio de trabajo, copia el código, instala dependencias, expone el puerto 5000 y arranca la aplicación.

4. Construir la imagen

Desde el directorio del Dockerfile:

docker build -t myapp .

5. Ejecutar el contenedor

docker run -p 5000:5000 myapp

La opción -p enlaza el puerto 5000 del contenedor con el 5000 del equipo. Con el contenedor activo, la aplicación estará disponible en http://localhost:5000.

Integración con Azure

Dos opciones frecuentes en Azure son Azure Container Instances (ACI) y Azure Kubernetes Service (AKS).

ACI es más sencilla; AKS está indicada para aplicaciones más complejas integradas con Kubernetes. Usaremos ACI.

Azure Container Registry

ACR es un registro gestionado de imágenes Docker. Guardaremos ahí la imagen para desplegarla desde ACI.

Necesitas la imagen preparada y Azure CLI.

Pasos:

# Iniciar sesión
az login

# Crear registro
az acr create --resource-group myResourceGroup --name myregistry --sku Basic --admin-enabled true

# Iniciar sesión en el registro
az acr login --name myregistry

# Etiquetar y publicar la imagen
docker tag myapp:latest myregistry.azurecr.io/yourappname:latest
docker push myregistry.azurecr.io/yourappname:latest

Después se crea una instancia de contenedor:

az container create   --resource-group myResourceGroup   --name mycontainerinstance   --image myregistry.azurecr.io/yourappname:latest   --cpu 1 --memory 1   --registry-login-server myregistry.azurecr.io   --registry-username <acr-username>   --registry-password <acr-password>   --dns-name-label myappname-dns   --ports 5000

Sustituye los valores de registro y credenciales; no incluyas secretos en código ni documentación publicada. Ajusta CPU, memoria y puertos según tu aplicación.

¿Qué sigue?

Con el modelo contenedorizado y alojado puedes:

  • Crear una aplicación que muestre ocupación de aparcamiento en tiempo real.
  • Ofrecer vigilancia para detectar actividades inusuales o estacionamiento no autorizado.
  • Colaborar con GPS y navegación para ofrecer datos de parking en tiempo real.
  • Analizar uso, horas punta y comportamiento de usuarios.

Bibliografía

¡Gracias por leer! Si te ha gustado el artículo, puedes dejar hasta 50 aplausos y seguirme en Medium para estar al día de las próximas publicaciones.