Tchelinux 2014 visão computacional

Preview:

Citation preview

Fazendo máquinas enxergarem com OpenCV

TCHÊLINUX 2014Felipe Aguiar Corrêa

felipe.correa@ufpel.edu.br

Quem é esse cara aí?

❏ UFPEL❏ Ciência da Computação❏ Visão Computacional❏ Rastreamento de Pedestres

Visão Computacional

❏ Sub-área da Inteligência Artificial❏ Multidisciplinar❏ Inspiração neurobiológica❏ Dar significado a imagens digitais

Também serve para fazer as

pessoas parecerem

mongolóides pulando na

frente de um televisor

INTRODUÇÃO

Conceito de Imagem Digital

❏ Representação numérica de uma imagem bidimensional em forma binária

❏ Assim permite seu armazenamento ou reprodução por meios eletrônicos

❏ Podem ser do tipo raster ou vetoriais

Imagens do tipo raster

❏ Normalmente representadas em uma matriz m x n onde cada célula descreve um pixel

❏ Imagens de tons de cinza, por exemplo, descrevem a intensidade do tom em cada célula

❏ Imagens do tipo RGB descrevem a cor via distribuição da tripla RGB no pixel

RGB Triplets

Conceito de Imagem Digital II

❏ Imagens digitais não possuem quaisquer informações de contexto, profundidade ou de objetos nelas representados

❏ É tarefa da Visão Computacional obter algum aprendizado a partir do análise das imagens

❏ Detectar objetos, analisar segmentação, estimar profundidade, analisar e detectar eventos e localização, etc

❏ Primeira imagem digitalizada da história

❏ 176x176

❏ Russel Kirsch

❏ National Institute of Standards and Technology (NIST).

Operações de filtros

❏ Filtros são operações numéricas matriciais realizadas na matriz que descreve uma imagem

❏ Ex.: Filtros de soma (tons de cinza)❏ matriz[] + 30 ← clareia imagem❏ matriz[] - 30 ← escurece imagem

❏ Cuidar Overflow e underflow

Visão Computacional e Software Livre...

OpenCV❏ Opensource Computer Vision❏ Originalmente desenvolvido pela Intel Russia em 1999❏ Licença BSD❏ Estrutura modular com módulos para:

❏ Processamento de Imagens❏ Estatística❏ Álgebra Linear❏ Vídeos/Imagens I/O❏ GUI

❏ É mais barato que o Matlab!

Linguagens e Bindings❏ OpenCV foi escrito em C/C++❏ Possui bindings para:

❏ Java❏ Python❏ Visual Basic (ECA!)

❏ Usem Python pois a vida é curta!❏ Numpy, matplotlib e estruturas simples❏ Portável e ideal para embutir em aplicações maiores

❏ Android, BSD, OpenBSD, Windows, Blackberry, Linux e OS X

OpenCV e Visão Computacional

❏ OpenCV possui módulos para Visão Computacional (cv)

❏ Nele está presente os principais algoritmos da área para:❏ detecção de objetos❏ análise de segmentação de imagens❏ rastreamento de alvos❏ entre outros

Detecção de ObjetosAlgoritmo de Viola-Jones e otimização de Lienhart et al (2003)

Algoritmo de Viola-Jones

❏ Proposto por Paul Viola (Microsoft) e Michael Jones (Mitsubishi) em 2001

❏ Abordagem baseado em padrões de aparência treinados❏ obtenção de pontos invariantes de objetos

❏ Estrutura em cascata e em tempo real❏ Uso de imagens integrais para diminuição de custo

de operações

Fluxo do algoritmo1. Treinamento de um descritor de padrões

invariantes (com algoritmo AdaBoost)2. Aplicação dos retângulos classificadores na

imagem3. Bater valor obtidos pelos retângulos com os

treinados do XML4. Caso passe todas etapas, objeto foi

encontrado

Treinamento de Padrões1. Obter imagens positivas2. Obter imagens negativas3. Montar samples de aprendizado com as

possíveis combinações de positivos e negativos

4. Rodar o AdaBoost5. Produto final é um arquivo XML de padrões

haar que descrevem o alvo

Tracklets positivos e samples

XML haar features

Imagens Integrais

Janelas retangulares classificadoras

Otimização de Lienhart

Após estas etapas, qualquer objeto pode ser detectado❏ Praticamente todos objetos do mundo real

possuem padrões invariantes de forma ou cor

❏ Objetos rígidos sólidos tendem a ter uma taxa de acerto maior nesta abordagem❏ Por exemplo: corpos humanos tendem a se dobrar

durante o movimento, o que pode diminuir a taxa de acerto

Voilà

Lenna, 1972

Smartcars que detectam obstáculos

Qualquer objeto mesmo!

http://coding-robin.de/2013/07/22/train-your-own-opencv-haar-classifier.html

Vídeo Viola-Jones

Detectando faces na webcam com OpenCV em Python

❏ cv2.detectMultiScale()❏ scaleFactor❏ minNeighbors❏ minSize

❏ cv2.VideoCapture()

Problemas e discussões

❏ Algoritmo é sensível a oclusões parciais❏ Alguns objetos variam muito de forma e

tamanho❏ É um dos não tão poucos casos que o “bom

senso” e maleabilidade da nossa cognição joga a nosso favor

Detecção X Rastreamento❏ Apenas detectar não significa que algo está

sendo rastreado❏ A cada novo frame de vídeo em que o Viola-

Jones rodar, cada objeto será tratado como um novo objeto

❏ Existem ponderações para rastrear❏ Estatística, comparar histogramas, algoritmos de

associação, estimação de energia contínua, etc

Rastrear partes do corpo humano para controlar interfaces

Rastrear pedestres

❏ Por que seria útil um rastreador de pedestres?

Obrigado!

Perguntas?

Recommended