TDC2016 - Processamento de Imagem em GPU com OpenGL

Preview:

Citation preview

Processamento de

Imagem em GPU

com OpenGLProf. André Márcio de Lima Curvello

contato@andrecurvello.com.br

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

OpenGL ES 2.0

Fonte: www.nxp.com

Fonte: www.nxp.com

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)

Comparando com Solução Comercial

Fonte: http://www.itseez.com

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

contato@andrecurvello.com.br

http://facebook.com/profandrecurvello