Como ver um vídeo usando o OpenCV

Um dos primeiros passos para o aprendizado dessa biblioteca é conseguir ler um video para utilização dos nossos algoritmos.  A idéia de uma leitura de vídeos é uma extensão da leitura de imagens. Essa extensão ou extrapolação surge na idéia de um vídeo ser nada mais do que uma sequência de imagens a serem lidas. O OpenCV trás funções e estrutuas já preparadas para tal tipo de aqusição, são elas:

  • CvCapture -> Estrutura o qual servirá para apontar a memória de onde está o vídeo.
  • cvCaptureFromAVI() -> função o qual  retorna um ponteiro do tipo CvCapture de um vídeo com extensão AVI.
  • cvQueryFrame() -> Responsável por adquirir os frames em sequência, está função deve estar dentro de um loop para a leitura do vídeo.

Dada a instalação como demostrada no tutorial (instalação), vamos incluir as bibliotecas cv.h, cxcore.h, highgui.h. como segue

#include <stdio.h>
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>

Devemos ficar atentos a extensão do arquivo do video a ser usado. No nosso exemplo, usaremos a extensão avi. Com o arquivo de video dentro da pasta do nosso projeto, podemos apenas referenciá-la com o nome do arquivo, sem precisar colocar o caminho completo, segue a função:


int main(void) {

int key = 0;

char* video_name = "rua.avi";

IplImage* frame = 0;

CvCapture* capture = cvCaptureFromAVI(video_name);

cvNamedWindow("Filme",CV_WINDOW_AUTOSIZE);

if (!capture)

printf("None");

else{

while(key != 'q'){

frame = cvQueryFrame(capture);

if(!frame)

break;

cvShowImage("Filme",frame);

key = cvWaitKey(40);

}

}

cvDestroyWindow("Filme");

cvReleaseCapture(&capture);

return 0;

}

E pronto! Se quiser interromper o vídeo antes dele chegar ao fim basta digitar a letra ‘q’ como definido na condição do while.

Até a próxima.


							

Tutorial Instalação OpenCV

Esse post é um tutorial para adicionar a biblioteca OpenCV ao ambiente de desenvolvimento Visual C++. Então vamos lá:

Pré-requisitos:

  • OpenCV-2.1.0-win32-vs2008
  • VisualC++ 2008 Express Edition

Se você não possui nenhum desses pré-requisitos você pode encontrá-los aqui e aqui.

Antes de começar, certifique-se se o visual c++ está corretamente instalado. Execute o OpenCV-2.1.0-win32-vs2008.

Na tela de Install Options como mostra a figura 1, escolha a opção de current user.

A escolha do diretório é um passo importante, visto que o OpenCV apresenta alguns problemas em reconhecer espaços, desse modo, recomenda-se  a escolha de um nome simples, como mostra a figura 2 (C:\OpenCV\OpenCV210)

 

Com a instalação concluída, abra o Visual C++ e crie um projeto do tipo Win32 console Application, como mostra a figura 3:


 

 

Com o projeto aberto, faremos um pequeno programa para abrir uma imagem. Desse modo, escolha uma imagem e a coloque na pasta onde o projeto se encontra. No nosso tutorial, é usada uma imagem com o nome “imagem.png”.  A figura 4 ilustra como fica o programa. Segue o código utilizado:

// Teste_OpenCV.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
	/*
		Este pequeno Programa Carrega uma imagem na pasta e abre-a

	*/
	IplImage *img = cvLoadImage("Imagem.png");
	cvNamedWindow("Image:",1);
	cvShowImage("Image:",img);

	cvWaitKey();
	cvDestroyWindow("Image:");
	cvReleaseImage(&img);

	return 0;
}

 

Podemos reparar que o Visual C++ já cria um arquivo (Nome_Projeto).cpp com um include, o include da biblioteca “stdafx.h”. Se olharmos o conteúdo dessa biblioteca veremos a presença de algumas bibliotecas mais usadas. Usaremos esse espaço para colocarmos as bibliotecas do OpenCV. Esse passo não fica limitado somente as bibliotecas do OpenCV, em um projeto futuro, você pode adicionar qualquer outra biblioteca que porventura venha usar. A figura 5 mostra a janela com o código da biblioteca o código segue abaixo:

// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//

#pragma once

#include "targetver.h"

#include <stdio.h>
#include <tchar.h>

//Espaço para incluir as bibliotecas do OpenCV

//cv.h contem os algoritmos basicos de processamento de imagem
//e os algoritmos de alto nivel de visao computacional 
#include <cv.h>
//cxcore.h contem as estruturas basicas de dados, mais funcoes 
//de desenho e suport a XML
#include <cxcore.h>
//highgui. h contem rotinas I/O e funcoes de manipulacao de 
//video e imagens, como abrir e salvar
#include <highgui.h>
//ml.h tem as funcoes de reconhecimento de padroes
#include<ml.h>

Agora, devemos indicar para o compilador onde as bibliotecas do OpenCV se encontram. Para tanto deveremos entrar em TOOLS localizado na parte superior do Programa e escolher a opção Options do Menu, como mostra a figura 6:

 

 

A figura 7 mostra a janela que será aberta. Nessa janela, deve-se escolher a opção Projects and Solutions, essa opção abrirá 4 sub-tópicos, deve-se selecionar VC++ Directories. Quando selecionado, a janela terá a aparência da figura 7.

 

 

 

 

No Scroll menu do canto direito com o nome “Show directories for:” você escolherá as seguintes opções:

  • Include Files
  • Library Files
  • Source Files

Em “Include Files”,  deverá ser adicionado o diretório a seguir:

  • C:\OpenCV\OpenCV210\include\opencv

Perceba que o diretório usado foi o mesmo criado no começo da instalação do OpenCV, e desse modo, deverá ser o mesmo aqui caso a sua instalação esteja um uma pasta diferente.

Em “Library Files”, deverá ser adicionado o diretório a seguir:

  • C:\OpenCV\OpenCV210\lib

Em “Source Files”, deverá ser adicionado o diretório a seguir:

  • C:\OpenCV\OpenCV210\src\cv
  • C:\OpenCV\OpenCV210\src\cvaux
  • C:\OpenCV\OpenCV210\src\cxcore
  • C:\OpenCV\OpenCV210\src\highgui
  • C:\OpenCV\OpenCV210\src\ml

Clique em ok. A janela se fechará. Essa configuração ficará permanente no Visual C++. O próximo passo deverá ser feito por projeto. Aperte com o botão direito o nome do projeto na guia com todos os arquivos do projeto. Vá em Linker e expanda as opções. Aperte em Input. A primeira opção deste tópico é additional dependencies. Se apertarmos o botão com os 3 pontos abrirá uma janela com a opção de colocarmos dependências adicionais. Deveremos inserir:

  • cv210.lib
  • cxcore210.lib
  • highgui210.lib

A figura 8 ilustra todo esse processo:

Aperte OK, OK. As janelas fecharão. Pronto! O OpenCV está configurado. Mande compilar o programa. A figura 9 ilustra o resultado.

 

 

 

Robôs humanóides

Desde sua primeira aparição na indústria em 1961, os robôs se tornaram parte comum no ambiente industrial (Mais informações). Entretanto, o imaginário humano nunca se limitou, tem-se o exemplo do famoso desenho produzido por Hanna – Barbera no período de 1962 a 1963, Os Jetsons. Os Jetsons retrata a vida de uma família no futuro no qual os robôs fazem parte do dia a dia das pessoas. Mais, como mostra o trecho extraído do vídeo , o surgimento de robôs com características humanas. Quem nunca desejou ter uma Rose em casa?

Rose

Mas o que antes era apenas produto do imaginário humano, hoje em dia esse sonho vem se tornando cada vez mais real. No MIT – Massachusetts Institute of Technology – Um grupo de pesquisa tem como objetivo, desenvolver robôs que sejam amigáveis aos seres humanos, como mostra esse vídeo.

A NASA – National Aeronautics and Space Administration- em pareceria com a GM – General Motors – desenvolveram o Robonaut 2, um robô feito para auxiliar os astronautas na estação espacial. A seguir um vídeo mostando tal robô.

 

Mas os avanços não estão surgindo apenas em terras americanas, não senhor! Europa e Japão seguem forte nessa linha de pesquisa, podemos ver em seguida o exemplo japonês e o projeto ARMAR-III, sendo desenvolvido para ambientes com interação intensa com os seres humanos, respectivamente.

Por mais impressionante que seja, a busca por respostas mais parecidas com os seres humanos vem crescendo, em cambridge, o Professor Robinson desenvolve uma cabeça robótica que servirá como co-piloto, incorporando o GPS atual e melhorando sua interação com o motorista.

Por fim, voltamos as terras americanas e nos encontramos de novo no MIT, onde o robô nixe MDS foi desenvolvido e escolhido como melhor invenção em 2008. Para entender tal grandiosidade, deixarei a própria nixe falar com vocês.

Rat Brain Robot

Alguns ramos de pesquisa em aprendizado em robótica vem usando neurônios biológicos como o processador do robô ao invés de alguma técnica de IA (Inteligência Artificial) em um processador comum. Dito isto o vídeo é autoexplicativo.

SuperFast Robotic Camera

Estudos sobre a visão humana crescem a cada dia, e crescem mais as pesquisas de engenharia na tentativa de mimetizar o que milhares de anos de evolução tornaram perfeito, a camera mais eficiente, seu olho. Mas não está só no olho e sim em todo o processamento o qual o cérebro faz e que não nos damos conta. Algo como a visão seletiva, motivo de pesquisas para muitos psicólogos, e o rápido reconhecimento de padrões são os maiores atrativos. Pesquisadores do Instituto  de Mecânica Aplicada na Universidade de Munique fizeram uma camera capaz de realizar o movimento de foco dos olhos humanos.

Universal Jamming Gripper

Na robótica, manipulação de objetos é algo desafiador. Nós, humanos, estamos tão acostumados com nossos manipuladores perfeitos que não paramos para refletir quão difícil é a tarefa que estamos realizando. Muitas pesquisas estão caminhando para a mimetização da mão humana, inclusive o Kanguera, na USP – São Carlos. Entretanto, o pessoal da Cornell University, The University of Chicago e iRobot desenvolveram um manipulador diferente.

Itália/Portugal 02 – Uma cidade chamada aveiro

Depois de uma semana intensa em Roma, começamos nossa jornada de volta para o Brasil, primeira parada: Portugal. Uma reunião com o pessoal da universidade em aveiro estava marcada, e desse modo, tínhamos um compromisso para comparecer. Chegando em Lisboa, nem deu tempo para ver a cidade e já arrumamos condução para Aveiro. Cidadezinha singela no interior de Portugal, famosa por ter o que eles chamam de veneza portuguesa.

Costa nova em Aviero - Portugal

Passeando pela cidade, visitamos a estação de trem, cuja parede apresenta desenhos em azuleijos bem legais, visitamos onde ficam os pescadores e suas casas típicas, todas coloridas. Bem interessantes. O que mais nos impressionou (acredito pela crescente saudade de casa) foi o grande número de brasileiros que se encontram por lá, ora trabalhando nas lojas, ora a passeio, igualmente. Mas antes de deixarmos Portugal, iríamos para Lisboa e para Porto. As duas cidades mais famosas.