Detecção de Ocupação de Estacionamento Baseada em Câmera — Seleção, Implantação e Dados Medidos
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.
- Pacote de implantação (Docker Compose e configuração): github.com/suharvest/sensecraft-solutions
- Seleção e implantação: página de reference design
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.

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 borda | Medido | Escolha-o quando | |
|---|---|---|---|
![]() | reComputer J30 Series (J3011) Jetson Orin Nano, JetPack 6.2 | 6 streams, sem perdas; p50 6,5 ms por quadro | Várias câmeras em um host; escolha padrão |
![]() | reComputer J40 Series (J4012) Jetson Orin NX, JetPack 6.2 | Mesmo pacote que o J30 | O host também executa outros modelos |
![]() | reComputer RK3588 Series NPU on-board | Um stream; p50 36,6 ms por quadro | O local se padroniza em Rockchip |
![]() | reComputer RK3576 Series NPU on-board | Um stream a 1 fps, sem perdas | Poucas 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
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.
- Implante o host de borda: insira o endereço RTSP de cada câmera e o broker MQTT, depois faça a implantação.
- 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.
- 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 / porta | Conteúdo |
|---|---|
MQTT <site>/parking/<camera>/slots | Cada vaga sob esta câmera (occupied / free / unknown) mais as três contagens; enviado sempre que qualquer vaga muda |
HTTP 8080 /slots/editor | Editor de vagas: desenhar, nomear, estado em tempo real |
HTTP 8099 /healthz | Status 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
| Dispositivo | Entrada | Resultado |
|---|---|---|
| reComputer J30 Series (Orin Nano) | 6 streams, 1 fps cada, 620 s | 0 quadros perdidos em cada stream, cerca de 1,0 fps cada (medido) |
| reComputer J30 Series (Orin Nano) | Um stream | 0,988 fps, p50 6,5 ms por quadro, 15 mudanças de estado relatadas por vaga (medido) |
| reComputer RK3588 Series | Um stream | p50 36,6 ms por quadro, 17 mudanças de estado relatadas (medido) |
| reComputer RK3576 Series | Um stream | 1,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
| Dispositivo | Resultado |
|---|---|
| reComputer RK3576 Series | As 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
| Dispositivo | Detecção de veículos | Runtime |
|---|---|---|
| reComputer J30 / J40 Series | YOLOX, 640×640, FP16 | TensorRT |
| reComputer RK3588 / RK3576 Series | YOLOX, 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_sestabiliza 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.



