Pular para o conteúdo principal

Detecção de Ocupação de Estacionamento Baseada em Câmera — Seleção, Implantação e Dados Medidos

Antes de usar

As vagas precisam estar visíveis na imagem da câmera: uma vaga totalmente escondida pela vaga vizinha, ou que seja muito pequena e distante, não é avaliada de forma confiável.

O que esta solução faz​

Em vez de um sensor magnético ou ultrassônico em cada vaga, use as câmeras IP que você já tem no estacionamento: todas as vagas que uma câmera consegue ver são verificadas ao mesmo tempo. Você desenha e nomeia uma caixa por vaga em um navegador; o host de borda continua decidindo se há um veículo nela e envia o estado de cada vaga — ocupada, livre ou desconhecida — para o seu sistema, para painéis de vagas livres, orientação de estacionamento ou gestão de vagas reservadas.

  • O vídeo permanece no local

    A imagem é analisada no host de borda no local; apenas os estados das vagas saem dele.

  • Vários streams por host

    Um reComputer J30 Series executou 6 streams por 620 s sem quadros perdidos; veja "Performance e dados medidos".

  • Desenhe suas próprias vagas

    Desenhe e nomeie caixas sobre a imagem ao vivo em um navegador; ao salvar, aplica-se na hora e persiste após reiniciar.

  • Câmeras perdidas aparecem

    Cerca de 10 s após a queda do stream de uma câmera, as vagas dela passam a "unknown" em vez de repetir o estado antigo.

Em um dispositivo real​

O próprio editor de vagas do host de borda: cada caixa é uma vaga, vermelha para ocupada e verde para livre, com totais e a lista de vagas à direita.

Editor de vagas em um reComputer J30 Series: seis vagas, quatro ocupadas e duas livres

Na captura de tela, P01, P02, P04 e P06 estão ocupadas e P03 e P05 livres. A entrada é um quadro estático em loop de um estacionamento de superfície, não imagens reais do local.

Hardware necessário​

Três elementos no local: as câmeras IP do estacionamento, um host de borda e um broker MQTT (por exemplo um Mosquitto existente).

① Câmeras IP: câmeras existentes com um stream RTSP H.264; o sub-stream é suficiente.

② Host de borda: escolha um; um host recebe várias câmeras, cada uma analisada a um quadro por segundo.

Host de bordaMedidoEscolha-o quando
reComputer J3011reComputer J30 Series (J3011)
Jetson Orin Nano, JetPack 6.2
6 streams, sem perdas; p50 6,5 ms por quadroVárias câmeras em um host; escolha padrão
reComputer J4012reComputer J40 Series (J4012)
Jetson Orin NX, JetPack 6.2
Mesmo pacote que o J30O host também executa outros modelos
reComputer RK3588reComputer RK3588 Series
NPU on-board
Um stream; p50 36,6 ms por quadroO local se padroniza em Rockchip
reComputer RK3576reComputer RK3576 Series
NPU on-board
Um stream a 1 fps, sem perdasPoucas câmeras, custo em primeiro lugar

Em hosts RK, adicione streams um de cada vez e verifique se cada um continua atualizando.

O host de borda, as câmeras e o broker MQTT compartilham uma LAN, e o host consegue alcançar os endereços RTSP das câmeras (normalmente porta 554). A implantação faz o download do runtime e dos modelos; depois disso, ele roda offline.

Implantando no local​

1. Verifique o campo de visão da câmera​

Olhe de cima, de um ponto alto

Cada vaga precisa estar claramente visível e não totalmente escondida pela vaga vizinha. Desenhe uma caixa por vaga: um veículo precisa cobrir cerca de um terço da caixa para contar como ocupada, e uma caixa grande abrangendo várias vagas nunca conta como ocupada.

2. Instale o software: três etapas​

As etapas por dispositivo estão na página de reference design; isto é o resumo.


  1. Implante o host de borda: insira o endereço RTSP de cada câmera e o broker MQTT, depois faça a implantação.
  2. Desenhe as vagas: abra o editor de vagas na porta 8080, escolha uma câmera, arraste um retângulo sobre uma área vazia, arraste os cantos para ajustar, insira o ID da vaga (por exemplo B1-023) e salve.
  3. Verifique: quando uma vaga muda, a cor dela no editor acompanha e a mensagem de estado da câmera chega via MQTT.

Interfaces​

Os estados das vagas vão via MQTT para o seu broker, um tópico por câmera.

  • Painéis de vagas livres / orientação: assine o tópico de cada câmera e some as contagens de ocupadas, livres e desconhecidas na mensagem.
  • Vagas reservadas: desenhe vagas de recarga de VE ou de visitantes como caixas próprias e aja com base nos IDs dessas vagas.
  • Home Assistant ou o seu próprio sistema: o mesmo tópico, lido por ID de vaga.
Tópico / portaConteúdo
MQTT <site>/parking/<camera>/slotsCada vaga sob esta câmera (occupied / free / unknown) mais as três contagens; enviado sempre que qualquer vaga muda
HTTP 8080 /slots/editorEditor de vagas: desenhar, nomear, estado em tempo real
HTTP 8099 /healthzStatus do serviço

Os estados são mantidos para que não oscilem de quadro a quadro: uma vaga passa a ocupada cerca de 3 s depois que o veículo se estabiliza e a livre cerca de 5 s depois que ele sai; cerca de 10 s após a queda de um stream, as vagas dele passam a desconhecidas.

Performance e dados medidos​

Vários streams e um stream​

DispositivoEntradaResultado
reComputer J30 Series (Orin Nano)6 streams, 1 fps cada, 620 s0 quadros perdidos em cada stream, cerca de 1,0 fps cada (medido)
reComputer J30 Series (Orin Nano)Um stream0,988 fps, p50 6,5 ms por quadro, 15 mudanças de estado relatadas por vaga (medido)
reComputer RK3588 SeriesUm streamp50 36,6 ms por quadro, 17 mudanças de estado relatadas (medido)
reComputer RK3576 SeriesUm stream1,0 fps, 21 mensagens de estado de vaga recebidas, 0 quadros perdidos (medido)

A entrada de stream único alterna um quadro estático de estacionamento de superfície com quadros escuros para forçar mudanças entre ocupado/livre.

Reproduza: sensecraft-solutions/solutions/edge_parking_occupancy (pacote de implantação) com o clipe de entrada slots-occ20-empty20-400s.mp4

Stream de câmera perdido​

DispositivoResultado
reComputer RK3576 SeriesAs vagas passaram a unknown 9,98 s após o stream parar, cerca de 11 s após o último quadro (medido)

Modelos e runtimes​

DispositivoDetecção de veículosRuntime
reComputer J30 / J40 SeriesYOLOX, 640×640, FP16TensorRT
reComputer RK3588 / RK3576 SeriesYOLOX, 640×640, INT8 (w8a8)RKNN, decodificação de hardware MPP

Parâmetros que afetam a decisão (pacote de implantação config/slots*.json):

  • slot_coverage.occupied_ratio / free_ratio: ocupada acima de 0,3 da área da caixa, livre abaixo de 0,2.
  • slot_coverage.hold_s / free_hold_s: um estado precisa se manter por 3 s / 5 s antes de mudar.
  • unknown_after_s: vagas tornam-se desconhecidas 10 s após a queda do stream.

Degradação conhecida​

  • Distorção de perspectiva grande-angular e oclusão: Vagas próximas ao perímetro de visadas de câmeras grande-angulares sofrem alongamento de perspectiva; veículos de perfil alto (SUVs, vans) em primeiro plano podem bloquear vagas traseiras adjacentes. Recomenda-se restringir cada câmera a ≤ 30 vagas.
  • Condições de estrangulamento e de fronteira: Quando um veículo fica sobre as linhas das vagas, se ambas as vagas caírem dentro da razão de cobertura de transição de 0,2–0,3, pode ocorrer oscilação temporária de estado. Aumentar hold_s estabiliza as transições.
  • Reflexos em poças e sombras dinâmicas: Água parada após chuva ou sombras dinâmicas fortes de pilares/árvores podem degradar a confiança na detecção de bordas. Iluminação funcional básica (iluminância da superfície ≥ 30 Lux) deve ser mantida à noite.

Fontes de dados e recursos​

  • Capturas de tela e resultados de stream único usam uma imagem estática de estacionamento em superfície cuja fonte original ainda está por ser confirmada.
  • Código do modelo de detecção YOLOX: Apache-2.0.
Loading Comments...