Saltar al contenido principal

Detección de ocupación de aparcamiento basada en cámara — Selección, despliegue y datos medidos

Antes de usarla

Las plazas deben ser visibles en la imagen de la cámara: una plaza totalmente oculta por su vecina, o muy pequeña y lejana, no se evalúa de forma fiable.

Qué hace esta solución​

En lugar de un sensor magnético o ultrasónico en cada plaza, usa las cámaras IP que ya hay en el aparcamiento: cada plaza que una cámara puede ver se comprueba al mismo tiempo. Dibujas y nombras un recuadro por plaza en un navegador; el host en el edge sigue decidiendo si hay un vehículo en ella y envía el estado de cada plaza — ocupada, libre o desconocida — a tu sistema para paneles de plazas libres, guiado de aparcamiento o gestión de plazas reservadas.

  • El vídeo se queda en el sitio

    La imagen se analiza en el host en el edge en el propio sitio; solo salen de él los estados de las plazas.

  • Varios streams por host

    Un reComputer J30 Serie ejecutó 6 streams durante 620 s sin fotogramas perdidos; consulta "Rendimiento y datos medidos".

  • Dibuja tus propias plazas

    Dibuja y nombra recuadros sobre la imagen en directo en un navegador; al guardar se aplica al instante y sobrevive a un reinicio.

  • Las cámaras perdidas se detectan

    Unos 10 s después de que se caiga el stream de una cámara, sus plazas pasan a "unknown" en lugar de repetir el estado antiguo.

En un dispositivo real​

El propio editor de plazas del host en el edge: cada recuadro es una plaza, rojo para ocupada y verde para libre, con totales y la lista de plazas a la derecha.

Editor de plazas en un reComputer J30 Serie: seis plazas, cuatro ocupadas y dos libres

En la captura de pantalla P01, P02, P04 y P06 están ocupadas y P03 y P05 libres. La entrada es un fotograma fijo en bucle de un aparcamiento en superficie, no imágenes reales del sitio.

Hardware necesario​

Tres elementos en el sitio: las cámaras IP del aparcamiento, un host en el edge y un broker MQTT (por ejemplo un Mosquitto existente).

① Cámaras IP: cámaras existentes con un stream RTSP H.264; el sub‑stream es suficiente.

② Host en el edge: elige uno; un host admite varias cámaras, cada una analizada a un fotograma por segundo.

Host en el edgeMedidoElígelo cuando
reComputer J3011reComputer J30 Series (J3011)
Jetson Orin Nano, JetPack 6.2
6 streams, sin pérdidas; p50 6.5 ms por fotogramaVarias cámaras en un host; opción por defecto
reComputer J4012reComputer J40 Series (J4012)
Jetson Orin NX, JetPack 6.2
Mismo paquete que J30El host también ejecuta otros modelos
reComputer RK3588reComputer RK3588 Series
NPU integrada
Un stream; p50 36.6 ms por fotogramaEl sitio se estandariza en Rockchip
reComputer RK3576reComputer RK3576 Series
NPU integrada
Un stream a 1 fps, sin pérdidasPocas cámaras, prima el coste

En hosts RK, añade streams de uno en uno y comprueba que cada uno se siga actualizando.

El host en el edge, las cámaras y el broker MQTT comparten una LAN, y el host puede alcanzar las direcciones RTSP de las cámaras (normalmente puerto 554). El despliegue descarga el runtime y los modelos; después de eso funciona sin conexión.

Despliegue en el sitio​

1. Comprueba la vista de la cámara​

Mira hacia abajo desde lo alto

Cada plaza debe ser claramente visible y no quedar totalmente oculta por su vecina. Dibuja un recuadro por plaza: un vehículo tiene que cubrir aproximadamente un tercio del recuadro para contar como ocupada, y un recuadro grande que abarque varias plazas nunca cuenta como ocupado.

2. Instala el software: tres pasos​

Los pasos por dispositivo están en la página de diseño de referencia; esto es el esquema general.


  1. Despliega el host en el edge: introduce la dirección RTSP de cada cámara y el broker MQTT, luego despliega.
  2. Dibuja las plazas: abre el editor de plazas en el puerto 8080, elige una cámara, arrastra un rectángulo sobre una zona vacía, arrastra sus esquinas para ajustarlo, introduce el ID de la plaza (por ejemplo B1-023) y guarda.
  3. Comprueba: cuando una plaza cambia, su color en el editor la sigue y el mensaje de estado de la cámara llega por MQTT.

Interfaces​

Los estados de las plazas van por MQTT a tu broker, un topic por cámara.

  • Paneles de plazas libres / guiado: suscríbete al topic de cada cámara y suma los contadores de ocupadas, libres y desconocidas en el mensaje.
  • Plazas reservadas: dibuja las plazas de recarga de EV o de visitantes como sus propios recuadros y actúa según sus IDs de plaza.
  • Home Assistant o tu propio sistema: el mismo topic, leído por ID de plaza.
Topic / puertoContenido
MQTT <site>/parking/<camera>/slotsCada plaza bajo esta cámara (occupied / free / unknown) más los tres contadores; se envía siempre que cambie alguna plaza
HTTP 8080 /slots/editorEditor de plazas: dibujar, nombrar, estado en directo
HTTP 8099 /healthzEstado del servicio

Los estados se mantienen para que no parpadeen de un fotograma a otro: una plaza pasa a ocupada unos 3 s después de que el vehículo se estabilice y a libre unos 5 s después de que se vaya; unos 10 s después de que se caiga un stream sus plazas pasan a desconocidas.

Rendimiento y datos medidos​

Varios streams y un stream​

DispositivoEntradaResultado
reComputer J30 Series (Orin Nano)6 streams, 1 fps cada uno, 620 s0 fotogramas perdidos en cada stream, aproximadamente 1.0 fps cada uno (medido)
reComputer J30 Series (Orin Nano)Un stream0.988 fps, p50 6.5 ms por fotograma, 15 cambios de estado informados por plaza (medido)
reComputer RK3588 SeriesUn streamp50 36.6 ms por fotograma, 17 cambios de estado informados (medido)
reComputer RK3576 SeriesUn stream1.0 fps, 21 mensajes de estado de plaza recibidos, 0 fotogramas perdidos (medido)

La entrada de un solo stream alterna un fotograma fijo de un aparcamiento en superficie con fotogramas oscuros para forzar cambios ocupado/libre.

Reproducir: sensecraft-solutions/solutions/edge_parking_occupancy (paquete de despliegue) con el clip de entrada slots-occ20-empty20-400s.mp4

Stream de cámara perdido​

DispositivoResultado
reComputer RK3576 SeriesLas plazas pasaron a unknown 9.98 s después de que se detuviera el stream, unos 11 s después del último fotograma (medido)

Modelos y runtimes​

DispositivoDetección de vehículosRuntime
reComputer J30 / J40 SeriesYOLOX, 640×640, FP16TensorRT
reComputer RK3588 / RK3576 SeriesYOLOX, 640×640, INT8 (w8a8)RKNN, decodificación hardware MPP

Parámetros que afectan a la decisión (paquete de despliegue config/slots*.json):

  • slot_coverage.occupied_ratio / free_ratio: ocupada por encima de 0.3 del área del recuadro, libre por debajo de 0.2.
  • slot_coverage.hold_s / free_hold_s: un estado debe mantenerse durante 3 s / 5 s antes de cambiar.
  • unknown_after_s: las plazas pasan a estado desconocido 10 s después de que se interrumpe el flujo.

Degradación conocida​

  • Distorsión de perspectiva gran angular y oclusión: Las plazas cercanas al perímetro de las vistas de cámara gran angular sufren estiramiento de perspectiva; los vehículos de gran altura (SUV, furgonetas) en primer plano pueden bloquear las plazas traseras adyacentes. Se recomienda restringir cada cámara a ≤ 30 plazas.
  • Condiciones de invasión de línea y de contorno: Cuando un vehículo invade las líneas de las plazas, si ambas plazas caen dentro de la relación de cobertura transicional de 0.2–0.3, puede producirse un aleteo temporal del estado. Aumentar hold_s estabiliza las transiciones.
  • Reflejos en charcos y sombras dinámicas: El agua estancada después de la lluvia o las sombras dinámicas intensas de pilares/árboles pueden degradar la confianza en la detección de bordes. Debe mantenerse una iluminación funcional básica (iluminancia de superficie ≥ 30 Lux) durante la noche.

Fuentes de datos y recursos​

  • Las capturas de pantalla y los resultados de flujo único utilizan una imagen fija de un aparcamiento en superficie cuyo origen original aún está por confirmar.
  • Código del modelo de detección YOLOX: Apache-2.0.
Loading Comments...