Projeto em Python e OpenCV para identificar vagas livres e ocupadas em um vídeo de estacionamento.
As vagas são marcadas manualmente, e o sistema analisa essas regiões a cada frame para estimar a ocupação. O resultado aparece no próprio vídeo, com cores, etiquetas e um painel com os totais.
Desenvolvi este projeto para colocar em prática conceitos de visão computacional, desde o tratamento da imagem até a construção da interface de monitoramento.
- Processa o vídeo continuamente usando a CPU.
- Destaca cada vaga com uma cor e a indicação
LIVREouOCUPADO. - Exibe o total de vagas livres, ocupadas e a porcentagem de ocupação.
- Permite adicionar e remover vagas com o mouse.
- Salva o mapeamento para reutilizá-lo nas próximas execuções.
A interface usa um painel translúcido e preenchimentos semitransparentes para mostrar as informações sobre o vídeo.
- Python 3.13
- OpenCV: processamento dos frames e análise das vagas.
- NumPy: manipulação das imagens como matrizes.
- Pillow: renderização de textos e elementos do painel.
- Pickle: armazenamento das coordenadas no arquivo
CarParkPos.
A detecção usa processamento de imagem e contagem de pixels nas regiões mapeadas.
Cada frame passa pelas seguintes etapas:
Frame original
↓
Conversão para escala de cinza
↓
Gaussian Blur (3×3)
↓
Threshold adaptativo invertido
↓
Filtro de mediana (5×5)
↓
Dilatação com kernel 3×3
↓
Contagem de pixels em cada vaga
↓
Classificação: livre ou ocupada
A contagem é feita com cv2.countNonZero na região de cada vaga. Essa informação é usada para definir o status e atualizar o painel.
Com o repositório baixado, abra um terminal na pasta do projeto.
python -m pip install -r requirements.txtPara adicionar ou remover vagas:
python ParkingSpacePicker.py- Clique esquerdo: adiciona uma vaga.
- Clique direito: remove uma vaga existente.
As coordenadas ficam salvas no arquivo CarParkPos.
python main.pyO projeto foi desenvolvido como exercício prático de visão computacional. A abordagem atual depende do posicionamento da câmera e das condições de iluminação.
Como a classificação usa a contagem de pixels, sombras, chuva e mudanças de luz podem interferir no resultado. As vagas também são representadas por retângulos fixos, o que limita o uso com câmeras inclinadas.
Para utilizar outro vídeo ou enquadramento, pode ser necessário refazer o mapeamento e ajustar os parâmetros de detecção.
- Mapear vagas com polígonos para acompanhar melhor a perspectiva da câmera.
- Adaptar os parâmetros de detecção às mudanças de iluminação.
- Testar a detecção de veículos com YOLOv8.
- Disponibilizar os dados de ocupação por uma API.
- Criar um painel web para acompanhar o estacionamento.
