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

8.009 visualizações

Publicada em

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

Publicada em: Tecnologia
0 comentários
10 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
8.009
No SlideShare
0
A partir de incorporações
0
Número de incorporações
27
Ações
Compartilhamentos
0
Downloads
290
Comentários
0
Gostaram
10
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

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

  1. 1. Introdução à visão computacional utilizando software livre Msc. Mauro Carlos Pichiliani (pichilia@ita.br)
  2. 2. Roteiro <ul><li>Introdução à Visão Computacional </li></ul><ul><li>A biblioteca OpenCV </li></ul><ul><li>Demos </li></ul><ul><li>Exemplos: Usabilidade </li></ul><ul><li>Exemplos: Vigilância </li></ul><ul><li>Exemplos: Entretenimento </li></ul><ul><li>Exemplos: Realidade aumentada </li></ul><ul><li>Exemplos: Robótica </li></ul><ul><li>Conclusão </li></ul>
  3. 3. <ul><li>Sub-área da computação gráfica </li></ul><ul><li>Máquinas que enxergam </li></ul><ul><li>Manipulação de imagem e vídeo </li></ul><ul><li>Envolve detecção, reconhecimento, aprendizado e restauração </li></ul><ul><li>Utilizada em várias áreas </li></ul>Introdução à Visão Computacional
  4. 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. 5. Biblioteca OpenCV <ul><li>Open Source Computer Vision Library </li></ul><ul><li>Criada pela Intel (Intel License Agreement – quase GPL) </li></ul><ul><li>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. </li></ul><ul><li>Alta performance de processamento </li></ul><ul><li>Trabalha com imagens, vídeo, webcam e outros dispositivos </li></ul><ul><li>Originalmente em C, mas há ports para Java e C# </li></ul><ul><li>Linux/Windows/Max OS </li></ul><ul><li>Intel: http://www.intel.com/technology/computing/opencv/index.htm </li></ul><ul><li>SF: http://sourceforge.net/projects/opencvlibrary/ ? abmode =1 </li></ul>
  6. 6. Dispositivos <ul><li>Câmeras USB e FireWire: </li></ul><ul><ul><li>Qualquer câmera Windows Compatible </li></ul></ul><ul><ul><li>Qualquer câmera compatível com o Mac OS </li></ul></ul><ul><ul><li>Linux: http://www.linux-usb.org/ e http://www.qbik.ch/usb/devices/ </li></ul></ul><ul><ul><li>É preciso dos drivers </li></ul></ul><ul><li>Imagens (compactadas ou não) </li></ul><ul><li>Arquivos de vídeo (depende do codec) </li></ul><ul><li>Placas de captura de vídeo </li></ul><ul><li>Câmeras de dispositivos móveis (celulares e smartphones) </li></ul><ul><li>Considerar Precisão x Qualidade do dispositivo </li></ul>
  7. 7. 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; }
  8. 8. 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 &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... &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. 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( &quot;circles&quot;, 1 ); cvShowImage( &quot;circles&quot;, img ); } return 0; }
  10. 10. Exemplos: Usabilidade (1) <ul><li>Detecção da face para movimentação do mouse: </li></ul>
  11. 11. Exemplos: Usabilidade (2) <ul><li>Rastreamento ocular para movimentação do mouse: </li></ul>
  12. 12. Exemplos: Usabilidade (3) <ul><li>Movimentação do mouse com palma da mão: </li></ul>
  13. 13. Exemplos: Usabilidade (4) <ul><li>Teclado virtual (Minority Report): </li></ul>
  14. 14. Exemplos: Vigilância (1) <ul><li>Rastreamento de pessoas/objetos: </li></ul>
  15. 15. Exemplos: Vigilância (2) <ul><li>Rastreamento de veículos/estrada: </li></ul>
  16. 16. Exemplos: Entretenimento (1) <ul><li>DJ Virtual: </li></ul>
  17. 17. Exemplos: Entretenimento (2) <ul><li>Jogos! </li></ul>
  18. 18. Exemplos: Entretenimento (3) <ul><li>Playstation Eye </li></ul>
  19. 19. Exemplos: Entretenimento (4) <ul><li>Bateria Virtual - Virtual Drums </li></ul>
  20. 20. Exemplos: Realidade Aumentada (1) <ul><li>Jogo de naves </li></ul>
  21. 21. Exemplos: Realidade Aumentada (2) <ul><li>Exemplo de R.A. com câmera de smartphone </li></ul>
  22. 22. Exemplos: Robótica <ul><li>Área que provavelmente mais utiliza Visão Computacional </li></ul><ul><li>Exemplos: </li></ul>
  23. 23. Conclusão <ul><li>OpenCV: excelente biblioteca livre para visão computacional </li></ul><ul><li>Alguns reconhecimentos são complexos. É possível criar novos reconhecedores </li></ul><ul><li>Existem bibliotecas específicas para certas funções (Realidade Aumentada, Realidade Virtual, Chroma Key, Robótica, etc) </li></ul><ul><li>Depende da precisão do dispositivo (câmera) </li></ul><ul><li>Várias aplicações em diversas áreas </li></ul><ul><li>Forte comunidade de desenvolvedores e ótima documentação </li></ul><ul><li>A imaginação é o limite </li></ul>
  24. 24. Obrigado! <ul><li>Perguntas? </li></ul><ul><li>E-mail: [email_address] </li></ul><ul><li>Download do OpenCV: </li></ul><ul><li>Intel: </li></ul><ul><li>http://www.intel.com/technology/computing/opencv/index.htm </li></ul><ul><li>Source Forge: </li></ul><ul><li>http ://sourceforge.net/projects/opencvlibrary/?abmode=1 </li></ul><ul><li>Mais exemplos? </li></ul>
  25. 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 WebCam http://www.raphnet.net/divers/webcam/webcam_en.php

×