Introdução à visão computacional utilizando software livre Msc. Mauro Carlos Pichiliani (pichilia@ita.br)
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
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
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
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
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
Demo 1: Hello Word com OpenCV #include <cv.h> #include <highgui.h> int main ( int argc, char **argv ) { // Cria a janela cvNamedWindow( “MinhaJanela&quot;, 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, &quot;Hello World!&quot;, cvPoint( 200, 400 ), &font, cvScalar( 255, 255, 0 ) ); // Escreve o Hello Word cvShowImage( &quot;My Window&quot;, img ); // Coloca a imagem na janela cvWaitKey(); // Aguarda Tecla return 0; }
Demo 2: Capturando vídeo #include &quot;cv.h&quot; #include &quot;highgui.h&quot; #include <stdio.h> int main() { CvCapture* capture = cvCaptureFromCAM( CV_CAP_ANY ); // Captura da câmera if( !capture ) { fprintf( stderr, &quot;ERROR: capture is NULL \n&quot; ); getchar();  return -1; } cvNamedWindow( &quot;mywindow&quot;, 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, &quot;ERROR: frame is null...\n&quot; ); getchar();  break; } cvShowImage( &quot;mywindow&quot;, frame ); // Mostra a imagem if( (cvWaitKey(10) & 255) == 27 ) break; // Espera um caracter do teclado } cvReleaseCapture( &capture );  // Libera o vídeo cvDestroyWindow( &quot;mywindow&quot; ); // Libera a janela return 0; }
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( &quot;circles&quot;, 1 ); cvShowImage( &quot;circles&quot;, img ); } return 0; }
Exemplos: Usabilidade (1) Detecção da face para movimentação do mouse:
Exemplos: Usabilidade (2) Rastreamento ocular para movimentação do mouse:
Exemplos: Usabilidade (3) Movimentação do mouse com palma da mão:
Exemplos: Usabilidade (4) Teclado virtual (Minority Report):
Exemplos: Vigilância (1) Rastreamento de pessoas/objetos:
Exemplos: Vigilância (2) Rastreamento de veículos/estrada:
Exemplos: Entretenimento (1) DJ Virtual:
Exemplos: Entretenimento (2) Jogos!
Exemplos: Entretenimento (3) Playstation Eye
Exemplos: Entretenimento (4) Bateria Virtual - Virtual Drums
Exemplos: Realidade Aumentada (1) Jogo de naves
Exemplos: Realidade Aumentada (2) Exemplo de R.A. com câmera de smartphone
Exemplos: Robótica Área que provavelmente mais utiliza Visão Computacional Exemplos:
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
Obrigado! Perguntas? E-mail:  [email_address] Download do OpenCV: Intel: http://www.intel.com/technology/computing/opencv/index.htm Source Forge:  http ://sourceforge.net/projects/opencvlibrary/?abmode=1 Mais exemplos?
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 WebCam http://www.raphnet.net/divers/webcam/webcam_en.php

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

  • 1.
    Introdução à visãocomputacional utilizando software livre Msc. Mauro Carlos Pichiliani (pichilia@ita.br)
  • 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çãográ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 OpenSource 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 USBe 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: HelloWord com OpenCV #include <cv.h> #include <highgui.h> int main ( int argc, char **argv ) { // Cria a janela cvNamedWindow( “MinhaJanela&quot;, 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, &quot;Hello World!&quot;, cvPoint( 200, 400 ), &font, cvScalar( 255, 255, 0 ) ); // Escreve o Hello Word cvShowImage( &quot;My Window&quot;, img ); // Coloca a imagem na janela cvWaitKey(); // Aguarda Tecla return 0; }
  • 8.
    Demo 2: Capturandovídeo #include &quot;cv.h&quot; #include &quot;highgui.h&quot; #include <stdio.h> int main() { CvCapture* capture = cvCaptureFromCAM( CV_CAP_ANY ); // Captura da câmera if( !capture ) { fprintf( stderr, &quot;ERROR: capture is NULL \n&quot; ); getchar(); return -1; } cvNamedWindow( &quot;mywindow&quot;, 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, &quot;ERROR: frame is null...\n&quot; ); getchar(); break; } cvShowImage( &quot;mywindow&quot;, frame ); // Mostra a imagem if( (cvWaitKey(10) & 255) == 27 ) break; // Espera um caracter do teclado } cvReleaseCapture( &capture ); // Libera o vídeo cvDestroyWindow( &quot;mywindow&quot; ); // Libera a janela return 0; }
  • 9.
    Demo 3: Detecçãoobjetos/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( &quot;circles&quot;, 1 ); cvShowImage( &quot;circles&quot;, 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.
  • 17.
  • 18.
  • 19.
    Exemplos: Entretenimento (4)Bateria Virtual - Virtual Drums
  • 20.
  • 21.
    Exemplos: Realidade Aumentada(2) Exemplo de R.A. com câmera de smartphone
  • 22.
    Exemplos: Robótica Áreaque provavelmente mais utiliza Visão Computacional Exemplos:
  • 23.
    Conclusão OpenCV: excelentebiblioteca 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_address] 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çãode 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 WebCam http://www.raphnet.net/divers/webcam/webcam_en.php