Campus Party - Computer Vision

Preview:

DESCRIPTION

This was the vision lecture I've presented in Campus Party 2009

Citation preview

ITA

Daniel Lélis Baggiodanielbaggio@gmail.com

TORP – The Open Robot ProjectMódulo de Visão Computacional

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 2

Tópicos

O que é a visão computacional? Como os computadores veem? Filtros OpenCV Algoritmos

– Segmentação por cor

– Detecção de movimento por diferença absoluta

– Classificadores: detecção de faces

– Fluxo óptico

– Estimativa de posição e rotação 3D

– Leitura de caracteres

Módulo de visão computacional do TORP

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 3

Usos de visão computacional Reconhecimento

– Objetos, classes de objetos

• Ex: Reconhecimento facial, veículos

Imagens médicas

– IVUS, tomografia computacional

Visão estéreo

Detecção de movimento, tracking

Augmented Reality

Reconstrução de cenas: SLAM

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 4

SLAM – Simultaneous Localization and Mapping

http://www.youtube.com/watch?v=bq5HZzGF3vQ

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 5

SLAM – Simultaneous Localization and Mapping

The Mobile Robot Programming Toolkit (MRPT)

http://babel.isa.uma.es/mrpt/index.php/Main_Page

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 6

Visão Estéreo

Profundidade

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 7

Visão Estéreo

Profundidade

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 8

Visão Estéreo

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 9

Visão Estéreo

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 10

Visão Estéreo

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 11

Visão Estéreo – mapa de profundidade

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 12

Augmented Reality

http://www.youtube.com/watch?v=enXTKvhE7yk

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 13

Tópicos

O que é a visão computacional? Como os computadores veem? Filtros OpenCV Algoritmos

– Segmentação por cor

– Detecção de movimento por diferença absoluta

– Classificadores: detecção de faces

– Fluxo óptico

– Estimativa de posição e rotação 3D

– Leitura de caracteres

Módulo de visão computacional do TORP

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 14

Como os computadores veem?

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 15

Como os computadores veem?

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 16

O que é uma imagem?

Vetor 2d de pixels

Imagens binárias:

– Pixels são bits

Imagens em tom de

cinza:

– Pixels são escalares

Imagens coloridas:

– Pixels são vetores

– A ordem pode variar (RGB, BGR, HSV, YUV)

– Podem conter um canal alpha para sobreposições

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 17

O que é uma imagem?

Vetor 2d de pixels

Imagens binárias:

– Pixels são bits

Imagens em tom de

cinza:

– Pixels são escalares

Imagens coloridas:

– Pixels são vetores

– A ordem pode variar (RGB, BGR, HSV, YUV)

– Podem conter um canal alpha para sobreposições

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 18

O que é uma imagem?

Vetor 2d de pixels

Imagens binárias:

– Pixels são bits

Imagens em tom de

cinza:

– Pixels são escalares

Imagens coloridas:

– Pixels são vetores

– A ordem pode variar (RGB, BGR, HSV, YUV)

– Podem conter um canal alpha para sobreposições

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 19

O que é uma imagem?

Vetor 2d de pixels

Imagens binárias:

– Pixels são bits

Imagens em tom de

cinza:

– Pixels são escalares

Imagens coloridas:

– Pixels são vetores

– A ordem pode variar (RGB, BGR, HSV, YUV)

– Podem conter um canal alpha para sobreposições

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 20

O que é uma imagem?

Vetor 2d de pixels

Imagens binárias:

– Pixels são bits

Imagens em tom de

cinza:

– Pixels são escalares

Imagens coloridas:

– Pixels são vetores

– A ordem pode variar (RGB, BGR, HSV, YUV)

– Podem conter um canal alpha para sobreposições

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 21

Tópicos

O que é a visão computacional? Como os computadores veem? Filtros OpenCV Algoritmos

– Segmentação por cor

– Detecção de movimento por diferença absoluta

– Classificadores: detecção de faces

– Fluxo óptico

– Estimativa de posição e rotação 3D

– Leitura de caracteres

Módulo de visão computacional do TORP

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 22

Imagens ruidosas e filtros: Gaussian Blur

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 23

Imagens ruidosas e filtros: Gaussian Blur

Gaussian Blur

Blur simples (convolução 3x3):

1 2 1

2 4 2

1 2 1

Como filtrar uma imagem no GIMP?

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 24

Tópicos

O que é a visão computacional? Como os computadores veem? Filtros OpenCV Algoritmos

– Segmentação por cor

– Detecção de movimento por diferença absoluta

– Classificadores: detecção de faces

– Fluxo óptico

– Estimativa de posição e rotação 3D

– Leitura de caracteres

Módulo de visão computacional do TORP

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 25

OpenCV

Biblioteca open source de visão computacional

http://sourceforge.net/projects/opencvlibrary/

Desenvolvida e mantida pela Intel

Escrita em C e C++, roda em Linux, Windows e Mac

OS X com interfaces para Python, Ruby, Matlab e

outras linguagens. Otimizada para aplicações em

tempo real (> 15 fps)

Prover infra-estrutura para aplicações de visão

computacional de fácil utilização: mais de 500 funções

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 26

OpenCV

Composta por 4 sub-módulos:

CV

Processamento de imagens

Algoritmos de visão

MLL

Classificadores estatísticos

Ferramentas de clusterização

HighGUI

GUI, entrada e

saída

de imagens e vídeos

CXCore

estruturas básicas e

algoritmos, suporte a XML,

funções de desenho

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 27

Tópicos

O que é a visão computacional? Como os computadores veem? Filtros OpenCV Algoritmos

– Segmentação por cor

– Detecção de movimento por diferença absoluta

– Classificadores: detecção de faces

– Fluxo óptico

– Estimativa de posição e rotação 3D

– Leitura de caracteres

Módulo de visão computacional do TORP

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 28

Camshift - Continuously Adaptive Mean Shift Algorithm

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 29

Camshift - Continuously Adaptive Mean Shift Algorithm

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 30

Camshift

Demonstração

Onde encontrar o software?

– Programas de demonstração da biblioteca OpenCv

• /usr/local/share/opencv/samples/c/camshiftdemo

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 31

Tópicos

O que é a visão computacional? Como os computadores veem? Filtros OpenCV Algoritmos

– Segmentação por cor

– Detecção de movimento por diferença absoluta

– Classificadores: detecção de faces

– Fluxo óptico

– Estimativa de posição e rotação 3D

– Leitura de caracteres

Módulo de visão computacional do TORP

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 32

Detecção de movimentos - Diferença absoluta

cvAbsDiff(frame1gray,frame2gray,result)

cvShowImage("res",result)

cvThreshold(result,result,30,255,CV_THRESH_BINARY)

cvShowImage("res1",result)

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 33

Detecção de movimentos - Diferença absoluta

Importante: desabilitar ganho automático da webcam

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 34

Tópicos

O que é a visão computacional? Como os computadores veem? Filtros OpenCV Algoritmos

– Segmentação por cor

– Detecção de movimento por diferença absoluta

– Classificadores: detecção de faces

– Fluxo óptico

– Estimativa de posição e rotação 3D

– Leitura de caracteres

Módulo de visão computacional do TORP

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 35

Cascata de classificadores – Viola Jones

Detecção de feições

Face tracking

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 36

Features Retângulos Fáceis de serem calculados

– Áreas brancas são subtraídas das áreas pretas– Integral Image – Representação especial que torna a

extração da feature mais rápida

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 37

Cálculo das Features – Integral Image

Soma dos valores de cada pixel (x,y)– Pode ser rapidamente computada com somente uma

passagem pela imagem

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 38

Cálculo das Features Soma no interior de um Retângulo

– Sejam A, B, C e D os valores dos retângulos considerando-se o canto superior esquerdo da imagem

– Logo, a soma dos valores do retângulo ABCD é dada por:• SOMA = A – B – C + D

Somente três adições são necessárias para qualquer tamanho de retângulo!

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 39

AdaBoost: Super Efficient Features Selector

Classificadores fracos = Features

A cada iteração:– Calculam-se os valores de cada feature em cada exemplar– Ordenam-se os exemplares pelos valores dos features– Seleciona-se o melhor feature / threshold– Recalculam-se os pesos dos exemplar

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 40

Principais features identificadas

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 41

Principais features identificadas

Classificador extremamente rápido (60 microinstruções)

Ajustado para detectar 100% das faces, com 40% de falsos positivos no primeiro estágio

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 42

Cascata de classificadores: visando tempo-real

Prioridade de rejeição de background nos estágios iniciais

Imagem em escala de cinza (8 bits), 320x240, 500 mil janelas

Tempo de deteção ~ 10ms (1 face) ~20 ms (nenhuma face)

25 estágios, 2912 features, menor janela 24x24

Otimizado para encontrar apenas a maior face

70% a 80% das janelas são rejeitadas nos 2 primeiros estágios

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 43

Pré processamento Conversão para escala de cinza

– cvCvtColor( img, cinza, CV_BGR2GRAY );

• RGB[A]->Gray: Y<-0.299*R + 0.587*G + 0.114*B

Redimensionamento

– cvResize( cinza, imagem_reduzida, CV_INTER_LINEAR );

Normalização de brilho

– cvEqualizeHist( imagem_reduzida, imagem_reduzida );

• 1. calcular histograma H para src.

• 2. normalizar histograma, de forma que a soma seja 255.

• 3. computar a integral do histograma:

• H’(i) = somatório0≤j≤iH(j)

• 4. transformar a imagem usando H’ como look-up table: dst(x,y)=H’(src(x,y))

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 44

Face Tracker

Onde encontrar o software?

– Programas de demonstração da biblioteca OpenCv

• /usr/local/share/opencv/samples/c/facedetect

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 45

Tópicos

O que é a visão computacional? Como os computadores veem? Filtros OpenCV Algoritmos

– Segmentação por cor

– Detecção de movimento por diferença absoluta

– Classificadores: detecção de faces

– Fluxo óptico

– Estimativa de posição e rotação 3D

– Leitura de caracteres

Módulo de visão computacional do TORP

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 46

Optical Flow

Objetivo: recuperar vetores de movimento aparente

entre um par de imagens

Pode-se utilizar o algoritmo de Lucas-Kanade para

verificar a velocidade de cada feição

Método diferencial de dois framesI(x,y,z,t) = I(x + δx,y + δy,z + δz,t + δt)

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 47

Lucas-Kanade

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 48

Lucas-Kanade

Demostração do Lucas Kanade

Onde encontrar o software?

– Programas de demonstração da biblioteca OpenCv

• /usr/local/share/opencv/samples/c/lkdemo

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 49

Tópicos

O que é a visão computacional? Como os computadores veem? Filtros OpenCV Algoritmos

– Segmentação por cor

– Detecção de movimento por diferença absoluta

– Classificadores: detecção de faces

– Fluxo óptico

– Estimativa de posição e rotação 3D

– Leitura de caracteres

Módulo de visão computacional do TORP

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 50

POSIT: “Pose from Orthography and Scaling with Iteration” Estimar posicionamento e rotação 3D de um objeto

conhecido

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 51

POSIT - “Model-based object pose in 25 lines of code” D. DeMenthon and L. S. Davis

Solução iterativa para o problema de

encontrar o vetor de translação e a

matriz de rotação (6 graus de

liberdade)

Supor inicialmente que todos os

pontos têm a mesma profundidade

Solução de sistema linear super-

determinado. Decomposição SVD e

cálculo de pseudo-inversa

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 52

EHCI – Enhanced Human Computer Interaction

Utilização do algoritmo Posit para obter head tracking

com 6 graus de liberdade

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 53

EHCI – Enhanced Human Computer Interaction

http://code.google.com/p/ehci/

Demonstração EHCI

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 54

Tópicos

O que é a visão computacional? Como os computadores veem? Filtros OpenCV Algoritmos

– Segmentação por cor

– Detecção de movimento por diferença absoluta

– Classificadores: detecção de faces

– Fluxo óptico

– Estimativa de posição e rotação 3D

– Leitura de caracteres

Módulo de visão computacional do TORP

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 55

Reconhecimento de Caracteres - OCR

Bibliotecas:

– OCR Opus http://code.google.com/p/ocropus/

– Tesseract http://code.google.com/p/tesseract-ocr/

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 56

Reconhecimento de Caracteres - OCR

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 57

Tópicos

O que é a visão computacional? Como os computadores veem? Filtros OpenCV Algoritmos

– Segmentação por cor

– Detecção de movimento por diferença absoluta

– Classificadores: detecção de faces

– Fluxo óptico

– Estimativa de posição e rotação 3D

– Leitura de caracteres

Módulo de visão computacional do TORP

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 58

Arquitetura de visão computacional do TORP

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 59

Instalação de drivers – UVC PWC

USB Video Device Class - Linux

– http://linux-uvc.berlios.de/

Philips USB Webcam driver for Linux

– http://www.saillard.org/linux/pwc/

Instalação dos drivers para Gumstix

– http://www.theopenrobotproject.org/tiki-index.php?

page=Installation+Instructions

V4L, V4L2: APIs para captura de vídeo para Linux

– http://linuxtv.org/v4lwiki/index.php/Main_Page

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 60

Mjpeg streamer

Servidor http + obtenção frames UVC

./mjpg_streamer -o "output_http.so -w ./www"

http://sourceforge.net/projects/mjpg-streamer/

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 61

Referências

Gary Bradsky & Adrian Kaehler “Learning OpenCV”

D. DeMenthon and L. S. Davis “Model-based object

pose in 25 lines of code”

Jean-Yves Bouguet. “Pyramidal Implementation of

the Lucas Kanade Feature Tracker Description of

the algorithm”

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 62

Referências

Rainer Lienhart and Jochen Maydt. “An Extended Set

of Haar-like Features for Rapid Object Detection.”

Submitted to ICIP2002

Viola, P; Jones, M. “Rapid Object Detection Using a

Boosted Cascade of Simple Features – (2004)”

Alexander Kuranov, Rainer Lienhart, and Vadim

Pisarevsky. “An Empirical Analysis of Boosting

Algorithms for Rapid Objects With an Extended Set

of Haar-like Features”. Intel Technical Report MRL-

TR-July02-01, 2002

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 63

Agradecimentos

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 64

Agradecimentos

The Open Robot Project | Módulo de Visão Computacional | danielbaggio@gmail.com | 65

Dúvidas, sugestões e contribuições

Daniel Lélis Baggio

danielbaggio@gmail.com

Recommended