33
Processamento de Imagem em GPU com OpenGL Prof. André Márcio de Lima Curvello [email protected]

TDC2016 - Processamento de Imagem em GPU com OpenGL

Embed Size (px)

Citation preview

Page 1: TDC2016 - Processamento de Imagem em GPU com OpenGL

Processamento de

Imagem em GPU

com OpenGLProf. André Márcio de Lima Curvello

[email protected]

Page 2: TDC2016 - Processamento de Imagem em GPU com OpenGL

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

Page 3: TDC2016 - Processamento de Imagem em GPU com OpenGL

“Computação não se

relaciona mais a

computadores.

Relaciona-se a viver.

Nicholas Negroponte

Page 4: TDC2016 - Processamento de Imagem em GPU com OpenGL

Processamento de

Imagens

Vamos ver do que se trataE por quê isso é importante…

1

Page 5: TDC2016 - Processamento de Imagem em GPU com OpenGL

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.

Page 6: TDC2016 - Processamento de Imagem em GPU com OpenGL

Visão Computacional

◈ Análise de imagens e vídeos a fim de obterresultados similares àqueles dos humanos.

Page 7: TDC2016 - Processamento de Imagem em GPU com OpenGL

Fluxo do Processo

Page 8: TDC2016 - Processamento de Imagem em GPU com OpenGL

Mercado

Dispositivos com interação visual!

Page 9: TDC2016 - Processamento de Imagem em GPU com OpenGL

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.

Page 10: TDC2016 - Processamento de Imagem em GPU com OpenGL

DESAFIO

Page 11: TDC2016 - Processamento de Imagem em GPU com OpenGL

Usando a GPUUm parceiro de peso!

Page 12: TDC2016 - Processamento de Imagem em GPU com OpenGL

Inspiração

Page 13: TDC2016 - Processamento de Imagem em GPU com OpenGL

◈ Conjunto de Rotinas para Computação Gráfica

◈ Sistemas Embarcados◈ Execução na GPU◈ Programas⬥ Vertex Shader⬥ Fragment Shader

OpenGL ES 2.0

Page 14: TDC2016 - Processamento de Imagem em GPU com OpenGL

OpenGL ES 2.0

Fonte: www.nxp.com

Fonte: www.nxp.com

Page 15: TDC2016 - Processamento de Imagem em GPU com OpenGL

Abordagem Tradicional

Usando

somente

CPU!

Page 16: TDC2016 - Processamento de Imagem em GPU com OpenGL

Abordagem Tradicional

Page 17: TDC2016 - Processamento de Imagem em GPU com OpenGL

Usando a GPU com OpenGL ES 2.0

Fonte: www.apple.com

Como tratar a imagem?

• Cubo

• Textura

• Shaders

Page 18: TDC2016 - Processamento de Imagem em GPU com OpenGL

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

Page 19: TDC2016 - Processamento de Imagem em GPU com OpenGL

GPU Vivante GC2000

◈ GC2000: OpenGL ES / OpenCL / OpenCL EP 1.1◈ GC355: OpenVG◈ GC320: Composition

Page 20: TDC2016 - Processamento de Imagem em GPU com OpenGL

Modelo

Fonte: http://homepages.inf.ed.ac.uk

• 320x240

• 640x480

• 800x600

• 1280x720

Page 21: TDC2016 - Processamento de Imagem em GPU com OpenGL

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.

Page 22: TDC2016 - Processamento de Imagem em GPU com OpenGL

Execução

OpenCV – CPU

OpenGL - GPU

Page 23: TDC2016 - Processamento de Imagem em GPU com OpenGL

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

Page 24: TDC2016 - Processamento de Imagem em GPU com OpenGL

Observação!

Recuperação de dados – Read Back

Fonte: http://vgl-ait.orgFonte: http://vgl-ait.org

• glReadPixels()

• FrameBuffer

• OpenCV – Mat

• Flip

Page 25: TDC2016 - Processamento de Imagem em GPU com OpenGL

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

Page 26: TDC2016 - Processamento de Imagem em GPU com OpenGL

Ganho de 9xOperando Diretamente em GPU

Real - 4xConsiderando a Recuperação do Quadro de imagem da GPU!

Desempenho?

Page 27: TDC2016 - Processamento de Imagem em GPU com OpenGL

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)

Page 28: TDC2016 - Processamento de Imagem em GPU com OpenGL

Comparando com Solução Comercial

Fonte: http://www.itseez.com

Page 29: TDC2016 - Processamento de Imagem em GPU com OpenGL

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?

Page 30: TDC2016 - Processamento de Imagem em GPU com OpenGL
Page 31: TDC2016 - Processamento de Imagem em GPU com OpenGL

Demonstração

Raspberry Pi 2 com LapDock usando a Raspberry Pi Camera Board

Acesso a GPU com drivers da Broadcom

Page 32: TDC2016 - Processamento de Imagem em GPU com OpenGL

Obrigado!

Perguntas?

Page 33: TDC2016 - Processamento de Imagem em GPU com OpenGL

Contato

@andremlcurvello

http://youtube.com/profandrecurvello

http://andrecurvello.com.br

[email protected]

http://facebook.com/profandrecurvello