Campus Party - Computer Vision

2,347 views

Published on

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

Published in: Technology

Campus Party - Computer Vision

  1. 1. Daniel Lélis Baggio [email_address] TORP – The Open Robot Project Módulo de Visão Computacional
  2. 2. Tópicos <ul><li>O que é a visão computacional? </li></ul><ul><li>Como os computadores veem? </li></ul><ul><li>Filtros </li></ul><ul><li>OpenCV </li></ul><ul><li>Algoritmos </li></ul><ul><ul><li>Segmentação por cor </li></ul></ul><ul><ul><li>Detecção de movimento por diferença absoluta </li></ul></ul><ul><ul><li>Classificadores: detecção de faces </li></ul></ul><ul><ul><li>Fluxo óptico </li></ul></ul><ul><ul><li>Estimativa de posição e rotação 3D </li></ul></ul><ul><ul><li>Leitura de caracteres </li></ul></ul><ul><li>Módulo de visão computacional do TORP </li></ul>
  3. 3. Usos de visão computacional <ul><li>Reconhecimento </li></ul><ul><ul><li>Objetos, classes de objetos </li></ul></ul><ul><ul><ul><li>Ex: Reconhecimento facial, veículos </li></ul></ul></ul><ul><li>Imagens médicas </li></ul><ul><ul><li>IVUS, tomografia computacional </li></ul></ul><ul><li>Visão estéreo </li></ul><ul><li>Detecção de movimento, tracking </li></ul><ul><li>Augmented Reality </li></ul><ul><li>Reconstrução de cenas: SLAM </li></ul>
  4. 4. SLAM – Simultaneous Localization and Mapping http://www.youtube.com/watch?v=bq5HZzGF3vQ
  5. 5. SLAM – Simultaneous Localization and Mapping <ul><li>The Mobile Robot Programming Toolkit (MRPT) http://babel.isa.uma.es/mrpt/index.php/Main_Page </li></ul>
  6. 6. Visão Estéreo <ul><li>Profundidade </li></ul>
  7. 7. Visão Estéreo <ul><li>Profundidade </li></ul>
  8. 8. Visão Estéreo
  9. 9. Visão Estéreo
  10. 10. Visão Estéreo
  11. 11. Visão Estéreo – mapa de profundidade
  12. 12. Augmented Reality http://www.youtube.com/watch?v=enXTKvhE7yk
  13. 13. Tópicos <ul><li>O que é a visão computacional? </li></ul><ul><li>Como os computadores veem? </li></ul><ul><li>Filtros </li></ul><ul><li>OpenCV </li></ul><ul><li>Algoritmos </li></ul><ul><ul><li>Segmentação por cor </li></ul></ul><ul><ul><li>Detecção de movimento por diferença absoluta </li></ul></ul><ul><ul><li>Classificadores: detecção de faces </li></ul></ul><ul><ul><li>Fluxo óptico </li></ul></ul><ul><ul><li>Estimativa de posição e rotação 3D </li></ul></ul><ul><ul><li>Leitura de caracteres </li></ul></ul><ul><li>Módulo de visão computacional do TORP </li></ul>
  14. 14. Como os computadores veem?
  15. 15. Como os computadores veem?
  16. 16. O que é uma imagem? <ul><li>Vetor 2d de pixels </li></ul><ul><li>Imagens binárias: </li></ul><ul><ul><li>Pixels são bits </li></ul></ul><ul><li>Imagens em tom de cinza: </li></ul><ul><ul><li>Pixels são escalares </li></ul></ul><ul><li>Imagens coloridas: </li></ul><ul><ul><li>Pixels são vetores </li></ul></ul><ul><ul><li>A ordem pode variar (RGB, BGR, HSV, YUV)‏ </li></ul></ul><ul><ul><li>Podem conter um canal alpha para sobreposições </li></ul></ul>
  17. 17. O que é uma imagem? <ul><li>Vetor 2d de pixels </li></ul><ul><li>Imagens binárias: </li></ul><ul><ul><li>Pixels são bits </li></ul></ul><ul><li>Imagens em tom de cinza: </li></ul><ul><ul><li>Pixels são escalares </li></ul></ul><ul><li>Imagens coloridas: </li></ul><ul><ul><li>Pixels são vetores </li></ul></ul><ul><ul><li>A ordem pode variar (RGB, BGR, HSV, YUV)‏ </li></ul></ul><ul><ul><li>Podem conter um canal alpha para sobreposições </li></ul></ul>
  18. 18. O que é uma imagem? <ul><li>Vetor 2d de pixels </li></ul><ul><li>Imagens binárias: </li></ul><ul><ul><li>Pixels são bits </li></ul></ul><ul><li>Imagens em tom de cinza: </li></ul><ul><ul><li>Pixels são escalares </li></ul></ul><ul><li>Imagens coloridas: </li></ul><ul><ul><li>Pixels são vetores </li></ul></ul><ul><ul><li>A ordem pode variar (RGB, BGR, HSV, YUV)‏ </li></ul></ul><ul><ul><li>Podem conter um canal alpha para sobreposições </li></ul></ul>
  19. 19. O que é uma imagem? <ul><li>Vetor 2d de pixels </li></ul><ul><li>Imagens binárias: </li></ul><ul><ul><li>Pixels são bits </li></ul></ul><ul><li>Imagens em tom de cinza: </li></ul><ul><ul><li>Pixels são escalares </li></ul></ul><ul><li>Imagens coloridas: </li></ul><ul><ul><li>Pixels são vetores </li></ul></ul><ul><ul><li>A ordem pode variar (RGB, BGR, HSV, YUV)‏ </li></ul></ul><ul><ul><li>Podem conter um canal alpha para sobreposições </li></ul></ul>
  20. 20. O que é uma imagem? <ul><li>Vetor 2d de pixels </li></ul><ul><li>Imagens binárias: </li></ul><ul><ul><li>Pixels são bits </li></ul></ul><ul><li>Imagens em tom de cinza: </li></ul><ul><ul><li>Pixels são escalares </li></ul></ul><ul><li>Imagens coloridas: </li></ul><ul><ul><li>Pixels são vetores </li></ul></ul><ul><ul><li>A ordem pode variar (RGB, BGR, HSV, YUV)‏ </li></ul></ul><ul><ul><li>Podem conter um canal alpha para sobreposições </li></ul></ul>
  21. 21. Tópicos <ul><li>O que é a visão computacional? </li></ul><ul><li>Como os computadores veem? </li></ul><ul><li>Filtros </li></ul><ul><li>OpenCV </li></ul><ul><li>Algoritmos </li></ul><ul><ul><li>Segmentação por cor </li></ul></ul><ul><ul><li>Detecção de movimento por diferença absoluta </li></ul></ul><ul><ul><li>Classificadores: detecção de faces </li></ul></ul><ul><ul><li>Fluxo óptico </li></ul></ul><ul><ul><li>Estimativa de posição e rotação 3D </li></ul></ul><ul><ul><li>Leitura de caracteres </li></ul></ul><ul><li>Módulo de visão computacional do TORP </li></ul>
  22. 22. Imagens ruidosas e filtros: Gaussian Blur
  23. 23. Imagens ruidosas e filtros: Gaussian Blur <ul><li>Gaussian Blur </li></ul><ul><li>Blur simples (convolução 3x3): 1 2 1 2 4 2 1 2 1 </li></ul><ul><li>Como filtrar uma imagem no GIMP? </li></ul>
  24. 24. Tópicos <ul><li>O que é a visão computacional? </li></ul><ul><li>Como os computadores veem? </li></ul><ul><li>Filtros </li></ul><ul><li>OpenCV </li></ul><ul><li>Algoritmos </li></ul><ul><ul><li>Segmentação por cor </li></ul></ul><ul><ul><li>Detecção de movimento por diferença absoluta </li></ul></ul><ul><ul><li>Classificadores: detecção de faces </li></ul></ul><ul><ul><li>Fluxo óptico </li></ul></ul><ul><ul><li>Estimativa de posição e rotação 3D </li></ul></ul><ul><ul><li>Leitura de caracteres </li></ul></ul><ul><li>Módulo de visão computacional do TORP </li></ul>
  25. 25. OpenCV <ul><li>Biblioteca open source de visão computacional http://sourceforge.net/projects/opencvlibrary/ </li></ul><ul><li>Desenvolvida e mantida pela Intel </li></ul><ul><li>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)‏ </li></ul><ul><li>Prover infra-estrutura para aplicações de visão computacional de fácil utilização: mais de 500 funções </li></ul>
  26. 26. OpenCV <ul><li>Composta por 4 sub-módulos: </li></ul>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
  27. 27. Tópicos <ul><li>O que é a visão computacional? </li></ul><ul><li>Como os computadores veem? </li></ul><ul><li>Filtros </li></ul><ul><li>OpenCV </li></ul><ul><li>Algoritmos </li></ul><ul><ul><li>Segmentação por cor </li></ul></ul><ul><ul><li>Detecção de movimento por diferença absoluta </li></ul></ul><ul><ul><li>Classificadores: detecção de faces </li></ul></ul><ul><ul><li>Fluxo óptico </li></ul></ul><ul><ul><li>Estimativa de posição e rotação 3D </li></ul></ul><ul><ul><li>Leitura de caracteres </li></ul></ul><ul><li>Módulo de visão computacional do TORP </li></ul>
  28. 28. Camshift - Continuously Adaptive Mean Shift Algorithm
  29. 29. Camshift - Continuously Adaptive Mean Shift Algorithm
  30. 30. Camshift <ul><li>Demonstração </li></ul><ul><li>Onde encontrar o software? </li></ul><ul><ul><li>Programas de demonstração da biblioteca OpenCv </li></ul></ul><ul><ul><ul><li>/usr/local/share/opencv/samples/c/camshiftdemo </li></ul></ul></ul>
  31. 31. Tópicos <ul><li>O que é a visão computacional? </li></ul><ul><li>Como os computadores veem? </li></ul><ul><li>Filtros </li></ul><ul><li>OpenCV </li></ul><ul><li>Algoritmos </li></ul><ul><ul><li>Segmentação por cor </li></ul></ul><ul><ul><li>Detecção de movimento por diferença absoluta </li></ul></ul><ul><ul><li>Classificadores: detecção de faces </li></ul></ul><ul><ul><li>Fluxo óptico </li></ul></ul><ul><ul><li>Estimativa de posição e rotação 3D </li></ul></ul><ul><ul><li>Leitura de caracteres </li></ul></ul><ul><li>Módulo de visão computacional do TORP </li></ul>
  32. 32. Detecção de movimentos - Diferença absoluta <ul><li>cvAbsDiff(frame1gray,frame2gray,result) cvShowImage(&quot;res&quot;,result) cvThreshold(result,result,30,255,CV_THRESH_BINARY) cvShowImage(&quot;res1&quot;,result)‏ </li></ul>
  33. 33. Detecção de movimentos - Diferença absoluta Importante: desabilitar ganho automático da webcam
  34. 34. Tópicos <ul><li>O que é a visão computacional? </li></ul><ul><li>Como os computadores veem? </li></ul><ul><li>Filtros </li></ul><ul><li>OpenCV </li></ul><ul><li>Algoritmos </li></ul><ul><ul><li>Segmentação por cor </li></ul></ul><ul><ul><li>Detecção de movimento por diferença absoluta </li></ul></ul><ul><ul><li>Classificadores: detecção de faces </li></ul></ul><ul><ul><li>Fluxo óptico </li></ul></ul><ul><ul><li>Estimativa de posição e rotação 3D </li></ul></ul><ul><ul><li>Leitura de caracteres </li></ul></ul><ul><li>Módulo de visão computacional do TORP </li></ul>
  35. 35. Cascata de classificadores – Viola Jones <ul><li>Detecção de feições </li></ul><ul><li>Face tracking </li></ul>
  36. 36. Features <ul><li>Retângulos </li></ul><ul><li>Fáceis de serem calculados </li></ul><ul><ul><li>Áreas brancas são subtraídas das áreas pretas </li></ul></ul><ul><ul><li>Integral Image – Representação especial que torna a extração da feature mais rápida </li></ul></ul>
  37. 37. Cálculo das Features – Integral Image <ul><li>Soma dos valores de cada pixel (x,y)‏ </li></ul><ul><ul><li>Pode ser rapidamente computada com somente uma passagem pela imagem </li></ul></ul>
  38. 38. Cálculo das Features <ul><li>Soma no interior de um Retângulo </li></ul><ul><ul><li>Sejam A, B, C e D os valores dos retângulos considerando-se o canto superior esquerdo da imagem </li></ul></ul><ul><ul><li>Logo, a soma dos valores do retângulo ABCD é dada por: </li></ul></ul><ul><ul><ul><li>SOMA = A – B – C + D </li></ul></ul></ul><ul><ul><li>Somente três adições são necessárias para qualquer tamanho de retângulo! </li></ul></ul>
  39. 39. AdaBoost: Super Efficient Features Selector <ul><li>Classificadores fracos = Features </li></ul><ul><li>A cada iteração: </li></ul><ul><ul><li>Calculam-se os valores de cada feature em cada exemplar </li></ul></ul><ul><ul><li>Ordenam-se os exemplares pelos valores dos features </li></ul></ul><ul><ul><li>Seleciona-se o melhor feature / threshold </li></ul></ul><ul><ul><li>Recalculam-se os pesos dos exemplar </li></ul></ul>
  40. 40. Principais features identificadas
  41. 41. Principais features identificadas <ul><li>Classificador extremamente rápido (60 microinstruções)‏ </li></ul><ul><li>Ajustado para detectar 100% das faces, com 40% de falsos positivos no primeiro estágio </li></ul>
  42. 42. Cascata de classificadores: visando tempo-real <ul><li>Prioridade de rejeição de background nos estágios iniciais </li></ul><ul><li>Imagem em escala de cinza (8 bits), 320x240, 500 mil janelas </li></ul><ul><li>Tempo de deteção ~ 10ms (1 face) ~20 ms (nenhuma face)‏ </li></ul><ul><li>25 estágios, 2912 features, menor janela 24x24 </li></ul><ul><li>Otimizado para encontrar apenas a maior face </li></ul><ul><li>70% a 80% das janelas são rejeitadas nos 2 primeiros estágios </li></ul>
  43. 43. Pré processamento <ul><li>Conversão para escala de cinza </li></ul><ul><ul><li>cvCvtColor( img, cinza, CV_BGR2GRAY ); </li></ul></ul><ul><ul><ul><li>RGB[A]->Gray: Y<-0.299*R + 0.587*G + 0.114*B </li></ul></ul></ul><ul><li>Redimensionamento </li></ul><ul><ul><li>cvResize( cinza, imagem_reduzida, CV_INTER_LINEAR ); </li></ul></ul><ul><li>Normalização de brilho </li></ul><ul><ul><li>cvEqualizeHist( imagem_reduzida, imagem_reduzida ); </li></ul></ul><ul><ul><ul><li>1. calcular histograma H para src. </li></ul></ul></ul><ul><ul><ul><li>2. normalizar histograma, de forma que a soma seja 255. </li></ul></ul></ul><ul><ul><ul><li>3. computar a integral do histograma: </li></ul></ul></ul><ul><ul><ul><li>H’(i) = somatório0≤j≤iH(j)‏ </li></ul></ul></ul><ul><ul><ul><li>4. transformar a imagem usando H’ como look-up table: dst(x,y)=H’(src(x,y))‏ </li></ul></ul></ul>
  44. 44. Face Tracker <ul><li>Onde encontrar o software? </li></ul><ul><ul><li>Programas de demonstração da biblioteca OpenCv </li></ul></ul><ul><ul><ul><li>/usr/local/share/opencv/samples/c/facedetect </li></ul></ul></ul>
  45. 45. Tópicos <ul><li>O que é a visão computacional? </li></ul><ul><li>Como os computadores veem? </li></ul><ul><li>Filtros </li></ul><ul><li>OpenCV </li></ul><ul><li>Algoritmos </li></ul><ul><ul><li>Segmentação por cor </li></ul></ul><ul><ul><li>Detecção de movimento por diferença absoluta </li></ul></ul><ul><ul><li>Classificadores: detecção de faces </li></ul></ul><ul><ul><li>Fluxo óptico </li></ul></ul><ul><ul><li>Estimativa de posição e rotação 3D </li></ul></ul><ul><ul><li>Leitura de caracteres </li></ul></ul><ul><li>Módulo de visão computacional do TORP </li></ul>
  46. 46. Optical Flow <ul><li>Objetivo: recuperar vetores de movimento aparente entre um par de imagens </li></ul><ul><li>Pode-se utilizar o algoritmo de Lucas-Kanade para verificar a velocidade de cada feição </li></ul><ul><li>Método diferencial de dois frames </li></ul>I(x,y,z,t) = I(x + δx,y + δy,z + δz,t + δt)‏
  47. 47. Lucas-Kanade
  48. 48. Lucas-Kanade <ul><li>Demostração do Lucas Kanade </li></ul><ul><li>Onde encontrar o software? </li></ul><ul><ul><li>Programas de demonstração da biblioteca OpenCv </li></ul></ul><ul><ul><ul><li>/usr/local/share/opencv/samples/c/lkdemo </li></ul></ul></ul>
  49. 49. Tópicos <ul><li>O que é a visão computacional? </li></ul><ul><li>Como os computadores veem? </li></ul><ul><li>Filtros </li></ul><ul><li>OpenCV </li></ul><ul><li>Algoritmos </li></ul><ul><ul><li>Segmentação por cor </li></ul></ul><ul><ul><li>Detecção de movimento por diferença absoluta </li></ul></ul><ul><ul><li>Classificadores: detecção de faces </li></ul></ul><ul><ul><li>Fluxo óptico </li></ul></ul><ul><ul><li>Estimativa de posição e rotação 3D </li></ul></ul><ul><ul><li>Leitura de caracteres </li></ul></ul><ul><li>Módulo de visão computacional do TORP </li></ul>
  50. 50. POSIT: “Pose from Orthography and Scaling with Iteration” <ul><li>Estimar posicionamento e rotação 3D de um objeto conhecido </li></ul>
  51. 51. POSIT - “Model-based object pose in 25 lines of code” D. DeMenthon and L. S. Davis <ul><li>Solução iterativa para o problema de encontrar o vetor de translação e a matriz de rotação (6 graus de liberdade)‏ </li></ul><ul><li>Supor inicialmente que todos os pontos têm a mesma profundidade </li></ul><ul><li>Solução de sistema linear super-determinado. Decomposição SVD e cálculo de pseudo-inversa </li></ul>
  52. 52. EHCI – Enhanced Human Computer Interaction <ul><li>Utilização do algoritmo Posit para obter head tracking com 6 graus de liberdade </li></ul>
  53. 53. EHCI – Enhanced Human Computer Interaction <ul><li>http://code.google.com/p/ehci/ </li></ul><ul><li>Demonstração EHCI </li></ul>
  54. 54. Tópicos <ul><li>O que é a visão computacional? </li></ul><ul><li>Como os computadores veem? </li></ul><ul><li>Filtros </li></ul><ul><li>OpenCV </li></ul><ul><li>Algoritmos </li></ul><ul><ul><li>Segmentação por cor </li></ul></ul><ul><ul><li>Detecção de movimento por diferença absoluta </li></ul></ul><ul><ul><li>Classificadores: detecção de faces </li></ul></ul><ul><ul><li>Fluxo óptico </li></ul></ul><ul><ul><li>Estimativa de posição e rotação 3D </li></ul></ul><ul><ul><li>Leitura de caracteres </li></ul></ul><ul><li>Módulo de visão computacional do TORP </li></ul>
  55. 55. Reconhecimento de Caracteres - OCR <ul><li>Bibliotecas: </li></ul><ul><ul><li>OCR Opus http://code.google.com/p/ocropus/ </li></ul></ul><ul><ul><li>Tesseract http://code.google.com/p/tesseract-ocr/ </li></ul></ul>
  56. 56. Reconhecimento de Caracteres - OCR
  57. 57. Tópicos <ul><li>O que é a visão computacional? </li></ul><ul><li>Como os computadores veem? </li></ul><ul><li>Filtros </li></ul><ul><li>OpenCV </li></ul><ul><li>Algoritmos </li></ul><ul><ul><li>Segmentação por cor </li></ul></ul><ul><ul><li>Detecção de movimento por diferença absoluta </li></ul></ul><ul><ul><li>Classificadores: detecção de faces </li></ul></ul><ul><ul><li>Fluxo óptico </li></ul></ul><ul><ul><li>Estimativa de posição e rotação 3D </li></ul></ul><ul><ul><li>Leitura de caracteres </li></ul></ul><ul><li>Módulo de visão computacional do TORP </li></ul>
  58. 58. Arquitetura de visão computacional do TORP
  59. 59. Instalação de drivers – UVC PWC <ul><li>USB Video Device Class - Linux </li></ul><ul><ul><li>http://linux-uvc.berlios.de/ </li></ul></ul><ul><li>Philips USB Webcam driver for Linux </li></ul><ul><ul><li>http://www.saillard.org/linux/pwc/ </li></ul></ul><ul><li>Instalação dos drivers para Gumstix </li></ul><ul><ul><li>http://www.theopenrobotproject.org/tiki-index.php?page=Installation+Instructions </li></ul></ul><ul><li>V4L, V4L2: APIs para captura de vídeo para Linux </li></ul><ul><ul><li>http://linuxtv.org/v4lwiki/index.php/Main_Page </li></ul></ul>
  60. 60. Mjpeg streamer <ul><li>Servidor http + obtenção frames UVC </li></ul><ul><li>./mjpg_streamer -o &quot;output_http.so -w ./www&quot; </li></ul><ul><li>http://sourceforge.net/projects/mjpg-streamer/ </li></ul>
  61. 61. Referências <ul><li>Gary Bradsky & Adrian Kaehler “Learning OpenCV” </li></ul><ul><li>D. DeMenthon and L. S. Davis “Model-based object pose in 25 lines of code” </li></ul><ul><li>Jean-Yves Bouguet. “Pyramidal Implementation of the Lucas Kanade Feature Tracker Description of the algorithm” </li></ul>
  62. 62. Referências <ul><li>Rainer Lienhart and Jochen Maydt. “ An Extended Set of Haar-like Features for Rapid Object Detection.” Submitted to ICIP2002 </li></ul><ul><li>Viola, P; Jones, M. “ Rapid Object Detection Using a Boosted Cascade of Simple Features – (2004)‏” </li></ul><ul><li>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 </li></ul>
  63. 63. Agradecimentos
  64. 64. Agradecimentos
  65. 65. Dúvidas, sugestões e contribuições <ul><ul><li>Daniel Lélis Baggio </li></ul></ul><ul><ul><ul><li>[email_address] </li></ul></ul></ul>

×