Sistema de detecção e contagem de pessoas em interiores de ônibus usando técnicas de visão computacional sem modelos pré-treinados.
Este projeto implementa uma abordagem "do zero" para detectar e contar pessoas em imagens de interiores de ônibus, usando:
- Características HOG (Histogram of Oriented Gradients)
- Classificador SVM (Support Vector Machine)
- Sliding Window para detecção multi-escala
- NMS (Non-Maximum Suppression) para refinar detecções
ibus_ai/
├── data/
│ ├── preprocess.py # Pré-processamento de imagens
│ ├── rois.py # Gerenciamento de ROIs
│ └── visualizacao.py # Visualização de resultados
├── features/
│ ├── basicas.py # Características básicas (bordas, cantos)
│ └── hog.py # Extração de características HOG
├── models/
│ └── svm.py # Classificador SVM
├── infer/
│ └── detect.py # Detecção com sliding window
└── utils/
└── nms.py # Supressão não-máxima
from ibus_ai.data.preprocess import carregar_e_preprocessar_imagem
# Carregar e pré-processar
imagem = carregar_e_preprocessar_imagem('camera-onibus.webp')from ibus_ai.features.basicas import extrair_todas_caracteristicas
from ibus_ai.features.hog import extrair_hog_de_rois
# Características básicas
caracteristicas = extrair_todas_caracteristicas(imagem)
# Características HOG de ROIs
from ibus_ai.data.rois import definir_rois_exemplo
rois = definir_rois_exemplo()
lista_hog, rotulos = extrair_hog_de_rois(imagem, rois)from ibus_ai.models.svm import treinar_classificador_do_zero
classificador, comprimento_max = treinar_classificador_do_zero(lista_hog, rotulos)from ibus_ai.infer.detect import sliding_window_deteccao
from ibus_ai.utils.nms import aplicar_nms_em_deteccoes
# Detectar
deteccoes = sliding_window_deteccao(imagem, classificador, comprimento_max)
# Aplicar NMS
caixas_filtradas = aplicar_nms_em_deteccoes(deteccoes, limiar_sobreposicao=0.3)from ibus_ai.data.visualizacao import exibir_deteccoes
exibir_deteccoes(imagem, caixas_filtradas, titulo="Pessoas Detectadas")Descritor que captura gradientes de orientação em células locais, eficaz para detectar formas humanas.
Algoritmo de aprendizado supervisionado que encontra hiperplano ótimo para separar classes.
Técnica que desliza uma janela pela imagem em múltiplas escalas para detectar objetos de diferentes tamanhos.
Remove detecções redundantes e sobrepostas, mantendo apenas as mais confiáveis.
Este é um sistema educacional "do zero" com limitações importantes:
- Dataset Pequeno: Treinado com poucos exemplos manuais
- Sensibilidade a Ruído: Características de baixo nível são sensíveis a variações
- Oclusão: Dificuldade com pessoas parcialmente visíveis
- Iluminação: Desempenho afetado por mudanças de luz
Para produção, considere usar modelos de deep learning pré-treinados (YOLO, Faster R-CNN).
Este projeto é destinado ao aprendizado de conceitos fundamentais de visão computacional:
- ✅ Pré-processamento de imagens
- ✅ Extração de características (bordas, cantos, HOG)
- ✅ Treinamento de classificadores
- ✅ Detecção multi-escala
- ✅ Pós-processamento (NMS)
pip install -r requirements.txtPrincipais bibliotecas:
- OpenCV (cv2)
- NumPy
- Pillow (PIL)
- scikit-image
- scikit-learn
- matplotlib
Veja a pasta examples/ para scripts completos de uso:
run_example.py- Pipeline completo de detecçãorois_example.json- Exemplo de ROIs em JSON
Todos os comentários e documentação estão em português para facilitar o aprendizado. Cada função possui docstrings explicativas sobre:
- O que a função faz
- Argumentos esperados
- Retornos
- Conceitos teóricos relacionados
Projeto educacional aberto para melhorias e sugestões!
MIT License - Livre para uso educacional e comercial.