Esta palestra foi apresentada na PyCon Brasil 2008 e explica como utilizar python para acessar movimentos do usuário como direção de apontamento da cabeça ou aproximação das mão. Estes eventos são detectados através de uma webcam por meio da biblioteca EHCI.
1. Daniel Lélis Baggio
Interação com o Computador Através de
Visão Computacional e Webcam:
utilizando a biblioteca EHCI em Python
2. Roteiro
Introdução – O que é a EHCI?
Como funcionam os principais algoritmos?
API e integração com Python
EHCI & Panda3D
Aplicações
Instruções para download, instalação e documentação
Daniel Lélis Baggio | danielbaggio@gmail.com | EHCI Python Bindings | 2
3. Roteiro
Introdução – O que é a EHCI?
Como funcionam os principais algoritmos?
API e integração com Python
EHCI & Panda3D
Aplicações
Instruções para download, instalação e documentação
Daniel Lélis Baggio | danielbaggio@gmail.com | EHCI Python Bindings | 3
4. Introdução – O que é a EHCI?
• Biblioteca open source para
obtenção de entrada do usuário
através da análise de imagens
obtidas pela webcam
• Implementada em C++
• Desenvolvida no Google Summer
of Code '08 com o Natural User
Interface Group
• Obtenção de posicionamento e
rotação da cabeça e mão do
usuário sem o uso de
qualquer acessório
Daniel Lélis Baggio | danielbaggio@gmail.com | EHCI Python Bindings | 4
5. Roteiro
Introdução – O que é a EHCI?
Como funcionam os principais algoritmos?
API e integração com Python
EHCI & Panda3D
Aplicações
Instruções para download, instalação e documentação
Daniel Lélis Baggio | danielbaggio@gmail.com | EHCI Python Bindings | 5
6. Algoritmos:
“Stable Real-Time 3D Tracking using Online and Offline
Information” L. Vacchetti, V. Lepetit and P. Fua
Solução em tempo real para fazer “tracking” de objetos
3d rígidos usando uma única câmera
– Inicialização: posição conhecida
• Detecção de feições naturais
– Estimativa dos graus de liberdade através de POSIT
– Tracking através de point matching
Daniel Lélis Baggio | danielbaggio@gmail.com | EHCI Python Bindings | 6
7. Algoritmos:
“Rapid Object Detection Using a Boosted Cascade of Simple
Features” Viola, P; Jones, M.
Algoritmo de Detecção de Faces Viola-Jones
– Utilizado na inicialização do tracking
– Classificador em cascata
– Treinado através de Adaptive Boosting
– Utilizando features do tipo Haar
Daniel Lélis Baggio | danielbaggio@gmail.com | EHCI Python Bindings | 7
8. Features
Retângulos
Fáceis de serem calculados
– Áreas brancas são subtraídas das áreas pretas
– Integral Image – Representação especial que torna a
extração da feature mais rápida
Daniel Lélis Baggio | danielbaggio@gmail.com | EHCI Python Bindings | 8
10. Principais features identificadas
Classificador extremamente rápido (60 microinstruções)
Ajustado para detectar 100% das faces, com 40% de falsos positivos no
primeiro estágio
Daniel Lélis Baggio | danielbaggio@gmail.com | EHCI Python Bindings | 10
11. Algoritmos:
“Pyramidal Implementation of the Lucas Kanade Feature
Tracker Description of the algorithm” Jean-Yves Bouguet
Tracking
Daniel Lélis Baggio | danielbaggio@gmail.com | EHCI Python Bindings | 11
13. Algoritmos:
POSIT - “Model-based object pose in 25 lines of
code” D. DeMenthon and L. S. Davis
Solução iterativa para o problema
de encontrar o vetor de translação
e a matriz de rotação (6 graus de
liberdade)
Supor inicialmente que todos os
pontos têm a mesma profundidade
Solução de sistema linear super-
determinado. Decomposição SVD
e cálculo de pseudo-inversa
Daniel Lélis Baggio | danielbaggio@gmail.com | EHCI Python Bindings | 13
14. Obtenção da matriz de rotação e do vetor de
translação
Correlações entre os pontos do objeto e suas
respectivas projeções devem ser conhecidas!
Daniel Lélis Baggio | danielbaggio@gmail.com | EHCI Python Bindings | 14
15. Obtenção da matriz de rotação e do vetor de
translação
Daniel Lélis Baggio | danielbaggio@gmail.com | EHCI Python Bindings | 15
17. Roteiro
Introdução – O que é a EHCI?
Como funcionam os principais algoritmos?
API e integração com Python
EHCI & Panda3D
Aplicações
Instruções para download, instalação e documentação
Daniel Lélis Baggio | danielbaggio@gmail.com | EHCI Python Bindings | 17
19. EHCI API
import ehci
ehci.ehciInit()
– Criação de uma janela para visualizar aquisição da
webcam e processamento da imagem
ehci.ehciLoop(modo , estimativaInicial)
– Obtenção do quadro e processamento
– Modos:
• 0x0001 – Detecção 2D da face
• 0x0011 – Detecção 6D da face
• 0x0100 – Detecção 2D das mãos
• 0x1100 – Detecção 6D das mãos
Daniel Lélis Baggio | danielbaggio@gmail.com | EHCI Python Bindings | 19
20. EHCI - API
ehci.getHeadBounds()
– Retorna a posição x, y (em pixels) do objeto processado
assim como sua largura e altura
6 linhas de código vs 128 linhas Python OpenCV
Daniel Lélis Baggio | danielbaggio@gmail.com | EHCI Python Bindings | 20
21. EHCI - API
ehci.getGlPositMatrix()
– Retorna a matriz de rotação e o vetor de translação do
objeto processado
Daniel Lélis Baggio | danielbaggio@gmail.com | EHCI Python Bindings | 21
24. Hand-tracking
Viola-Jones treinado com as mãos
– novo .xml
Modelo 3D das mãos
– novo modelo
Mesmo algoritmo
Daniel Lélis Baggio | danielbaggio@gmail.com | EHCI Python Bindings | 24
25. Roteiro
Introdução – O que é a EHCI?
Como funcionam os principais algoritmos?
API e integração com Python
EHCI & Panda3D
Aplicações
Instruções para download, instalação e documentação
Daniel Lélis Baggio | danielbaggio@gmail.com | EHCI Python Bindings | 25
26. Aplicações
Head-tracking
Augmented Reality
Efeitos especiais em vídeos
Interfaceamento com as mãos: plugins Firefox, Blender
Daniel Lélis Baggio | danielbaggio@gmail.com | EHCI Python Bindings | 26
27. Roteiro
Introdução – O que é a EHCI?
Como funcionam os principais algoritmos?
API e integração com Python
EHCI & Panda3D
Aplicações
Instruções para download, instalação e documentação
Daniel Lélis Baggio | danielbaggio@gmail.com | EHCI Python Bindings | 27
29. Referências
Rainer Lienhart and Jochen Maydt. An Extended Set
of Haar-like Features for Rapid Object Detection.
Submitted to ICIP2002
Viola, P; Jones, M. Rapid Object Detection Using a
Boosted Cascade of Simple Features – (2004)
Alexander Kuranov, Rainer Lienhart, and Vadim
Pisarevsky. An Empirical Analysis of Boosting
Algorithms for Rapid Objects With an Extended Set
of Haar-like Features. Intel Technical Report MRL-TR-
July02-01, 2002
Daniel Lélis Baggio | danielbaggio@gmail.com | EHCI Python Bindings | 29
30. Referências
D. DeMenthon and L. S. Davis “Model-based object
pose in 25 lines of code”
Jean-Yves Bouguet. “Pyramidal Implementation of
the Lucas Kanade Feature Tracker Description of
the algorithm”
Daniel Lélis Baggio | danielbaggio@gmail.com | EHCI Python Bindings | 30