Reconstrução fundamentada do pipeline de extração de pontos-chave de mãos usando exclusivamente Álgebra Linear, Geometria Analítica e NumPy — sem OpenCV, sem MediaPipe, sem
scikit-*nem qualquer caixa-preta de Visão Computacional ou Aprendizado de Máquina.
Este projeto nasceu como pesquisa de mestrado em Ciência da Computação sob
orientação do Prof. Jugurta. Ferramentas como MediaPipe e OpenCV oferecem
APIs de uma única linha (hands.process(img)) que escondem décadas de
matemática elegante por trás de pesos pré-treinados e binários compilados.
Para um aluno de mestrado, usar essas ferramentas é trivial; entender o
que elas fazem exige reconstruir as ideias.
O EigenHand assume essa tarefa de forma deliberadamente austera: cada operação do pipeline corresponde a uma identidade da álgebra linear ou da geometria computacional, escrita explicitamente em NumPy. As únicas bibliotecas externas permitidas são:
numpy— operações matriciais e decomposições;Pillow— leitura do arquivo de imagem;matplotlib— visualização.
Toda a lógica de visão — segmentação, contorno, classificação, detecção de bordas — é implementada do zero.
O pipeline é composto por quatro etapas, cada uma evidenciando um aspecto diferente do mesmo arcabouço algébrico.
Cada pixel é tratado como um vetor
A invariância é algébrica e exata, não heurística. Uma máscara binária
A nuvem de pixels classificados como pele admite duas estatísticas fundamentais. O centróide:
e a matriz de covariância:
O autovetor
A silhueta da mão é caracterizada pelo seu fecho convexo, calculado pelo
algoritmo de Graham (1972) implementado integralmente. O teste de
orientação substitui qualquer cálculo trigonométrico: dada uma tripla
é exatamente a componente arctan perdem precisão.
Os vértices do hull são em seguida filtrados por aglutinação de vizinhos
próximos em
Os autovetores
Para cada pico
Cada componente é, simultaneamente, uma mudança de coordenadas, uma projeção ortogonal e um produto escalar com um vetor unitário.
Invariância à rotação da câmera. Sob uma rotação
As coordenadas locais são, portanto, invariantes à rotação por
construção — não por aproximação. Sobre elas aplica-se uma heurística
geométrica simples: o polegar é o pico de maior
A última etapa estabelece a infraestrutura matemática para a detecção tipo Viola-Jones (2001), preparando a próxima fase do projeto, na qual classificadores Haar mitigarão falsos positivos da segmentação cromática (situações em que o fundo possui cor próxima à da pele).
A Imagem Integral
é construída por dupla aplicação de cumsum em
Pelo Princípio da Inclusão-Exclusão, a soma de qualquer retângulo com
cantos
em
A característica de Haar de borda vertical (dois retângulos contíguos, um claro e um escuro) é então computada simultaneamente em todas as posições válidas da imagem por meio de seis fatias da imagem integral, sem nenhum laço Python sobre pixels.
EigenHand/
├── README.md
├── requirements.txt
├── main.py # ponto de entrada CLI
├── src/
│ ├── __init__.py
│ ├── core_math.py # primitivas algébricas compartilhadas
│ ├── segmentation.py # F1 -- segmentação por cosseno em R^3
│ ├── geometry.py # F2 -- PCA, contorno, Graham Scan, picos
│ ├── classification.py # F3 -- mudança de base, classificação
│ ├── integral_image.py # F4 -- imagem integral, característica de Haar
│ └── visualization.py # plotagem do painel de inspeção
├── assets/ # imagens RGB de entrada (.jpg)
└── results/ # painéis gerados pelo pipeline (.png)
pip install -r requirements.txtpython main.py assets/11.jpgpython main.py assets/11.jpg --save results/11_pipeline.png| Flag | Padrão | Descrição |
|---|---|---|
--theta |
8.0 | ângulo máximo (graus) na similaridade de cosseno |
--mag-min |
0.30 | magnitude mínima do vetor RGB para aceitar como pele |
--dist-pico |
22.0 | distância mínima L2 entre picos do hull, em pixels |
--save |
- | se fornecido, salva o painel em PNG no caminho indicado |
Get-ChildItem assets/*.jpg | ForEach-Object {
python main.py $_.FullName --save "results/$($_.BaseName)_pipeline.png"
}Em testes sobre cinco imagens com gestos e fundos variados, o pipeline produziu:
- segmentação cromática funcional em 5/5 casos com fundos não-pele;
- hulls coerentes com a silhueta da mão em 4/5 casos;
- classificação correta dos cinco dedos em 3/5 casos (todos com mão aberta e sem pele no fundo);
- mapas de Haar evidenciando bordas verticais em 5/5 casos.
A imagem assets/11.jpg (anisotropia
| Imagem | Pixels pele | Vértices do hull | Picos | Dedos rotulados | |
|---|---|---|---|---|---|
| 1.jpg | 161 469 | 2,18 | 29 | 12 | 4 |
| 11.jpg | 93 323 | 4,20 | 19 | 8 | 5 |
| 14.jpg | 117 510 | 3,38 | 22 | 11 | 5 |
| 81.jpg | 89 316 | 2,52 | 25 | 10 | 5 |
| 136.jpg | 147 095 | 1,71 | 16 | 10 | 4 |
Duas classes de falha foram observadas, ambas previstas pelo próprio modelo:
-
Mãos fechadas. A heurística da Fase 3 pressupõe mão aberta com cinco pontas distintas. Em punhos fechados, o convex hull encontra picos nas articulações dos nós dos dedos e a classificação atribui rótulos a pontos que não correspondem a pontas de dedo verdadeiras. Não é um defeito de implementação: é a hipótese explícita do modelo sendo violada pela imagem de entrada.
-
Pele no fundo. A similaridade de cosseno em
$\mathbb{R}^3$ não distingue mãos de rostos ou outras regiões com cromaticidade similar. A imagemassets/136.jpgilustra exatamente esse caso adversarial — o rosto presente no canto da fotografia é erroneamente segmentado como pele e contamina o hull, deslocando o centróide e reduzindo a anisotropia.Esta é a limitação que motiva a próxima fase do projeto: a fusão da segmentação cromática com classificadores Haar treinados para o padrão visual da mão, cuja infraestrutura matemática já está estabelecida na Fase 4.
A discussão explícita dessas limitações, com a indicação de quais hipóteses do modelo são violadas em cada caso, é parte essencial do rigor exigido pela natureza acadêmica do projeto.
- Crow, F. C. (1984). Summed-Area Tables for Texture Mapping. SIGGRAPH.
- Graham, R. L. (1972). An Efficient Algorithm for Determining the Convex Hull of a Finite Planar Set. Information Processing Letters, 1(4), 132–133.
- Pearson, K. (1901). On Lines and Planes of Closest Fit to Systems of Points in Space. Philosophical Magazine, 2(11), 559–572.
- Viola, P., & Jones, M. (2001). Rapid Object Detection using a Boosted Cascade of Simple Features. CVPR.
Projeto desenvolvido em pesquisa de mestrado em Ciência da Computação sob orientação do Prof. Jugurta.

