Skip to content

jaovitm/Sign-Language

Repository files navigation

🤟 Sign Language Detection System

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.

📋 Índice

🎯 Sobre o Projeto

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.

Características Principais:

  • ✅ 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

🚀 Funcionalidades

  • 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

🛠️ Tecnologias Utilizadas

  • 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

📁 Estrutura do Projeto

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

🔧 Instalação

Pré-requisitos

  • Python 3.11 ou superior
  • Webcam funcional
  • Windows/Linux/MacOS

Passo a Passo

  1. Clone o repositório
git clone <seu-repositorio>
cd "Sign Language"
  1. Instale as dependências
pip install -r requirements.txt
  1. Ajuste de compatibilidade (se necessário)
pip install protobuf==3.20.3

📖 Como Usar

1. Coleta de Dados

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

2. Processamento do Dataset (Opcional - se coletou novos dados)

python create_dataset.py
  • Extrai landmarks das mãos de todas as imagens
  • Gera o arquivo data.pickle com as features

3. Treinamento do Modelo (Opcional - se processou novos dados)

python train_classifier.py
  • Treina um modelo Random Forest
  • Mostra a acurácia do modelo
  • Salva o modelo em model.pickle

4. Teste em Tempo Real

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

📊 Dataset

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)

Gestos Reconhecidos:

  • C: Gesto da letra C
  • M: Gesto da letra M
  • R: Gesto da letra R
  • V: Gesto da letra V

🤖 Modelo

Arquitetura:

  • 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)

Pipeline de Processamento:

  1. Detecção: MediaPipe identifica landmarks das mãos
  2. Extração: Coordenadas (x,y) de 21 pontos por mão
  3. Padding: Normalização para 84 features (suporte a 1-2 mãos)
  4. Classificação: Random Forest prediz a classe

📈 Resultados

  • Acurácia: Varia conforme o dataset coletado
  • Tempo de Resposta: < 50ms por frame
  • FPS: ~20-30 FPS dependendo do hardware

🐛 Troubleshooting

Problemas Comuns:

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!

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages