Mostrando postagens com marcador Visão Computacional. Mostrar todas as postagens
Mostrando postagens com marcador Visão Computacional. Mostrar todas as postagens

quinta-feira, 9 de julho de 2015

Visão Computacional: Color Tracking, Line Detection & Shapes

Os programas que resultam nas imagens apresentadas abaixo foram desenvolvidos na linguagem C++, utilizando a IDE Eclipse Luna e o framework OpenCV, já citado anteriormente. Houveram várias tentativas de desenvolvimento em outras IDEs, tais como Visual Studio, NetBeans, Eclipse (Java) e DevC++ (que por fim é o menos recomendado), e também utilizando a linguagem Python. Porém, a que se sobressaiu e apresentou melhores resultados foi o C++ com Eclipse Luna, tanto pela estabilidade quanto pelo material de apoio que pode ser encontrado em fóruns e demais sites.

As bibliotecas mais usadas nos programas são a highgui e a imgproc. A highGUI é responsável por ações como a manipulação de janelas e seus componentes, sendo que estes podem interagir diretamente com o tratamento da imagem, pela leitura e gravação de arquivo em disco e em memória e pela leitura de frames da câmera. a imgProc é responsável pelo processamento de imagens, possuindo definições e funções que auxiliam o desenho em imagens e algumas formas de detecção por padrões.

Sobre os algoritmos desenvolvidos, existem trechos comuns à maioria dos programas de tratamento de imagens. Um deles é a conversão da imagem capturada de RGB para HSV (hue, saturation, value - ou - matriz, saturação e valor), pois este controle é mais eficiente e direto para se manipular o filtro (com iluminação e contraste, por exemplo) do que alterar valores RGB na matriz da imagem. Para se fazer a diferenciação das cores, por exemplo, o valor a ser alterado é relacionado à matriz, quando os demais servem para dar mais precisão na filtragem.

Esquema de sistema de cores HSV

Os algoritmos foram aplicados sobre a exibição da câmera do meu computador, em tempo real. Em todos os programas, o processamento foi mostrado em três janelas: uma com a imagem original da webcam, outra com o filtro aplicado (apenas tratamento, preto e branco, exibindo área ignorada e detectada respectivamente) e outra somando a imagem original com o desenho programado a partir da detecção (na detecção de cores, por exemplo, é apontado localização e nome da cor e, na detecção de formas, é desenhado a forma em torno do objeto).

Veja algumas imagens do resultado dos algoritmos:

Rastreamento de Cores

Detecção de Formas

Detecção de Linha

Neste projeto, alguns algoritmos foram utilizados no intuito de auxiliar atividades envolvendo robótica, através de monitoramento em tempo real, interpretação de informações e as possíveis interações com o robô. Uma adaptação interessante seria embarcar esta aplicação em um celular, por exemplo, possibilitando seu funcionamento portátil e uma transmissão online.

Nota: caso tenha interesse em estudar/utilizar os códigos-fonte, entre em contato por e-mail.

quarta-feira, 8 de julho de 2015

Visão Computacional: Concepts & OpenCV

Podemos descrever a visão computacional como "a ciência e tecnologia das máquinas que enxergam". A partir da captura de imagens - ou vídeo - é possível extrair infinitas possibilidades de informações. Esta técnica é largamente utilizada no meio industrial, em sistemas artificiais, biotecnologia, modelagem de ambientes, organização de informação, interação (atrelado a interação humano-computador) dentre outras. Ela atua especialmente em tarefas como reconhecimento, detecção, identificação, tratamento de dados e de imagem em si.

Seu fluxo funcional se baseia na seguinte sequência de tarefas: aquisição de imagem, pré-processamento, extração de características, detecção e segmentação, e por fim, processamento de alto nível. A partir destes - ou parte destes - temos uma gama de aplicações, tais como computação gráfica, processamento de imagens, aprendizagem de máquina, reconhecimento de padrões, sistemas de visão entre outros, além de ser uma forte aliada à robótica.

O OpenCV é um framework open-source multiplataforma para desenvolvimento de aplicativos na área de visão computacional. Foi originalmente desenvolvido pela Intel em 2000 e é bastante utilizado no meio acadêmico e também comercial. Sua biblioteca possui módulos de processamento de imagens e vídeo I/O, estrutura de dados, álgebra linear, interface gráfica (GUI), sistema de janelas independentes, controle de mouse e teclado, além de mais de 350 algoritmos de visão computacional como: filtros de imagem, calibração de câmera, reconhecimento de objetos, análise estrutural entre outros, podendo inclusive trabalhar com estas funções paralelamente e com processamento em tempo real.

O framework foi originalmente desenvolvido em C/C++, mas atualmente é suportado nas linguagens Java, Python e Visual Basic, sendo possível desenvolver para diversas plataformas, inclusive Android e iOS. Algumas de suas aplicações englobam interface humano-computador, identificação de objetos, sistema de reconhecimento facial e de movimentos, robôs móveis, reconstrução 3D entre outros.

Alguns exemplos de utilização da visão computacional atualmente:

Reconhecimento facial

 
 
Jogos e simulação virtual

Monitoramento urbano

Tratamento de imagens

A visão computacional contribui com a tecnologia e a sociedade à medida que evolui e se especializa. Hoje ela tanto auxilia e diverte seus usuários quanto pode salvar vidas. Por exemplo, em um evento esportivo, com milhares de espectadores, a visão computacional pode ajudar a monitorar a multidão, de forma a evitar que um tumulto qualquer faça as pessoas ficarem bloqueadas, com ferimentos ou até mesmo vítimas fatais. Não há limites para a aplicação da visão computacional.

Novas idéias surgem a cada dia e assim novos desafios dão abertura a inovações e descobertas, estimulando a evolução da visão computacional e difundindo seu uso em todas as áreas possíveis.