tdc2016sp - trilha linux embarcado

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

Upload: tdc-globalcode

Post on 14-Jan-2017

46 views

Category:

Education


10 download

TRANSCRIPT

Page 1: TDC2016SP - Trilha Linux Embarcado

Processamento de

Imagem em GPU

com OpenGLProf. André Márcio de Lima Curvello

[email protected]

Page 2: TDC2016SP - Trilha Linux Embarcado

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: TDC2016SP - Trilha Linux Embarcado

“Computação não se

relaciona mais a

computadores.

Relaciona-se a viver.

Nicholas Negroponte

Page 4: TDC2016SP - Trilha Linux Embarcado

Processamento de

Imagens

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

1

Page 5: TDC2016SP - Trilha Linux Embarcado

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: TDC2016SP - Trilha Linux Embarcado

Visão Computacional

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

Page 7: TDC2016SP - Trilha Linux Embarcado

Fluxo do Processo

Page 8: TDC2016SP - Trilha Linux Embarcado

Mercado

Dispositivos com interação visual!

Page 9: TDC2016SP - Trilha Linux Embarcado

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: TDC2016SP - Trilha Linux Embarcado

DESAFIO

Page 11: TDC2016SP - Trilha Linux Embarcado

Usando a GPUUm parceiro de peso!

Page 12: TDC2016SP - Trilha Linux Embarcado

Inspiração

Page 13: TDC2016SP - Trilha Linux Embarcado

◈ 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: TDC2016SP - Trilha Linux Embarcado

OpenGL ES 2.0

Fonte: www.nxp.com

Fonte: www.nxp.com

Page 15: TDC2016SP - Trilha Linux Embarcado

Abordagem Tradicional

Usando

somente

CPU!

Page 16: TDC2016SP - Trilha Linux Embarcado

Abordagem Tradicional

Page 17: TDC2016SP - Trilha Linux Embarcado

Usando a GPU com OpenGL ES 2.0

Fonte: www.apple.com

Como tratar a imagem?

• Cubo

• Textura

• Shaders

Page 18: TDC2016SP - Trilha Linux Embarcado

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: TDC2016SP - Trilha Linux Embarcado

GPU Vivante GC2000

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

Page 20: TDC2016SP - Trilha Linux Embarcado

Modelo

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

• 320x240

• 640x480

• 800x600

• 1280x720

Page 21: TDC2016SP - Trilha Linux Embarcado

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: TDC2016SP - Trilha Linux Embarcado

Execução

OpenCV – CPU

OpenGL - GPU

Page 23: TDC2016SP - Trilha Linux Embarcado

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: TDC2016SP - Trilha Linux Embarcado

Observação!

Recuperação de dados – Read Back

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

• glReadPixels()

• FrameBuffer

• OpenCV – Mat

• Flip

Page 25: TDC2016SP - Trilha Linux Embarcado

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: TDC2016SP - Trilha Linux Embarcado

Ganho de 9xOperando Diretamente em GPU

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

Desempenho?

Page 27: TDC2016SP - Trilha Linux Embarcado

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: TDC2016SP - Trilha Linux Embarcado

Comparando com Solução Comercial

Fonte: http://www.itseez.com

Page 29: TDC2016SP - Trilha Linux Embarcado

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: TDC2016SP - Trilha Linux Embarcado
Page 31: TDC2016SP - Trilha Linux Embarcado

Demonstração

Raspberry Pi 2 com LapDock usando a Raspberry Pi Camera Board

Acesso a GPU com drivers da Broadcom

Page 32: TDC2016SP - Trilha Linux Embarcado

Obrigado!

Perguntas?

Page 33: TDC2016SP - Trilha Linux Embarcado

Contato

@andremlcurvello

http://youtube.com/profandrecurvello

http://andrecurvello.com.br

[email protected]

http://facebook.com/profandrecurvello