25
1 Introdução à visão computacional utilizando software livre Msc. Mauro Carlos Pichiliani ([email protected])

Introdução à visão computacional utilizando software livre

Embed Size (px)

DESCRIPTION

Esta é a palestra Introdução à visão computacional apresentada na Campus Party 2009 Brasil, dia 21/01/2009, 11:00 no espaço BarCamp.

Citation preview

1

Introdução à visão computacional utilizando software livre

Msc. Mauro Carlos Pichiliani ([email protected])

2

Roteiro

• Introdução à Visão Computacional• A biblioteca OpenCV• Demos• Exemplos: Usabilidade• Exemplos: Vigilância• Exemplos: Entretenimento• Exemplos: Realidade aumentada• Exemplos: Robótica• Conclusão

3

• Sub-área da computação gráfica• Máquinas que enxergam• Manipulação de imagem e vídeo• Envolve detecção, reconhecimento,

aprendizado e restauração• Utilizada em várias áreas

Introdução à Visão Computacional

4

Visão Computacional - Fluxo

Aquisição de imagem

Pré-processamento

Detecção e segmentação

Processamento de alto nível

Extração de características

5

Biblioteca OpenCV

Open Source Computer Vision Library Criada pela Intel (Intel License Agreement – quase GPL) Usos: Human-Computer Interaction (HCI); Object Identification,

Segmentation and Recognition; Face Recognition; Gesture Recognition; Motion Tracking, Ego Motion, Motion Understanding; Structure From Motion (SFM);  and Mobile Robotics.

Alta performance de processamento Trabalha com imagens, vídeo, webcam e outros dispositivos Originalmente em C, mas há ports para Java e C# Linux/Windows/Max OS Intel: http://www.intel.com/technology/computing/opencv/index.htm SF: http://sourceforge.net/projects/opencvlibrary/?abmode=1

6

Dispositivos

Câmeras USB e FireWire: Qualquer câmera Windows Compatible Qualquer câmera compatível com o Mac OS Linux: http://www.linux-usb.org/ e

http://www.qbik.ch/usb/devices/ É preciso dos drivers

Imagens (compactadas ou não) Arquivos de vídeo (depende do codec) Placas de captura de vídeo Câmeras de dispositivos móveis (celulares e smartphones) Considerar Precisão x Qualidade do dispositivo

7

Demo 1: Hello Word com OpenCV#include <cv.h>#include <highgui.h>

int main ( int argc, char **argv ){ // Cria a janela cvNamedWindow( “MinhaJanela", 1 ); // Cria a imagem IplImage *img = cvCreateImage( cvSize( 640, 480 ), IPL_DEPTH_8U, 1 );

CvFont font; double hScale = 1.0; double vScale = 1.0; int lineWidth = 1;

cvInitFont( &font, CV_FONT_HERSHEY_SIMPLEX | CV_FONT_ITALIC, hScale, vScale, 0, lineWidth ); // Seta a fonte cvPutText( img, "Hello World!", cvPoint( 200, 400 ), &font, cvScalar( 255, 255, 0 ) ); // Escreve o Hello Word cvShowImage( "My Window", img ); // Coloca a imagem na janela cvWaitKey(); // Aguarda Tecla return 0;}

8

Demo 2: Capturando vídeo#include "cv.h"#include "highgui.h"#include <stdio.h>

int main() { CvCapture* capture = cvCaptureFromCAM( CV_CAP_ANY ); // Captura da câmera

if( !capture ) { fprintf( stderr, "ERROR: capture is NULL \n" ); getchar(); return -1; }

cvNamedWindow( "mywindow", CV_WINDOW_AUTOSIZE ); //Joga em uma janela

while( 1 ) { // Loop infino para continuar capturando o vídeo IplImage* frame = cvQueryFrame( capture ); // Obtém um frame if( !frame ) { fprintf( stderr, "ERROR: frame is null...\n" ); getchar(); break; }

cvShowImage( "mywindow", frame ); // Mostra a imagem

if( (cvWaitKey(10) & 255) == 27 ) break; // Espera um caracter do teclado }

cvReleaseCapture( &capture ); // Libera o vídeo cvDestroyWindow( "mywindow" ); // Libera a janela return 0;}

9

Demo 3: Detecção objetos/Face#include <cv.h>#include <highgui.h>#include <math.h>

int main(int argc, char** argv){ IplImage* img; if( argc == 2 && (img=cvLoadImage(argv[1], 1))!= 0) { IplImage* gray = cvCreateImage( cvGetSize(img), 8, 1 ); // Cria a imagem CvMemStorage* storage = cvCreateMemStorage(0); cvCvtColor( img, gray, CV_BGR2GRAY ); cvSmooth( gray, gray, CV_GAUSSIAN, 9, 9 ); // Branco e preto // Detecta os círculos! CvSeq* circles = cvHoughCircles( gray, storage, CV_HOUGH_GRADIENT, 2, gray->height/4, 200, 100 ); for( int i = 0; i < circles->total; i++ ) { float* p = (float*)cvGetSeqElem( circles, i ); cvCircle( img, cvPoint(cvRound(p[0]),cvRound(p[1])), 3, CV_RGB(0,255,0), -1,

8, 0 ); cvCircle( img, cvPoint(cvRound(p[0]),cvRound(p[1])), cvRound(p[2]),

CV_RGB(255,0,0), 3, 8, 0 ); } cvNamedWindow( "circles", 1 ); cvShowImage( "circles", img ); } return 0;}

10

Exemplos: Usabilidade (1)

Detecção da face para movimentação do mouse:

11

Exemplos: Usabilidade (2)

Rastreamento ocular para movimentação do mouse:

12

Exemplos: Usabilidade (3)

Movimentação do mouse com palma da mão:

13

Exemplos: Usabilidade (4)

Teclado virtual (Minority Report):

14

Exemplos: Vigilância (1)

Rastreamento de pessoas/objetos:

15

Exemplos: Vigilância (2)

Rastreamento de veículos/estrada:

16

Exemplos: Entretenimento (1)

DJ Virtual:

17

Exemplos: Entretenimento (2) Jogos!

18

Exemplos: Entretenimento (3) Playstation Eye

19

Exemplos: Entretenimento (4) Bateria Virtual - Virtual Drums

20

Exemplos: Realidade Aumentada (1) Jogo de naves

21

Exemplos: Realidade Aumentada (2) Exemplo de R.A. com câmera de smartphone

22

Exemplos: Robótica Área que provavelmente mais utiliza Visão Computacional Exemplos:

23

Conclusão

OpenCV: excelente biblioteca livre para visão computacional Alguns reconhecimentos são complexos. É possível criar

novos reconhecedores Existem bibliotecas específicas para certas funções

(Realidade Aumentada, Realidade Virtual, Chroma Key, Robótica, etc)

Depende da precisão do dispositivo (câmera) Várias aplicações em diversas áreas Forte comunidade de desenvolvedores e ótima

documentação A imaginação é o limite

24

Obrigado!

Perguntas? E-mail: [email protected] Download do OpenCV: Intel: http://www.intel.com/technology/computing/opencv/index.htm Source Forge: http://sourceforge.net/projects/opencvlibrary/?abmode=1

Mais exemplos?

25

Mais exemplos

Aplicação de exemplo de deteção de elementos em movimento http://www.codeproject.com/KB/audio-video/Motion_Detection.aspx

Descobrir distâncias curtas com uma WebCam e uma apontador laser:http://www.pages.drexel.edu/~twd25/webcam_laser_ranger.html

Leitor de código de barras com uma WebCam:http://www.vivaolinux.com.br/artigo/Zebra-Barcode-Reader-Lendo-codigo-de-barras-

com-a-sua-Webcam-no-Linux/

Exemplos de projetos gerais que envolvem uma WebCamhttp://www.raphnet.net/divers/webcam/webcam_en.php