ehci - interação com computador através de webcam
DESCRIPTION
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.TRANSCRIPT
Daniel Lélis Baggio
Interação com o Computador Através deVisão Computacional e Webcam:
utilizando a biblioteca EHCI em Python
Daniel Lélis Baggio | [email protected] | EHCI Python Bindings | 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 | [email protected] | EHCI Python Bindings | 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 | [email protected] | EHCI Python Bindings | 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 | [email protected] | EHCI Python Bindings | 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 | [email protected] | EHCI Python Bindings | 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 | [email protected] | EHCI Python Bindings | 7
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
Algoritmos:“Rapid Object Detection Using a Boosted Cascade of Simple Features” Viola, P; Jones, M.
Daniel Lélis Baggio | [email protected] | EHCI Python Bindings | 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 | [email protected] | EHCI Python Bindings | 9
Principais features identificadas
Daniel Lélis Baggio | [email protected] | EHCI Python Bindings | 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 | [email protected] | EHCI Python Bindings | 11
Algoritmos:“Pyramidal Implementation of the Lucas Kanade Feature Tracker Description of the algorithm” Jean-Yves Bouguet Tracking
Daniel Lélis Baggio | [email protected] | EHCI Python Bindings | 12
Demonstração Lk-Demo
Daniel Lélis Baggio | [email protected] | EHCI Python Bindings | 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 | [email protected] | EHCI Python Bindings | 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 | [email protected] | EHCI Python Bindings | 15
Obtenção da matriz de rotação e do vetor de translação
Daniel Lélis Baggio | [email protected] | EHCI Python Bindings | 16
Demonstração do algoritmo
Daniel Lélis Baggio | [email protected] | EHCI Python Bindings | 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 | [email protected] | EHCI Python Bindings | 18
PyEHCI = EHCI + SWIG
SWIG: Simplified Wrapper and Interface Generator (1996)
Daniel Lélis Baggio | [email protected] | EHCI Python Bindings | 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 | [email protected] | EHCI Python Bindings | 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 | [email protected] | EHCI Python Bindings | 21
EHCI - API
ehci.getGlPositMatrix()
– Retorna a matriz de rotação e o vetor de translação do objeto processado
Daniel Lélis Baggio | [email protected] | EHCI Python Bindings | 22
EHCI - API
simples3d.py - ehci.getGlPositMatrix()[ 0.990, -0.026, 0.138, -44.377]
[ 0.183, -0.981, -0.058, -18.170]
[ 0.137, 0.083, -0.967, 210.353]
[ 0.000, 0.000, 0.000, 1.000]
[ A0, A4, A8, A12 ]
[ A1, A5, A9, A13 ]
[ A2, A6, A10, A14 ]
[ A3, A7, A11, A15 ]
Daniel Lélis Baggio | [email protected] | EHCI Python Bindings | 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 | [email protected] | EHCI Python Bindings | 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 | [email protected] | EHCI Python Bindings | 26
Aplicações
Head-tracking
Augmented Reality
Efeitos especiais em vídeos
Interfaceamento com as mãos: plugins Firefox, Blender
Daniel Lélis Baggio | [email protected] | EHCI Python Bindings | 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 | [email protected] | EHCI Python Bindings | 28
EHCI – Downloadhttp://code.google.com/p/ehci/
Daniel Lélis Baggio | [email protected] | EHCI Python Bindings | 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 | [email protected] | EHCI Python Bindings | 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 | [email protected] | EHCI Python Bindings | 31
Agradecimentos
Daniel Lélis Baggio | [email protected] | EHCI Python Bindings | 32
EHCI – Dúvidas?
http://code.google.com/p/ehci