Sistema de reconhecimento facial desenvolvido com InsightFace, Faiss e Redis para alta precisão e performance. Ideal para fotógrafos, estúdios e aplicações que precisam identificar pessoas em grandes coleções de fotos.
- Alta Precisão: Utiliza InsightFace com modelo Buffalo-L para detecção facial avançada
- Performance Otimizada: Faiss (Facebook) para busca vetorial ultra-rápida
- Escalabilidade: Redis para cache e gerenciamento de dados
- Interface Moderna: Interface web responsiva e intuitiva
- Drag & Drop: Upload fácil de imagens
- Tempo Real: Processamento instantâneo com feedback visual
- S3 Opcional: Integração opcional com AWS S3 como diferencial
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Interface │ │ Flask App │ │ Redis Cache │
│ Web (HTML/JS) │◄──►│ (Python) │◄──►│ (Database) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│
▼
┌─────────────────┐
│ InsightFace │
│ + Faiss │
│ (AI Engine) │
└─────────────────┘
- Docker e Docker Compose
- Python 3.9+ (para desenvolvimento local)
- 4GB+ RAM recomendado
git clone git@github.com:rochac2lee/face-recognition.git
cd face-recognition# Iniciar o sistema
docker-compose up -d
# Verificar status
docker-compose ps
# Ver logs
docker-compose logs -f face-recognitionO sistema estará disponível em: http://localhost:8080
# Instalar dependências
pip install -r requirements.txt
# Iniciar Redis (necessário)
docker run -d -p 6379:6379 redis:7-alpine
# Executar aplicação
python app.pyface-recognition/
├── app.py # Aplicação principal Flask
├── face_recognition_redis.py # Motor de reconhecimento facial
├── s3_operations.py # Operações S3 (opcional)
├── s3_config.py # Configuração S3 (opcional)
├── requirements.txt # Dependências Python
├── docker-compose.yml # Configuração Docker
├── Dockerfile # Imagem Docker
├── album/ # Pasta com fotos de referência
├── uploads/ # Pasta temporária para uploads
├── templates/ # Templates HTML
├── static/ # Arquivos estáticos (CSS/JS)
└── S3_SETUP.md # Guia de configuração S3
Coloque suas fotos de referência na pasta album/:
# Exemplo de estrutura
album/
├── pessoa1.jpg
├── pessoa2.jpg
├── evento1/
│ ├── foto1.jpg
│ └── foto2.jpg
└── evento2/
└── foto3.jpg- Abra o navegador em
http://localhost:8080 - A interface mostrará uma área de upload drag & drop
- Arraste e solte uma imagem na área de upload
- Clique em "Buscar Fotos"
- O sistema irá:
- Detectar faces na imagem
- Buscar correspondências no banco de dados
- Mostrar resultados com precisão
- Faces detectadas: Número de rostos encontrados na imagem
- Correspondências: Fotos similares encontradas
- Precisão: Percentual de confiança (0-100%)
- Bounding boxes: Caixas verdes (faces detectadas) e vermelhas (matches)
GET /- Interface web principalPOST /upload- Upload e reconhecimento de imagemGET /health- Status do sistemaGET /album- Listar imagens do álbumGET /album/<filename>- Servir imagem do álbum
POST /debug_similarity- Debug de similaridade (mostra todos os scores)POST /search_client- Busca específica por clienteGET /client_stats/<client_id>- Estatísticas de cliente
No arquivo app.py, você pode ajustar:
face_engine = FaceRecognitionRedis(
model_name='buffalo_l', # Modelo InsightFace
similarity_threshold=0.25, # Threshold de similaridade
min_face_size=5, # Tamanho mínimo da face
min_det_score=0.2, # Confiança mínima de detecção
# ... outros parâmetros
)# Configurações Flask
FLASK_ENV=production
FLASK_APP=app.py
# Configurações Redis
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_DB=0
# Configurações S3 (opcional)
AWS_ACCESS_KEY_ID=sua_key
AWS_SECRET_ACCESS_KEY=sua_secret
AWS_S3_BUCKET_NAME=seu_bucket
AWS_S3_REGION=us-east-1- InsightFace detecta e extrai faces das imagens
- Gera embeddings (vetores) únicos para cada face
- Aplica filtros de qualidade e tamanho
- Faiss cria índice vetorial para busca rápida
- Armazena embeddings no Redis
- Organiza por pessoa/evento
- Extrai face da imagem de consulta
- Busca no índice vetorial
- Retorna resultados ordenados por similaridade
- Aplica threshold de similaridade
- Remove duplicatas
- Calcula confiança final
curl http://localhost:8080/healthResposta:
{
"status": "healthy",
"engine_available": true,
"s3_available": false,
"database_stats": {
"total_faces": 150,
"total_persons": 25,
"index_size": "2.3MB"
}
}# Ver logs em tempo real
docker-compose logs -f face-recognition
# Logs específicos
docker-compose logs face-recognition | grep "SUCCESS\|ERROR\|SEARCH"-
"Motor de reconhecimento não disponível"
- Verifique se o Redis está rodando
- Reinicie o container:
docker-compose restart face-recognition
-
"Nenhuma face detectada"
- Verifique qualidade da imagem
- Ajuste
min_face_sizeemin_det_score - Use imagens com boa iluminação
-
"Performance lenta"
- Aumente recursos do Docker
- Verifique uso de memória do Redis
- Considere usar GPU para InsightFace
# Testar similaridade
curl -X POST -F "file=@teste.jpg" http://localhost:8080/debug_similarity
# Verificar estatísticas
curl http://localhost:8080/health- Uploads são processados em memória temporária
- Arquivos temporários são removidos automaticamente
- Não há armazenamento permanente de imagens enviadas
- Redis pode ser configurado com autenticação
- Detecção: ~200ms por imagem
- Busca: ~50ms para 1000 faces
- Memória: ~2GB para 10.000 faces
- Precisão: >95% com threshold 0.25
- Use imagens redimensionadas (max 1920px)
- Configure Redis com persistência adequada
- Monitore uso de memória
- Considere clustering para alta demanda
- Fork o projeto
- Crie uma branch para sua feature
- Commit suas mudanças
- Push para a branch
- Abra um Pull Request
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para detalhes.
- Email: [seu-email]
- Issues: [GitHub Issues]
- Documentação: [Wiki do projeto]
Desenvolvido para a comunidade de reconhecimento facial