1 Introdução à visão computacional utilizando software livre Msc. Mauro Carlos Pichiliani ([email protected])
Jun 27, 2015
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;}
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