Um sistema de reconhecimento de linguagem de sinais em tempo real usando visão computacional e machine learning. O projeto utiliza MediaPipe para detecção de landmarks das mãos e Random Forest para classificação dos gestos.
- Sobre o Projeto
- Funcionalidades
- Tecnologias Utilizadas
- Estrutura do Projeto
- Instalação
- Como Usar
- Dataset
- Modelo
- Resultados
- Contribuição
- Licença
Este projeto implementa um sistema completo de reconhecimento de linguagem de sinais que pode identificar gestos em tempo real através da webcam. O sistema é capaz de reconhecer 4 classes diferentes de gestos: C, M, R e V, mas pode ser customizado de acordo com o usuário.
- ✅ Detecção em tempo real via webcam
- ✅ Interface visual com feedback instantâneo
- ✅ Sistema robusto de extração de features
- ✅ Modelo treinado com Random Forest
- ✅ Suporte para diferentes condições de iluminação
- Coleta de Dados: Captura automática de imagens para treinamento
- Processamento de Landmarks: Extração de pontos-chave das mãos usando MediaPipe
- Treinamento do Modelo: Algoritmo Random Forest para classificação
- Detecção em Tempo Real: Reconhecimento instantâneo de gestos
- Interface Visual: Feedback visual com bounding box e texto
- Python 3.11+
- OpenCV - Processamento de imagem e vídeo
- MediaPipe - Detecção de landmarks das mãos
- Scikit-learn - Algoritmos de machine learning
- NumPy - Operações numéricas
- Pickle - Serialização de dados e modelo
Sign Language/
│
├── collect_imgs.py # Coleta de imagens para dataset
├── create_dataset.py # Processamento e extração de features
├── train_classifier.py # Treinamento do modelo
├── test_classifier.py # Teste em tempo real
├── requirements.txt # Dependências do projeto
├── README.md # Documentação
│
├── data/ # Dataset de imagens
│ ├── 0/ # Classe 'C' (100 imagens)
│ ├── 1/ # Classe 'M' (100 imagens)
│ ├── 2/ # Classe 'R' (100 imagens)
│ └── 3/ # Classe 'V' (100 imagens)
│
├── data.pickle # Features extraídas e labels
└── model.pickle # Modelo treinado
- Python 3.11 ou superior
- Webcam funcional
- Windows/Linux/MacOS
- Clone o repositório
git clone <seu-repositorio>
cd "Sign Language"
- Instale as dependências
pip install -r requirements.txt
- Ajuste de compatibilidade (se necessário)
pip install protobuf==3.20.3
python collect_imgs.py
- O programa irá capturar 100 imagens para cada uma das 4 classes
- Pressione 'Q' quando estiver pronto para cada classe
- Faça os gestos claramente em frente à câmera
python create_dataset.py
- Extrai landmarks das mãos de todas as imagens
- Gera o arquivo
data.pickle
com as features
python train_classifier.py
- Treina um modelo Random Forest
- Mostra a acurácia do modelo
- Salva o modelo em
model.pickle
python test_classifier.py
- Abre a webcam para detecção em tempo real
- Pressione 'Q' para sair
- Faça os gestos em frente à câmera e veja as predições
O dataset consiste em:
- 400 imagens no total
- 4 classes: C, M, R, V (customizavel)
- 100 imagens por classe
- Resolução variável (capturada da webcam)
- C: Gesto da letra C
- M: Gesto da letra M
- R: Gesto da letra R
- V: Gesto da letra V
- Algoritmo: Random Forest Classifier
- Features: 84 coordenadas (x,y) de landmarks das mãos
- Preprocessing: Padding para uniformizar o tamanho das features
- Validation: Train/Test split (80/20)
- Detecção: MediaPipe identifica landmarks das mãos
- Extração: Coordenadas (x,y) de 21 pontos por mão
- Padding: Normalização para 84 features (suporte a 1-2 mãos)
- Classificação: Random Forest prediz a classe
- Acurácia: Varia conforme o dataset coletado
- Tempo de Resposta: < 50ms por frame
- FPS: ~20-30 FPS dependendo do hardware
1. Erro de feature mismatch
Solution: O código já inclui padding automático para resolver isso
2. Warning do protobuf
pip install protobuf==3.20.3
3. Câmera não detectada
# Tente alterar o índice da câmera em todos os arquivos
cap = cv2.VideoCapture(1) # ou 2, 3...
4. Baixa acurácia
- Colete mais dados com gestos bem definidos
- Certifique-se de que os gestos estão claramente visíveis
- Treine em diferentes condições de iluminação
⭐ Se este projeto te ajudou, considere dar uma estrela!