Sobre mim
André Márcio de Lima Curvello◈ Engenheiro de Computação – USP São Carlos◈ MBA em Gestão de TI - UNIFRAN◈ Mestrado em Processamento de Sinais e Instrumentação – USP São
Carlos◈ Articulista do Portal Embarcados
“Computação não se
relaciona mais a
computadores.
Relaciona-se a viver.
Nicholas Negroponte
Processamento de
Imagens
Vamos ver do que se trataE por quê isso é importante…
1
Processamento de Imagens◈ Modificar as informações contidas numa imagem sob
vários aspectos, de modo que o resultado seja umaimagem ou informações extraídas dela.
Visão Computacional
◈ Análise de imagens e vídeos a fim de obterresultados similares àqueles dos humanos.
Fluxo do Processo
Mercado
Dispositivos com interação visual!
OpenCV◈ Biblioteca de Processamento de Imagens e de visão
computacional◈ Código aberto◈ Grande gama de funções implementadas◈ C, C++, Java, Python e outras.◈ Estrutura modular◈ Interface gráfica◈ Processamento de imagens◈ Processamento de vídeo◈ Dentre outras.
DESAFIO
Usando a GPUUm parceiro de peso!
Inspiração
◈ Conjunto de Rotinas para Computação Gráfica
◈ Sistemas Embarcados◈ Execução na GPU◈ Programas⬥ Vertex Shader⬥ Fragment Shader
OpenGL ES 2.0
Abordagem Tradicional
Usando
somente
CPU!
Abordagem Tradicional
Usando a GPU com OpenGL ES 2.0
Fonte: www.apple.com
Como tratar a imagem?
• Cubo
• Textura
• Shaders
WandBoard Quad◈ SoC i.MX6Q◈ Quatro núcleos ARM Cortex-A9 - 1,2 GHz◈ 2 GB de memória RAM◈ GPU Vivante GC2000
▸ Driver Vivante GC2000 - GAL
GPU Vivante GC2000
◈ GC2000: OpenGL ES / OpenCL / OpenCL EP 1.1◈ GC355: OpenVG◈ GC320: Composition
Modelo
Fonte: http://homepages.inf.ed.ac.uk
• 320x240
• 640x480
• 800x600
• 1280x720
Medida de Tempo
◈getTickCount - OpenCV⬥Retorna o número de pulsos de operação (ticks)
◈getTickFrequency - OpenCV⬥Retorna o número de pulsos de operação (ticks) do sistema em segundos.
Execução
OpenCV – CPU
OpenGL - GPU
Resultados?
2,44x
6,16x
7,2x
9,45x
0
1
2
3
4
5
6
7
8
9
10
320x240 640x480 800x600 1280x720
GA
NH
O
RESOLUÇÃO
Ganho de Desempenho com OpenGL em GPU vs OpenCV em CPU
Observação!
Recuperação de dados – Read Back
Fonte: http://vgl-ait.orgFonte: http://vgl-ait.org
• glReadPixels()
• FrameBuffer
• OpenCV – Mat
• Flip
Observação!
Recuperação de dados – Read Back
2,1x
3,6x3,8x
4,21x
0
0,5
1
1,5
2
2,5
3
3,5
4
4,5
320x240 640x480 800x600 1280x720
GA
NH
O
RESOLUÇÃO
Ganho de Desempenho Total com GPU com OpenGL VS CPU com OpenCV
Ganho de 9xOperando Diretamente em GPU
Real - 4xConsiderando a Recuperação do Quadro de imagem da GPU!
Desempenho?
OpenGL - 670 linhas◈ Inicialização de OpenGL◈ Compilação e loading de Shaders◈ Operação direta em GPU
OpenCV - 70 linhas◈ Uso de Bibliotecas Prontas – OpenCV◈ Execução na CPU (+NEON)
Pouca documentação sobre Processamento de Imagens em GPU
Application Note 4629 da Freescale
Resultados podem ser aprimorados…?
Técnica de recuperação dos quadros da GPU
Programação da GPU via Shaders
Podem ser aplicados mais filtros!
Dependência de Drivers para acesso a recursos da GPU via OpenGL!
Ponto a ser observado na plataforma-alvo
Fabricante disponibiliza drivers?
Demonstração
Raspberry Pi 2 com LapDock usando a Raspberry Pi Camera Board
Acesso a GPU com drivers da Broadcom
Obrigado!
Perguntas?
Contato
@andremlcurvello
http://youtube.com/profandrecurvello
http://andrecurvello.com.br
http://facebook.com/profandrecurvello