You are on page 1of 78

UNIVERSIDADE FEDERAL DO VALE DO SO FRANCISCO CURSO DE GRADUAO EM ENGENHARIA DA COMPUTAO

Lenivaldo Ribeiro de Souza

ALGORITMO PARA RECONHECIMENTO E ACOMPANHAMENTO DE TRAJETRIA DE PADRES EM VDEOS

Juazeiro - BA 2011

UNIVERSIDADE FEDERAL DO VALE DO SO FRANCISCO CURSO DE GRADUAO EM ENGENHARIA DA COMPUTAO

Lenivaldo Ribeiro de Souza

ALGORITMO PARA RECONHECIMENTO E ACOMPANHAMENTO DE TRAJETRIA DE PADRES EM VDEOS

Trabalho de Concluso de Curso apresentado a Universidade Federal do Vale do So Francisco UNIVASF, campus de Juazeiro, como requisito parcial para obteno do ttulo de Engenheiro da Computao. Orientador: Brauliro Gonalves Leal. Co-orientador: Eduard Montgomery Meira Costa.

Juazeiro - BA 2011

S729a

Souza, Lenivaldo Ribeiro de. Algoritmo para reconhecimento e acompanhamento de trajetria de padres em vdeos / Lenivaldo Ribeiro de Souza. Juazeiro, 2011. XI; 78f. : il. 29 cm. Trabalho de Concluso de Curso (Graduao em Engenharia da Computao) - Universidade Federal do Vale do So Francisco, Campus Juazeiro, Juazeiro-BA, 2011. Orientador (a): Prof.(a) Dr. Brauliro Gonalves Leal. 1. Reconhecimento e acompanhamento de trajetria de padres em vdeos. 2. Redes Neurais Artificiais. I. Ttulo. II. Universidade Federal do Vale do So Francisco. CDD 006.4

UNIVERSIDADE FEDERAL DO VALE DO SO FRANCISCO CURSO DE GRADUAO EM ENGENHARIA DA COMPUTAO


FOLHA DE APROVAO

Lenivaldo Ribeiro de Souza ALGORITMO PARA RECONHECIMENTO E ACOMPANHAMENTO DE TRAJETRIA DE PADRES EM IMAGENS MVEIS

Trabalho de Concluso de Curso apresentado como requisito parcial para obteno do ttulo de Engenheiro da Computao, pela Universidade Federal do Vale do So Francisco UNIVASF.

Brauliro Gonalves Leal, Doutor, Professor da UNIVASF.

Eduard Montgomery Meira Costa, Doutor, Professor da UNIVASF.

Marcelo Santos Linder, Mestre, Professor da UNIVASF.

Rodrigo Pereira Ramos, Doutor, Professor da UNIVASF.

Aprovado pelo Colegiado de Engenharia da Computao em: ____ / ____ / 2011

Dedico essa grande conquista a minha famlia pela grande fora proporcionada ao longo da minha vida acadmica e a todos aqueles que de alguma forma acreditaram na minha capacidade de superao.

AGRADECIMENTOS

Agradeo acima de tudo a Deus, pois sem ele nada disso seria possvel. minha famlia pelo apoio moral e financeiro. Ao orientador e co-orientador desse projeto de pesquisa. todos os professores de graduao.

RESUMO

Este projeto visa o desenvolvimento de um algoritmo para reconhecimento e acompanhamento de trajetria de padres em vdeos. Foram utilizadas tcnicas de processamento digital de imagens, de reconhecimento de padres a partir de Redes Neurais Artificiais (RNAs) e de deteco de trajetria. No que diz respeito deteco de trajetria foi utilizado o algoritmo de rastreamento de cor conhecido como Camshift. Para a implementao dos algoritmos, foi utilizada como ferramenta computacional de apoio a biblioteca de programao OpenCV (Open Source Computer Vision). Portanto, por meio da escolha de uma linguagem de programao foi possvel desenvolver um algoritmo que efetua a etapa de pr-processamento de imagens, o reconhecimento de um padro nela contido atravs de Redes Neurais Artificiais e o acompanhamento desse objeto em uma seqncia sucessiva de imagens. Para tanto, inicialmente foi realizado um estudo de estruturas de gerao de vdeos digitais, redes neurais artificiais e aplicaes de reconhecimento de padres em vdeos, estimadores e programao em C/C++. Aps a instalao e configurao das ferramentas de programao, foram elaborados exemplos para test-las. Em seguida, efetuou-se a anlise e definio dos procedimentos a serem utilizados para estruturao dos algoritmos para, finalmente, implement-los utilizando linguagem de programao C/C++.

Palavras-chave: Reconhecimento.

Redes

Neurais.

Padres.

OpenCV.

Rastreamento.

ABSTRACT

This project aims to develop an algorithm for trajectory tracking and recognition of patterns in videos. Techniques were used for digital image processing, pattern recognition from Artificial Neural Networks (ANN) and detection path. With respect to the detection path was used traking algorithm with known as color Camshift. To implement the algorithms was be used as a computational tool to support library programming OpenCV (Open Source Computer Vision). Therefore, by choosing a programming language was possible to develop an algorithm that performs the step of pre-processing of images, the recognition of a pattern within it through Artificial Neural Networks and monitoring of this object in a sequence of successive images. For this purpose it was originally performed a study of structure generation digital video, artificial neural networks and pattern recognition applications in videos, estimators and programming in C/C++. After installation and configuration of the programming tools, examples were designed to test them. Then we performed the analysis and definition of procedures to be used for the structuring of algorithms to finally implement them using the programming language C/C++.

Keywords: Neural Networks. Standards. OpenCV. Trace. Recognition.

LISTA DE FIGURAS
Figura 1. Representao numrica de uma imagem ampliada de 10x10 pixels. .................................................. 19 Figura 2. Elementos do processo de anlise da imagem (Gonzalez and Woods, 2000). ....................................... 20 Figura 3. Representao artificial de um neurnio natural (Cordeiro, 2002). ....................................................... 26 Figura 4. Funes de ativao comumente usadas. .............................................................................................. 27 Figura 5. Arquitetura de uma rede neural (Silva e Leal, 2002). ............................................................................. 28 Figura 6. Esquema do funcionamento do Algoritmo Backpropagation. ............................................................... 30 Figura 7. Superfcie de erro para um treinamento usando backpropagation (Braga et al, 2000). ....................... 31 Figura 8. Exemplo de rede MLP. ............................................................................................................................ 32 Figura 9. Problemas linearmente e no-linearmente separveis. ......................................................................... 33 Figura 10. Seqncia de quadros de um vdeo mostrando a movimentao de um crculo. ................................ 43 Figura 11. Fluxograma com as etapas de captura de quadros de vdeo ............................................................... 44 Figura 12. Tela de sada de vdeo capturado de uma cmera ............................................................................... 45 Figura 13. Imagens resultantes do algoritmo de processamento de imagens ...................................................... 49 Figura 14. Arquivo com sadas do processamento do quadro 0 ............................................................................ 49 Figura 15. Trecho de cdigo mostrando funo de treinamento .......................................................................... 51 Figura 16. Exemplo de arquivo de configuraes e pesos de uma RNA ................................................................ 52 Figura 17. Esquema de blocos para o de reconhecimento de padres ................................................................. 53 Figura 18. Algoritmo Cam Shift (INTEL Corporation,2009). ................................................................................ 55 Figura 19. Menu principal...................................................................................................................................... 56 Figura 20. Menu treinar RNA ................................................................................................................................. 56 Figura 21. Menu treinar circulo ............................................................................................................................. 57 Figura 22. Exemplo de arquivo txt com entradas para treinamento ..................................................................... 57 Figura 23. Sub-menu reconhecer um padro ........................................................................................................ 57 Figura 24. Reconhecer padro por vdeo ............................................................................................................... 58 Figura 25. Tela para escolha de vdeos .................................................................................................................. 59 Figura 26. Reconhecer padro por WebCam ......................................................................................................... 59 Figura 27. Menu acompanhar um padro............................................................................................................. 60 Figura 28. Acompanhar um padro por arquivo de vdeo ..................................................................................... 60 Figura 29. Acompanhar um padro por WebCam ................................................................................................. 61 Figura 30. Exemplo de tela de acompanhamento de padro ................................................................................ 61 Figura 31. Etapas resumidas do algoritmo ............................................................................................................ 62 Figura 32. Resultados do processamento de quadros ........................................................................................... 62 Figura 33. Resultados para etapa de rastreamento. ............................................................................................. 63

LISTA DE ABREVIATURAS E SIGLAS

AVI Audio Video Interleave FPS Frames Per Seconde MLP Multi-layer Perceptron OpenCV Open Source Computer Vision RNA Rede Neural Artificial RGB Red, Green and Blue

SUMRIO

1 2 3 4

INTRODUO .......................................................................................................................................... 12 JUSTIFICATIVA ....................................................................................................................................... 15 OBJETIVOS ............................................................................................................................................... 17 REVISO BIBLIOGRFICA .................................................................................................................. 18 4.1 PROCESSAMENTO DE IMAGENS DIGITAIS ............................................................................................... 18

4.1.1 4.1.2 4.1.3 4.1.4 4.1.5 4.1.6


4.2 4.3

Aquisio de imagem .................................................................................................... 20 Pr-processamento ....................................................................................................... 20 Segmentao ................................................................................................................. 21 Representao e descrio ........................................................................................... 21 Reconhecimento ........................................................................................................... 22 Interpretao................................................................................................................. 22

FORMATO DE VDEO AVI ...................................................................................................................... 23 REDES NEURAIS ARTIFICIAIS ................................................................................................................ 25

4.3.1 4.3.2
4.4 4.5 4.6 5

Algoritmo Backpropagation .......................................................................................... 30 Rede MLP (Multilayer Perceptron) ................................................................................ 32

RECONHECIMENTO DE PADRES........................................................................................................... 33 RASTREAMENTO ................................................................................................................................... 34 BIBLIOTECA OPENCV ........................................................................................................................... 36

MATERIAIS E MTODOS ...................................................................................................................... 39 5.1 DELINEAMENTO METODOLGICO......................................................................................................... 39

RESULTADOS OBTIDOS ........................................................................................................................ 44 6.1 6.2 6.3 6.4 6.5 6.6 ETAPA DE PROCESSAMENTO DAS IMAGENS ........................................................................................... 46 ETAPA DE TREINAMENTO ...................................................................................................................... 50 ETAPA DE RECONHECIMENTO ............................................................................................................... 52 ETAPA DE RASTREAMENTO ................................................................................................................... 53 COMO UTILIZAR OS ALGORITMOS ......................................................................................................... 55 DISCUSSO DOS RESULTADOS .............................................................................................................. 61

7 8

CONCLUSO ............................................................................................................................................. 65 REFERNCIAS .......................................................................................................................................... 66 ANEXOS...................................................................................................................................................... 69

12 1 Introduo

O processamento de imagens ganha novo papel na sociedade com a popularizao de equipamentos capazes de gerar, armazenar e transmitir vdeos. Dessa forma, a utilizao de mtodos para obter informaes automaticamente de vdeos e de seqncia de imagens est se tornando cada vez mais comum. As informaes extradas de um vdeo podem ser utilizadas de diversas formas como a gerao de estatsticas, classificao, reconhecimento de pessoas ou objetos. O reconhecimento de padres faz parte do nosso contato dirio. O simples fato de ler esse texto j envolve o reconhecimento de cada smbolo como sendo uma letra do alfabeto, que por sua vez em conjunto so reconhecidos como palavras que apresentam algum significado. Enfim, reconhecer o rosto de uma pessoa, distinguir um cachorro de um gato, compreender a fala, ler as mais diversas caligrafias e at mesmo interpretar um exame de eletrocardiografia, tudo isso reconhecimento de padres (Henrique, 2003). Atualmente, com o desenvolvimento das reas relacionadas viso computacional, psicologia, neurocincias e inteligncia artificial, o campo de reconhecimento automtico de objetos tem procurado se aproximar cada vez mais do sistema visual humano. J existe uma boa quantidade de trabalhos desenvolvidos relacionados com o reconhecimento de padres e suas aplicaes, tais como: identificao atravs de impresses digitais e anlise da ris (Steiner, 1995); anlise de imagens aeroespaciais (Perelmuter et al., 1995); investigao da qualidade do papel industrial (Steiner, 1995); anlise de caracteres manuscritos (Prado, 1975); anlise de eletrocardiogramas (Mascarenhas,1987); deteco da Bola em Vdeos de Futebol (Guimares); reconhecimento em tempo real de agentes autnomos em Futebol de robs (Schwartz et al., 2003); reconhecimento e identificao de cromossomos (Todesco, 1995). Alguns exemplos de trabalhos correlatos so os anais apresentados no VII WORKSHOP DE VISO COMPUTACIONAL (2011): Sistema de Deteco e Indexao Automtica de Objetos em Vdeos Digitais, Reconhecimento

Multibiomtrico de Pessoas em Imagens de Vdeo para Monitoramento Visual de

13 Ambientes, e Modelagem Contextual de Padres Aplicada ao Monitoramento de Eventos em Vdeo. A palavra reconhecimento tem sido usada largamente na literatura para significar entendimento, interpretao, classificao, cognio e outras tarefas inerentemente humanas. Entende-se por padro as propriedades que possibilitam o agrupamento de objetos semelhantes dentro de uma determinada classe ou categoria, mediante a interpretao de dados de entrada, que permitam a extrao das caractersticas relevantes desses objetos (Tou e Gonzlez, 1981). Assim, reconhecimento de padres pode ser definido como sendo um procedimento em que se busca a identificao de certas estruturas nos dados de entrada em comparao a estruturas conhecidas e sua posterior classificao dentro de categorias. Para resolver problemas relacionados ao reconhecimento de padres, a abordagem comumente utilizada dividir o problema em dois mdulos subseqentes: a) de extrao de caractersticas; e b) de classificao. Tanto para o primeiro como para o segundo mdulo j existem vrias tcnicas desenvolvidas que vo desde tcnicas estatsticas at tcnicas de Inteligncia Artificial (Artur, 1999). Na maioria dos casos, os mtodos de reconhecimento necessitam de um pr-processamento da imagem antes do passo final de reconhecimento em si. Portanto, importante contar com o auxlio de ferramentas computacionais tais como OpenCV para simplificao do problema. Acompanhar a trajetria de um padro em vdeos significa rastre-lo, isto , reconhec-lo em uma seqncia de imagens. Tendo em vista que a busca em cada imagem de uma seqncia sem o uso de qualquer conhecimento especfico relativamente lenta, torna-se necessrio um conhecimento sobre o movimento do objeto que est sendo rastreado para minimizar a busca entre as imagens em uma seqncia. A Inteligncia Artificial um dos campos da cincia da computao que se ocupa da automao do comportamento inteligente. As redes neurais constituem um dos ramos da inteligncia artificial mais bem sucedidos no reconhecimento de padro, cujo campo de aplicao bastante amplo. De acordo com Braga et. al

14 (2000), a soluo atravs de Redes Neurais Artificiais (RNAs) bastante atrativa. Sendo que o procedimento usual na soluo de um problema passa inicialmente por uma etapa de aprendizagem, em que um conjunto de exemplos apresentado rede, a qual extrai automaticamente as caractersticas necessrias para representar a informao fornecida. Esse , sem dvidas, o atrativo principal da soluo de problemas atravs de RNAs. Portanto, este projeto apresenta um algoritmo para reconhecimento e acompanhamento de trajetria de padres em vdeos. Para tanto, sero utilizadas as vantagens proporcionadas pelas redes neurais artificiais para o reconhecimento de padres e de algoritmos de rastreamento, tais como Camshift e Meanshift, para o monitoramento de trajetria. O escopo desse trabalho de concluso de curso compreender objetos de geometria simples (crculos, retngulos e tringulos) e monocromticos presentes em arquivos de vdeos com cenas bidimensionais de fundo monocromtico (com cor diferente da do objeto a ser identificado) e com luminosidade suficiente para a sua identificao e acompanhamento de sua trajetria. O objeto dever estar presente completamente na cena. O ambiente ser do tipo dinmico onde apenas o objeto observado se desloca no vdeo, sendo que esse deslocamento poder tambm ocorrer em decorrncia da movimentao da cmera.

15 2 Justificativa

Optou-se pela tcnica de reconhecimento utilizando Redes Neurais Artificiais porque elas constituem um dos ramos da Inteligncia Artificial mais bem sucedidos no reconhecimento de padres, com amplo campo de aplicao. O procedimento usual na soluo de um problema passa inicialmente por uma etapa de aprendizagem, em que um conjunto de exemplos apresentado rede, a qual extrai automaticamente as caractersticas necessrias para representar a informao fornecida. Apesar de alguns autores verem essa etapa como sendo lenta e computacionalmente dispendiosa, ela possibilita a vantagem de uma execuo rpida posteriormente, isto , depois de devidamente treinada a rede capaz de reconhecer rapidamente um padro. Esse , sem dvidas, o atrativo principal da soluo de problemas atravs de RNAs. A utilizao de mtodos para obter informaes automaticamente de vdeos e de seqncia de imagens est se tornando cada vez mais comum. A localizao de objetos em uma imagem e acompanhamento de seu deslocamento numa seqncia de imagens so tarefas de interesse terico e prtico, visto que a maioria dos algoritmos j desenvolvidos se aplica a imagens estticas. Aplicaes de reconhecimento e rastreamento de padres e objetos tem se difundido ultimamente, principalmente no ramo de controle, automao e vigilncia. A grande quantidade de dados aliada com a rapidez exigida para que as novas informaes sejam geradas e distribudas abre caminho para o

processamento automtico desses dados. As informaes extradas da seqncia de vdeos so utilizadas das mais variadas formas. A gerao de estatsticas, classificao, reconhecimento de pessoas ou objetos so alguns exemplos de aplicaes apresentadas pelos algoritmos. Dentre os fatores motivadores para o desenvolvimento desse projeto est a enorme quantidade de aplicaes para a localizao de objetos em uma imagem e acompanhamento de seu deslocamento numa seqncia de imagens. Dentre as diversas utilidades, pode-se destacar:

16 Aplicaes na medicina para anlise de radiografias, diagnstico de doenas, identificao de clulas, simulao de funes cerebrais; Monitoramento de objetos a partir de imagens geradas por uma cmera; Aplicaes na rea de Robtica; Caracterizao de rochas, prospeco mineral, sensoriamento remoto; Deteco de alvos, classificao de sinais de radar; Efeitos especiais, animao; Viso computacional, controle de manipuladores, anlise de situaes; Simulao de processos qumicos, processamento de sinal, diagnstico de falhas; Anlise de texturas e fases.

Portanto, os resultados a serem obtidos no desenvolvimento do presente projeto abrangem um amplo contexto, podendo ser aplicado em vrias reas e setores da atividade humana tais como: segurana pblica e privada, medicina, indstria, engenharia, entre outras possibilidades. Em sistemas blicos, de fundamental importncia o correto rastreamento de possveis alvos. Na indstria, utilizam-se tais sistemas para verificao da qualidade de produtos bem como para acompanhamento dos mesmos na linha de produo. No ramo de segurana, a deteco e rastreamento de pessoas podem ajudar a identificar a presena de indivduos no autorizados.

17 3 Objetivos

Este projeto teve como objetivo geral propor um algoritmo para reconhecimento e acompanhamento de trajetria de padres em vdeos, atravs do uso de tcnicas para extrao de caractersticas, para reconhecimento e para monitoramento de um determinado objeto em arquivos de vdeo. Para tanto, obtevese um contexto de similaridade dessas caractersticas para o treinamento de redes neurais artificiais para auxiliar na tarefa de deteco do padro pretendido. Partindo-se desse objetivo geral, estabeleceram-se os seguintes objetivos especficos: Desenvolver um algoritmo para capturar e aplicar operaes de processamento de imagem em um determinado quadro ou seqncias de quadros de um vdeo; Efetuar reconhecimento de um padro em uma seqncia de quadros utilizando rede neural; Implementar um algoritmo para acompanhar a trajetria de um determinado padro em uma seqncia de quadros de um vdeo.

Ao final deste trabalho, obteve-se uma experincia prtica com as tcnicas de reconhecimento e acompanhamento de trajetria de objetos em arquivos de vdeo, contribuindo ento para a ampliao de conhecimentos profissionais e desenvolvimento de capacidades de criatividade e pesquisa. Os objetos ou padres mencionados anteriormente consistem de figuras geomtricas simples (crculos, retngulos e tringulos) presentes em seqncias de quadros de arquivos de vdeos.

18 4 Reviso bibliogrfica

4.1 Processamento de imagens digitais Segundo Maria (2000), entende-se por Processamento Digital de Imagens a manipulao de uma imagem por computador de modo que a entrada e a sada do processo sejam imagens. O objetivo de se utilizar essa tcnica melhorar o aspecto visual de certas feies estruturais para o analista humano e fornecer outros subsdios para a sua interpretao, inclusive gerando produtos que possam ser posteriormente submetidos a outros processamentos. A viso computacional procura imitar o comportamento da viso humana e, portanto, tambm possui como entrada uma imagem, no entanto, a sada uma interpretao da imagem completa ou de parte dela. De acordo com Gonzalez and Woods (2000), uma imagem pode ser definida como uma funo f(x, y), onde o valor nas coordenadas espaciais x e y corresponde ao brilho (intensidade) da imagem nessa coordenada. Para que uma imagem seja representada em um computador, necessria a sua digitalizao tanto no domnio espacial como no das amplitudes. Dessa forma, uma imagem digital a representao numrica e discreta de um objeto, ou especificamente, uma funo quantificada e amostrada, de duas dimenses, geradas por meios pticos, disposta em uma grade padro, retangular, igualmente espaada, quantificada em iguais intervalos de amplitude. Assim, conforme Cordeiro (2002), uma imagem digital um vetor retangular bidimensional de amostras de valores quantificados. A menor unidade que constitui uma imagem digital denominada picture element (pixel). Um pixel a representao numrica da luminosidade de um ponto da imagem. A Figura 1 ilustra a representao numrica de uma imagem ampliada de 10 X 10 pixels. Tipicamente, cada ponto de uma imagem decomposto em uma tripla de cores e cada proporo relativa transformada em valores numricos que permitem

19 que eles sejam recuperados. No modelo conhecido como RGB, por exemplo, a imagem decomposta nas cores vermelho (R-red), verde (G-Green) e azul (B-Blue).

Figura 1. Representao numrica de uma imagem ampliada de 10x10 pixels.

O modelo de cores RGB um modelo aditivo no qual o vermelho, o verde e o azul so combinados de vrias maneiras para reproduzir outras cores. Cada uma pode variar entre o mnimo (completamente escuro) e mximo (completamente intenso). Geralmente, a partio de 8 bits para cada uma das 3 cores, dando um alcance de 256 possveis valores, ou intensidades, para cada tom. O ato de processar uma imagem consiste em aplicar sobre ela transformaes sucessivas com o objetivo de extrair mais facilmente a informao nela contida de modo que o resultado final seja mais adequado que a imagem original para uma aplicao especfica. De acordo com Gonzalez and Woods (2000), as tcnicas em anlise de imagem podem ser divididas em trs reas bsicas: processamento de baixo nvel, processamento de nvel intermedirio e processamento de alto nvel. A Figura 2 mostra os processos de cada uma dessas reas.

20

Figura 2. Elementos do processo de anlise da imagem (Gonzalez and Woods, 2000).

Nas sees seguintes, sero apresentados alguns dos passos para o processamento digital de imagens com enfoque no reconhecimento de imagens, tais como: aquisio de imagem, pr-processamento, segmentao, representao e descrio, reconhecimento e interpretao.

4.1.1 Aquisio de imagem o primeiro passo do processo. Segundo Gonzalez and Woods (2000), requer apenas um sensor de imagens e a capacidade para digitalizar o sinal produzido pelo sensor. Portanto, so necessrios dois elementos: um aparelho fsico que sensvel faixa espectral de energia eletromagntica e que gera um sinal eltrico de sada e um digitalizador, que converte o sinal eltrico capturado na sua forma digital.

4.1.2 Pr-processamento Aps a aquisio e digitalizao da imagem, o prximo passo o prprocessamento que visa melhorar a imagem, aumentando as chances de sucesso dos processos seguintes (Gonzalez and Woods, 2000). Nesta etapa, so utilizadas tcnicas para aumento de contraste, remoo de rudos, realce e normalizao, com

21 o objetivo de converter os padres para uma forma que possibilite uma simplificao do posterior processo de reconhecimento. As tcnicas utilizadas nessa etapa envolvem duas categorias principais: mtodos que operam no domnio espacial e mtodos que operam no domnio da freqncia. O domnio espacial refere-se ao prprio plano da imagem, e as tcnicas nesta categoria so baseadas na manipulao direta dos pixels de uma imagem. As tcnicas de processamento no domnio da freqncia se baseiam na modificao da transformada de Fourier de uma imagem. Algumas das tcnicas que podem ser aplicadas nessa etapa so: suavizao espacial (homogeneizao de pixels atravs de filtros tais como passabaixa e passa - alta), realce de bordas e deteco de bordas.

4.1.3 Segmentao De uma forma geral, a segmentao consiste em subdividir uma imagem de entrada em suas partes constituintes ou objetos. Cada uma destas partes uniforme e homognea com respeito a algumas propriedades da imagem, como por exemplo, cor e textura. Algoritmos de segmentao para imagens monocromticas so geralmente baseados em duas propriedades bsicas de valores em escala de cinza: descontinuidade e similaridade. Na descontinuidade, o particionamento da imagem baseado no subconjunto de pontos de um objeto que o separa do restante da imagem. Na similaridade, a segmentao baseada nas tcnicas de limiarizao, crescimento por regies, unio e diviso de regies (Gonzalez and Woods, 2000).

4.1.4 Representao e descrio Geralmente, a sada do estgio de segmentao so dados brutos de pixel. Neste caso, pode ser necessrio converter os dados para uma forma conveniente, possibilitando o processamento por computador. Dois tipos de representao podem ser utilizados: representao limite (focaliza caractersticas da forma) ou representao regional (focaliza as propriedades refletivas). Escolher a

22 representao apenas parte da soluo para a transformao de dados brutos em uma forma conveniente para o processamento computacional subseqente. Um mtodo para descrever os dados de tal forma que as caractersticas de interesse sejam realadas tambm deve ser utilizado. Descrio, tambm chamada de seleo de caracterstica, lida com a extrao de caractersticas que resultam em diferenciar uma classe de objetos de outra (Gonzalez and Woods, 2000).

4.1.5 Reconhecimento Depois de feita a separao de classes de objetos com caractersticas semelhantes, o prximo passo identificar o que cada uma dessas classes representa, e assim identific-las com um respectivo valor. As tcnicas de reconhecimento de padres existentes atualmente podem ser divididas em trs abordagens: estatstica, estrutural e neural. A abordagem estatstica consiste em extrair das imagens um conjunto de medidas de caractersticas (na forma de n-uplas ou vetores) e aplicar mtodos estatsticos para separar as classes. Na abordagem estrutural, os padres so representados em uma forma simblica (tais como strings e rvores), e os mtodos de reconhecimento so baseados em casamento de smbolos ou em modelos que tratam padres de smbolos como sentenas, a partir de uma linguagem artificial. Na abordagem neural, o reconhecimento realizado utilizando-se Redes Neurais Artificiais. Alguns autores consideram o reconhecimento via redes neurais como sendo um tipo particular de reconhecimento estatstico, j que as caractersticas tambm esto na forma de n-uplas ou vetores e existe uma equivalncia entre alguns modelos de redes neurais e tcnicas estatsticas fundamentais.

4.1.6 Interpretao Para Gonzalez and Woods (2000), interpretao envolve a fixao de significado a um grupo de objetos reconhecidos, ou seja, o interesse est em dar significados imagem.

23 Interpretar uma imagem computadorizada um processo extremamente complexo. As dificuldades aparecem tanto pela quantidade de dados a serem processados como tambm pela falta de ferramentas de processamento fundamental para receber os dados iniciais a fim de gerar os resultados desejados (detalhamento do contedo da imagem).

4.2 Formato de vdeo AVI Aps definidos alguns conceitos sobre imagens digitais e apresentados os passos para processamento de imagens, sero destacadas, em seguida, algumas informaes sobre o padro de vdeo utilizado durante o desenvolvimento desse trabalho de concluso de curso. Um vdeo consiste numa sucesso de imagens em um determinado intervalo de tempo. O olho humano tem como caracterstica ser capaz de distinguir cerca de 20 imagens por segundo. Assim, fixando mais de 20 imagens por segundo, possvel superar a capacidade do olho e induzi-lo a ver uma imagem animada. Dessa forma, caracteriza-se a fluidez de um vdeo pelo nmero de imagens por segundo ou FPS (Frames per Second). Um arquivo de vdeo um formato de arquivo de computador que pode conter vrios tipos de dados, comprimido por meios estveis utilizando codecs de vdeo e/ou udio que so aplicativos responsveis por fazer a codificao e decodificao de determinados arquivos de mdia. Formatos mais simples podem conter diferentes tipos de codecs de udio, enquanto os mais avanados podem suportar mltiplas transmisses de udio e vdeo, legendas, informaes sobre captulos e metadados, alm da informao que necessria para sincronizao entre vrias transmisses. O padro AVI (Audio Video Interleave), cuja extenso oficial .avi, trata-se de um formato criado pela empresa Microsoft. De acordo com a Microsoft Corporation (1997) esse formato um caso especial de arquivo RIFF (Resource Interchange File Format Formato de arquivo com intercmbio de recursos) capaz de encapsular udio e vdeo.

24 possvel guardar no formato AVI uma faixa de vdeo codificada em um codec qualquer e nessa mesma faixa possvel associar um udio em MP3. Nele, podemos na realidade armazenar vrios tipos de informao diferentes tais como vrias seqencias de vdeo e som. Cada seqncia chamada de "Stream" e pode estar compactada com qualquer mtodo de compresso desde que esse mtodo (ou codec) esteja instalado no sistema operacional. Assim pode ocorrer do vdeo ser compactado em um sistema e no conseguir ser reproduzido em outro pela falta do codec. Um vdeo do tipo AVI formado por vrias imagens. Cada imagem chamada quadro e a quantidade de imagens projetadas por segundo chamada cadncia, medida em FPS. Quanto mais quadros por segundo o vdeo tiver, melhor, pois mais realista ser a imagem. Vdeos normalmente trabalham com a mesma cadncia da TV, que de 30 quadros por segundo. possvel conhecer o nmero de bytes transferidos por unidade de tempo de um determinado vdeo multiplicando-se o tamanho de uma imagem (frame) pelo nmero de imagens por segundo (ou FPS). Dessa forma, uma maneira de diminuir o tamanho do vdeo justamente diminuindo a quantidade de quadros por segundo. O tamanho do vdeo diminui, mas sua qualidade tambm: h quebras de quadro, isto , os movimentos no vdeo ficam truncados, menos realistas. Para diminuir o tamanho do vdeo, usada uma tcnica de compresso de imagem, que funciona removendo das imagens informaes que j foram projetadas. Esta tcnica economiza uma quantidade enorme de espao, j que somente o primeiro quadro precisa estar completo, os demais s tm o que diferente do quadro anterior. Esses quadros incompletos so chamados quadros delta (delta frames). Tendo em vista a grande popularidade desse padro de vdeo e que a biblioteca OpenCV oferece suporte somente para esse formato em particular, ele ser escolhido para o desenvolvimento do projeto. Para tanto, foram utilizados arquivos de vdeo no formato AVI (40 x 30), com durao entre 10 e 14 segundos, 12 quadros/s e tamanho entre 14 e 25 KB, para treinamento e validao da rede neural.

25 4.3 Redes Neurais Artificiais

Partindo-se do conhecimento das caractersticas e do princpio de funcionamento de um arquivo de vdeo, possvel escolher uma ferramenta capaz de assimilar algum tipo de informao presente em uma seqncia de imagens e poder realizar o reconhecimento de um determinado tipo de padro. Um dos ramos da inteligncia artificial que vem se desenvolvendo bastante ultimamente o de redes neurais (Cordeiro, 2002). De acordo com Artur (1999), seu crescente uso se deve capacidade de fazer suposies mais delicadas a respeito da distribuio dos dados de entrada do que mtodos estatsticos tradicionais e capacidade de auxiliar na resoluo de problemas de natureza no-linear. Segundo Haykin (2001), uma rede neural um processador maciamente paralelamente distribudo constitudo de unidades de processamento simples, que tm a propenso natural para armazenar conhecimento experimental e torn-lo disponvel para uso (...). Segundo Ludwig e Costa (2007) as RNAs so, provavelmente, a mais antiga tcnica de Inteligncia Artificial em uso. A era moderna das redes neurais comeou, segundo Braga et. al (2000), com o trabalho pioneiro de McCulloch e Walter Pitts em 1943. McCulloch foi um psiquiatra e neuroanatomista por treinamento; passou cerca de 20 anos refletindo sobre a representao de um evento no sistema nervoso. Pitts foi um prodgio matemtico que se associou a McCulloch em 1942. A inteno era fazer uma analogia entre neurnios biolgicos e circuitos eletrnicos. De acordo com Haykin (2001), no artigo escrito em 1943, os autores McCulloch e Pitts descrevem um clculo lgico das redes neurais que unificava os estudos da neurofisiologia e da lgica matemtica. Com um nmero suficiente de neurnios artificiais e com conexes sinpticas ajustadas apropriadamente e operando de forma sncrona, os dois autores mostraram que uma rede assim construda realizaria, a princpio, a computao de qualquer funo computvel. Este era um resultado muito significativo e com ele geralmente aceito o nascimento das disciplinas de redes neurais e inteligncia artificial.

26 Uma RNA caracterizada por uma arquitetura, um mtodo de aprendizado ou treinamento, uma funo de ativao e um bias. Informalmente ela um sistema composto por vrios neurnios. Estes neurnios esto ligados por conexes, chamadas conexes sinpticas. Alguns neurnios recebem excitaes do exterior e so chamados neurnios de entrada e correspondem aos neurnios dos rgos dos sentidos. Outros tm suas respostas usadas para alterar, de alguma forma, o mundo exterior e so chamados neurnios de sada e correspondem aos motoneurnios que so os neurnios biolgicos que excitam os msculos. Os neurnios que no so nem entrada nem sada so conhecidos como neurnios internos. Estes neurnios internos rede tm grande importncia e so conhecidos por alguns como ocultos. Um neurnio artificial uma estrutura relativamente simples que responde a estmulos de outros neurnios conectados a ele. Para Cordeiro (2002), essa arquitetura d s redes neurais caractersticas marcantes de intenso paralelismo e robustez. A Figura 3 mostra a representao artificial de um neurnio natural.

Figura 3. Representao artificial de um neurnio natural (Cordeiro, 2002).

Pela observao da Figura 3, percebe-se que um neurnio artificial composto, basicamente, por um conjunto de entradas x1, x2,..., xm, uma sada yk, uma funo responsvel pelo clculo da entrada efetiva para o neurnio () denominada somador, uma funo de ativao (.), os pesos e o bias. As entradas x1, x2,..., xm representam os sinais vindos de outros neurnios. Os pesos wk1, wk2,...,

27 wkm representam os pesos sinpticos das conexes entre os neurnios da camada anterior e da camada k. O neurnio pode ainda apresentar um bias (bk) que tem o efeito de aumentar ou diminuir a entrada lquida da funo de ativao, ou seja, o termo bias age como um peso extra, estmulo, nas conexes das unidades cuja entrada sempre um. Matematicamente, um neurnio k seria descrito pelas seguintes equaes: (1) (2) (3) Uma vez que a entrada para um determinado neurnio calculada, o valor resultante comparado a um limiar (valor estipulado) que, uma vez atingido, propaga a sada para os neurnios da camada seguinte. Nesse processo, a funo de ativao muito importante, pois ela usada para restringir a amplitude de sada de um neurnio. Tipicamente, o intervalo normalizado da amplitude de sada de um neurnio escrito como o intervalo unitrio fechado [0,1] ou alternativamente [-1,1] (Haykin, 2001). A no linearidade do neurnio freqentemente introduzida na funo de ativao. A Figura 4 mostra algumas funes identificadas,

respectivamente, como: funo rampa, em degraus e tangente hiperblica.

Figura 4. Funes de ativao comumente usadas.

A arquitetura de uma RNA definida pela maneira com a qual os neurnios esto estruturados. Em geral, pode-se identificar trs classes de arquiteturas de rede fundamentalmente diferentes (Haykin, 2001): Redes Alimentadas Adiante com

28 Camada nica, Redes Alimentadas Diretamente com Mltiplas Camadas e Redes Recorrentes (possui pelo menos um lao e uma camada de ns). No caso mais comum, os neurnios so separados em camadas (conforme mostra a Figura 5), de modo que aqueles pertencentes a uma dada camada possam conectar-se unicamente aos da camada imediatamente anterior e emitem seu sinal exclusivamente aos neurnios da camada imediatamente posterior. Para o reconhecimento de padres, o treinamento da rede realizado corrigindo os pesos nas conexes para se estabelecer as relaes entre as caractersticas e classes que promovam a melhor discriminao possvel entre os padres de classes diferentes. Assim, ao ser apresentado rede um novo padro, esta indicar a classe que melhor o representa na camada de sada (Artur, 1999).

Figura 5. Arquitetura de uma rede neural (Silva e Leal, 2002).

O conhecimento numa rede neural artificial no est armazenado em locais determinados. De acordo com Carlos (1994), o conhecimento est armazenado na topologia e nos pesos. Portanto, os pesos representam o conhecimento da rede e determinam a ponderao que determinada entrada possui. Quanto mais estimulada uma conexo sinptica, mais freqente a atualizao do respectivo peso e, conseqentemente, maior a influncia desta entrada na produo da sada. O processo de aprendizado de uma rede neural artificial acontece, basicamente, de duas formas: aprendizado supervisionado e aprendizado nosupervisionado. O tipo de aprendizagem determinado pela maneira com a qual a modificao dos parmetros ocorre (Haykin, 2001).

29 No aprendizado no-supervisionado, nenhum conjunto de pares de entrada e sada apresentado rede. Neste caso so fornecidas condies para realizar uma medida, independente da tarefa ou da qualidade da representao, cuja rede deve aprender. Durante o aprendizado supervisionado, pares de entrada e sada so apresentados rede. Esses pares consistem em um conjunto de entradas e um conjunto com as sadas desejadas para cada entrada. Quando uma entrada apresentada rede, uma sada ser produzida e posteriormente comparada com a sada desejada. Se a sada produzida for diferente da sada desejada, um ajuste de pesos sinpticos dever ser realizado de forma que a rede armazene o conhecimento desejado e, conseqentemente, reflita o aprendizado das funes para as quais ela foi projetada. Portanto, o aprendizado consiste em um processo iterativo de atualizao dos pesos sinpticos e, por meio desse processo, uma RNA capaz de aprender e generalizar. O ajuste dos pesos sinpticos realizado de forma a minimizar a diferena entre a sada produzida e a sada desejada at que, para determinada entrada, a respectiva sada seja calculada pela rede. O clculo abaixo visa somar ao peso atual o erro gerado pela rede e, dessa forma, corrigir o valor do peso. Existem inmeros clculos para este fim. No exemplo a seguir, ser utilizada a Regra Delta, descrita abaixo:

Onde: wi(n + 1): Novo peso wi(n): peso atual i: correo associada entrada i c: taxa de aprendizado (normalmente 1 quando a rede opera com valores binrios) g = sada desejada sada obtida

30 De acordo com Ludwig e Costa (2007), uma das desvantagens das redes neurais consiste no fato delas serem, normalmente, uma caixa preta. Dessa forma, impossvel justificar como uma rede chegou a um determinado resultado ou, no caso de uma rede com mltiplas camadas, saber qual a importncia de um peso sinptico para certo resultado. No entanto, possvel descobrir se a rede est funcionando corretamente pela anlise do erro mdio quadrtico apresentado ao se introduzir os dados para validao.

4.3.1 Algoritmo Backpropagation Para que uma rede neural seja capaz de fazer o reconhecimento de padres, inicialmente a estrutura da rede treinada, ou seja, adquire conhecimento, para poder identificar os padres almejados. Um algoritmo de treinamento bastante conhecido na literatura atravs do qual as redes neurais podem adquirir conhecimento, o chamado backpropagation. Ele constitudo por duas etapas: a propagao e a retropropagao de um conjunto de sinais atravs da rede. A propagao consiste na aquisio dos dados pela camada de entrada e sua propagao por toda rede, produzindo uma sada. A sada da rede neural comparada com a sada desejada e um valor de erro calculado. A partir da comea o processo de retropropagao, esse erro propagado de volta rede neural e usado para ajustar os pesos buscando reduzir o erro a cada iterao para que o resultado aproxime-se cada vez mais da sada desejada. A Figura 6 ilustra o esquema de funcionamento desse algoritmo.

Figura 6. Esquema do funcionamento do Algoritmo Backpropagation.

31 As redes que utilizam backpropagation trabalham com a regra delta generalizada, uma variao da regra delta, apropriada para redes com mltiplas camadas. A superfcie de erro para um treinamento usando esse algoritmo pode no ser to simples, como a ilustrada na Figura 7. Nestes casos, devem ser utilizadas redes com camadas intermedirias. Ainda assim, as redes ficam sujeitas aos problemas de procedimentos hill-climbing, ou seja, ao problema de mnimos locais. A Figura 7 tambm ilustra o processo de reduo dos erros utilizando o backpropagation. O erro cometido pela rede vai sendo progressivamente diminudo, podendo chegar ao mnimo global. Esta figura ilustra um caso simples de uma rede com apenas um neurnio e duas conexes. Os valores dos pesos da rede definem a coordenada de um ponto da superfcie de erro. O erro produzido pela rede para cada combinao de valores de pesos dado pela altura da superfcie naquele ponto. Assim, quanto mais alto for o ponto, maior o erro produzido pela rede.

Figura 7. Superfcie de erro para um treinamento usando backpropagation (Braga et al, 2000).

A regra delta generalizada funciona quando so utilizadas na rede unidades com uma funo de ativao semi-linear, que uma funo diferencivel e no decrescente. Uma funo de ativao amplamente utilizada, nestes casos, a funo sigmide que apresenta um grfico em forma de S e definida pela equao: .

32 4.3.2 Rede MLP (Multilayer Perceptron) Segundo Braga et. al (2000), MLP um tipo de rede neural artificial que apresenta pelo menos uma camada intermediria ou escondida. Para treinar esse tipo de rede utiliza-se o algoritmo backpropagation. A Figura 8 apresenta um exemplo de rede MLP. O Multilayer Perceptron foi concebido para resolver problemas complexos, os quais no poderiam ser resolvidos pelo modelo de neurnio bsico. Nesta classe de problemas, um nico perceptron (tipo de RNA mais simples para classificao de padres que possui apenas um neurnio) ou uma combinao das sadas de alguns perceptrons poderia realizar determinadas operaes, porm, seria incapaz de aprend-las. Para isto, so necessrias mais conexes, que s existem em uma rede de perceptrons dispostos em camadas. Os neurnios internos so de suma importncia na rede neural, pois se provou que sem estes se torna impossvel a resoluo de problemas linearmente no separveis, ou seja, aqueles que no podem ser satisfeitos utilizando uma reta como fronteira de deciso (veja Figura 9).

Figura 8. Exemplo de rede MLP.

33

Figura 9. Problemas linearmente e no-linearmente separveis.

4.4 Reconhecimento de Padres

A palavra reconhecer significa conhecer de novo, e isto implica num processo onde existe algum conhecimento prvio e algum tipo de armazenamento do conhecimento sobre o objeto a ser reconhecido. Esta a parte onde os sistemas de viso possuem uma interseco com a rea de inteligncia artificial. Portanto, para fazer o reconhecimento, um sistema de viso necessita de uma base de conhecimento dos objetos a serem reconhecidos. Esta base de conhecimento pode ser implementada diretamente no cdigo ou pode ser aprendida a partir de um conjunto de amostras dos objetos a serem reconhecidos utilizando tcnicas de aprendizado de mquina. Os seres humanos so bons reconhecedores de padres. Ao receberem dados sua volta atravs dos sentidos, eles so capazes de reconhecer a fonte dos dados e, freqentemente, isso acontece quase que imediatamente e praticamente sem esforo aparente. Pode-se, por exemplo, reconhecer um rosto familiar de uma pessoa muito embora esta pessoa tenha envelhecido desde o ltimo encontro, identificar uma pessoa familiar pela sua voz ao telefone, apesar de uma conexo ruim. Enfim, os humanos so capazes de reconhecer um padro atravs de um processo de aprendizagem; e assim acontece com as RNAs. Um objeto pode ser definido por mais de um padro (textura, forma, cor, dimenses, etc.) e o reconhecimento individual de cada um destes padres pode facilitar o reconhecimento do objeto como um todo. Segundo Marengoni e Stringhini (2009), as tcnicas de reconhecimento de padres podem ser divididas em dois grandes grupos: estruturais e as de teoria de deciso. Nas estruturais, os padres

34 so descritos de forma simblica e a estrutura a forma como estes padres se relacionam. Nas tcnicas, que utilizam teoria de deciso e englobam abordagens estatsticas e neurais, os padres so descritos por propriedades quantitativas e deve-se decidir se o objeto possui ou no estas propriedades. possvel ainda utilizar ambas as tcnicas, como por exemplo, no processo de reconhecimento de faces. No uma tarefa fcil encontrar tcnicas estruturais prontas em bibliotecas para linguagens de programao, uma vez que estas dependem da estrutura de cada objeto. Para alguns objetos especficos, porm, possvel encontrar pacotes prontos. As tcnicas baseadas em teoria de deciso so mais gerais e podem ser adaptadas a diferentes tipos de objetos. De acordo com Haykin (2001), o reconhecimento de padres pode ser definido formalmente como o processo pelo qual um padro/sinal recebido atribudo a uma classe dentre um nmero predeterminado de classes (categorias). Para realizar o reconhecimento de padres, uma rede passa inicialmente por uma seo de treinamento, como j foi mencionado. No caso do treinamento supervisionado, um conjunto de padres de entrada junto com a categoria qual cada padro particular pertence so apresentados repetidamente ela. Aps o treinamento, apresenta-se a rede um padro que no foi visto antes mas que pertence mesma populao de padres utilizada para treinar a rede. A rede tornase capaz de identificar a classe daquele padro particular por causa da informao que ela extraiu dos dados de treinamento. proporo de padres corretamente classificados do conjunto total de padres de teste dado o nome taxa de acerto. A proporo de padres incorretamente classificados d origem taxa de erro.

4.5 Rastreamento

Aps efetuar o reconhecimento de um padro em uma seqncia de quadros de um vdeo utilizando rede neural, possvel tambm acompanhar a sua

35 trajetria nessa seqncia. Dessa forma, o rastreamento consiste num processo de reconhecer um determinado padro em uma seqncia de imagens ou quadros. De acordo com Marengoni e Stringhini (2009), as tcnicas de rastreamento podem ser aplicadas nas mais diversas reas, desde sistemas de segurana (vigilncia) at o uso em sistemas de interface homem-mquina. Alm disso, no openCV, tais tcnicas incluem dois componentes principais: identificao de objetos e modelagem da trajetria. possvel encontrar mtodos para se estimar a posio de um objeto quadro a quadro, indo de filtros Kalman, at processos com filtros de partculas. Algoritmos estimadores so aqueles capazes de estimar, por exemplo, a localizao de uma pessoa ou objeto em movimento numa seqncia de vdeo. Segundo Marengoni e Stringhini (2009), esta tarefa dividida, basicamente, em duas fases: a) predio baseada num conhecimento prvio de dados da imagem e b) correo que usa novas medidas para apurar a predio realizada anteriormente. A tcnica mais conhecida para isto o filtro de Kalman. Conforme WELCH et al. (2006), ele resolve o problema de estimar o estado de um processo

discreto que governado por uma funo no-determinstica linear (Equao 4) e pela medio de z (Equao 5). (4) (5) O vetor u armazena entradas para controle externo sobre o sistema, B uma matriz que relaciona estas entradas para a mudana de estado. Pelo fato de observar apenas o sistema a ser previsto, u sempre igual a zero e a Equao 4 possui apenas o primeiro e o ltimo termo diferentes de zero. O valor de A representa a relao entre o estado anterior, medido, e o estado previsto. Na equao 5, H uma matriz m x n representando a relao entre o estado previsto (xt) e o valor medido (zt). As variveis aleatrias wt e vt so chamadas, respectivamente, de rudo de processo e rudo de medio. Conforme WELCH et al. (2006), o filtro utiliza um mtodo de controle retroalimentado, ou seja, ele estima o processo em algum momento e obtm a

36 retroalimentao medindo o sistema ruidoso. Assim pode-se dizer que ele funciona em um processo de duas etapas: uma de previso e outra de correo. Na etapa de previso, o prximo estado do filtro previsto a partir do estado atual. Essa previso conhecida como estado a priori. Depois de prever o prximo estado, ele realiza a correo. Nessa etapa, o valor medido incorporado ao sistema para melhorar a estado a priori, criando um estado aprimorado a posteriori. A diferena entre o previsto e o medido utilizada para aperfeioar as variveis do filtro, diminuindo, assim, o erro de predio. Alm desta tcnica, existem tambm algumas funes no OpenCV que so utilizadas para rastreamento, baseadas em clculos estatsticos. Essas funes esto presentes nos algoritmos de rastreamento Mean Shift e Cam Shift. Cam Shift (Continuously Adaptive Mean-SHIFT) um algoritmo

desenvolvido para o rastreamento de cor, possibilitando tambm o rastreamento de faces. baseado numa tcnica estatstica onde se busca o pico entre distribuies de probabilidade. Ele utiliza como base o algoritmo Mean Shift (mdia por deslocamento). O Mean Shift foi adaptado no Cam Shift para tratar a mudana dinmica das distribuies de probabilidade das cores numa seqncia de vdeo.

4.6 Biblioteca OpenCV possvel encontrar ferramentas e bibliotecas para auxiliar na execuo das tarefas de reconhecimento e estimao de trajetria, discutidas anteriormente. Desenvolvida inicialmente pela Intel Corporation, OpenCV (Open Source Computer Vision) uma biblioteca de programao, de cdigo aberto, que implementa uma variedade de ferramentas de interpretao de imagens. Ela foi idealizada com o objetivo de tornar a viso computacional acessvel a usurios e programadores em reas tais como a interao humano-computador em tempo real e a robtica. O OpenCV possui mdulos de Processamento de Imagens e Vdeo I/O, Estrutura de dados, lgebra Linear, GUI Bsica com sistema de janelas independentes, Controle de mouse e teclado, alm de mais de 350 algoritmos de

37 Viso Computacional como filtros de imagem, calibrao de cmera,

reconhecimento de objetos e anlise estrutural. Segundo Bradski e Kaehler (2008), a biblioteca OpenCV est escrita em C e C++ e pode ser executada nos sistemas operacionais Linux, Windows e Mac OS X, podendo tirar proveito de processadores com mltiplos ncleos. O Anexo A apresenta os procedimentos para ajuste do ambiente OpenCV para os sistemas operacionais Linux e Windows. Existe um desenvolvimento ativo em interfaces para dar suporte a programadores das linguagens Python, Ruby, Matlab, e outras linguagens. O pacote OpenCV est disponvel gratuitamente na Internet por meio do endereo eletrnico: http://sourceforge.net/projects/opencvlibrary. No pacote da verso 2.0, esto disponveis o cdigo fonte da biblioteca, os executveis (binrios) otimizados para os processadores Intel, a documentao e exemplos em C/C++ e python. As principais bibliotecas do OpenCV so: cv.h : possui as principais funcionalidades de processamento de imagem e algoritmos de Viso Computacional. cvaux.h: possui algoritmos de Viso que ainda esto em fase experimental. cxcore.h: possui estruturas bsicas e algoritmos, suporte a XML, funes de desenho. highgui.h: possui funes ligadas a interface de usurio, imagem e entrada e sada de vdeos. ml.h: possui mtodos de Machine Learning (aprendizagem de mquina), clustering, classificao e anlise de dados.

Um programa OpenCV, ao ser executado, invoca automaticamente uma DLL (Dynamic Linked Library) que detecta o tipo de processador e carrega, por sua vez, a DLL otimizada para este. Juntamente com o pacote OpenCV, oferecida a

38 biblioteca IPL (Image Processing Library), da qual a OpenCV depende parcialmente, alm de documentao e um conjunto de cdigos exemplos. A biblioteca est dividida em cinco grupos de funes: Processamento de imagens; Anlise estrutural; Anlise de movimento e rastreamento de objetos; Reconhecimento de padres e Calibrao de cmera e reconstruo 3D. Portanto, o OpenCV foi de fundamental importncia para o desenvolvimento deste projeto pois ofereceu suporte para o tratamento de Vdeos, para RNAs do tipo MLP e, ainda, forneceu um algoritmo para rastreamento conhecido como Cam Shift.

39 5 Materiais e mtodos

Os materiais utilizados no desenvolvimento deste projeto foram: cmera digital, arquivos de vdeo, livros, artigos, computador, simuladores e ferramentas de programao. Estes materiais encontram-se disponveis na internet e nos laboratrios de hardware e de informtica da UNIVASF. Os materiais para estudos foram basicamente: livros, apostilas, tutoriais, artigos, trabalhos de concluso de curso e simuladores. Estes materiais foram obtidos atravs do orientador, na biblioteca da prpria universidade e tambm obtidos pela internet. Os conhecimentos requeridos para o desenvolvimento do projeto foram referentes a linguagens de programao tais como C/C++ (Costa, 2007), processamento de imagens, redes neurais e estimadores. Conhecimentos estes que foram adquiridos atravs das disciplinas oferecidas pela UNIVASF, atravs do orientador e tambm atravs de livros, artigos e minicursos.

5.1 Delineamento Metodolgico O projeto foi desenvolvido durante 12 meses. As atividades desenvolvidas esto relacionadas abaixo e seguiram o cronograma da Tabela 1. Para o caso especfico deste projeto, foram seguidos os seguintes passos: 1. Estudo de estruturas de gerao de vdeos digitais, redes neurais artificiais e aplicaes de reconhecimento de padres em vdeos, programao em C/C++; 2. Download, instalao e estudo da biblioteca OpenCV; 3. Elaborao de exemplos e testes com a biblioteca OpenCV. Nesta etapa foram desenvolvidos algoritmos em C/C++ utilizando a biblioteca OpenCV voltados para o projeto tais como rotinas para ler um arquivo de vdeo, capturar um quadro, processar o contedo de um quadro, entre outras. Essas rotinas foram usadas posteriormente para implementao dos

40 algoritmos de processamento de imagem, reconhecimento de padres e acompanhamento de trajetria; 4. Anlise e definio dos procedimentos utilizados para estruturao dos algoritmos. Nessa etapa foi feito um planejamento de como os algoritmos seriam implementados e como os mdulos estariam ligados entre si. 5. Desenvolvimento em linguagem C/C++ utilizando a biblioteca OpenCV dos algoritmos para capturar e aplicar operaes de processamento de imagem para um determinado quadro ou seqncias de quadros de um vdeo, efetuar reconhecimento de um padro em uma seqncia de quadros utilizando rede neural, e para acompanhar a trajetria de um determinado padro em uma seqncia de quadros de um vdeo; 6. Realizao de testes e validao; 7. Documentao das atividades desenvolvidas; 8. Efetuar correes sugeridas pela banca examinadora;

Tabela 1. Cronograma de Execuo do Projeto Atividade Ms Agosto/2010 Setembro/2010 Outubro/2010 Novembro/2010 Dezembro/2010 Janeiro/2011 Fevereiro/2011 Maro/2011 Abril/2011 Maio/2011 Junho/2011 Julho/2011 1 X X 2 X X X X X X X X X X X X 3 4 5 6 7 8

X X X X
X X X X X X X X

X X X X X X

As atividades acima listadas foram executadas durante dois perodos ou duas disciplinas: TCCI e TCII. O perodo do TCCI consistiu na fase inicial para o aprofundamento terico do tema a ser trabalhado e preparao para posterior

41 codificao dos algoritmos no TCCII. A defesa do TCCI foi fundamental para o desenvolvimento do sistema, uma vez que nesta fase foi definido o escopo do trabalho e as formas como os algoritmos seriam implementados. As atividades de 1 a 4 consistiram em uma preparao para o desenvolvimento dos algoritmos mencionados na atividade 5. Na atividade 1, foi efetuado um estudo e levantamento bibliogrfico dos conhecimentos necessrios para desenvolvimento do projeto. Para tanto foi realizado estudo de livros, tutoriais, apostilas, artigos referentes aos temas: viso computacional, redes neurais, OpenCV, reconhecimento de padres e linguagem de programao C/C++. Em seguida, na atividade 2, houve uma preparao do ambiente operacional, por meio de download e instalao das ferramentas necessrias para a implementao dos algoritmos. Para execuo das etapas posteriores foi necessrio o download, instalao e configurao das seguintes ferramentas de software, tanto no computador do laboratrio 10 da UNIVASF como no computador pessoal, necessrias para execuo do projeto: DEV-C++, biblioteca OpenCV e

FormatFactory 2.50 (programa para converso de vdeos). Na etapa posterior, foi realizado o estudo e execuo de exemplos de programas utilizando a biblioteca OpenCV que acompanham a ferramenta e esto disponveis para execuo aps sua devida instalao e configurao. Alm disso, foram desenvolvidos algoritmos em C/C++ utilizando a biblioteca OpenCV tais como rotinas para ler um arquivo de vdeo, capturar um quadro, processar o contedo de um quadro, treinar uma rede, localizar um padro em um quadro, entre outras. Essas rotinas foram usadas posteriormente para implementao dos algoritmos de processamento de imagem, reconhecimento de padres e acompanhamento de trajetria. O passo 4 consistiu ento em planejar como os exemplos desenvolvidos at o momento da fase de implementao do sistema seriam utilizados, como os algoritmos estariam interligados, como seria realizado o treinamento,

reconhecimento e acompanhamento dos padres em arquivos de vdeo. Durante esse planejamento, decidiu-se que o sistema seria desenvolvido na plataforma operacional Windows (tambm compatvel com o Sistema Operacional Linux desde

42 que devidamente configurado), utilizando-se a ferramenta de programao DEVC++, sendo dividido em partes para facilitar a implementao e correo de eventuais erros. Essa ferramenta de programao pode ser baixada gratuitamente no site oficial: http://www.bloodshed.net/. A rede neural escolhida foi a do tipo Multilayer Perceptron (MLP) por se adequar melhor resoluo do problema. Para efetuar o treinamento da rede, foi utilizado o algoritmo backpropagation. A linguagem escolhida para implementao do sistema foi C++. Dentre as principais caractersticas que motivaram tal escolha esto: cdigo multiplataforma, paradigma de orientao objeto, poder de processamento e manter um padro com o projeto j realizado. Na etapa 5, desenvolveu-se o sistema propriamente dito. O primeiro passo consistiu na aquisio de arquivos de vdeo e posterior captura dos quadros dos mesmos. Foi ento desenvolvido um algoritmo para processamento dos quadros capturados. Em seguida, foi esquematizado o algoritmo da RNA do tipo MLP para posterior treinamento com arquivos de vdeo. Utilizou-se a RNA fornecida pelo prprio OpenCV. Para tanto, foram utilizados 4 arquivos de vdeo no formato AVI (40 x 30), para cada tipo de padro, com durao entre 10 e 14 segundos, 12 quadros/s e tamanho entre 14 e 25 KB, para treinamento e validao da rede neural. Gravou-se tambm arquivos no mesmo formato, 8 arquivos de vdeo para cada tipo de padro, com durao entre 25 e 36 segundos, 12 quadros/s e tamanho entre 32 e 66 KB, para testar o funcionamento do algoritmo de reconhecimento e acompanhamento de padres. A Figura 10 ilustra uma seqncia de quadros obtidos de um vdeo com o padro crculo. Aps realizar o treinamento da RNA para o reconhecimento de um determinado padro, foi possvel esquematizar o algoritmo para deteco de trajetria, utilizando uma funo para rastreamento conhecida como CamShift fornecida pela biblioteca OpenCV.

43

Figura 10. Seqncia de quadros de um vdeo mostrando a movimentao de um crculo.

A gravao de vdeos foi realizada utilizando uma cmera digital Kodak Easyshare C143 utilizando-se uma resoluo de 640 x 480. Para diminuir a resoluo dos vdeos para 40 x 30 utilizou-se o software gratuito de converso conhecido como FormatFactory 2.50. Aps a implementao de cada algoritmo, realizava-se a atividade 6, ou seja, eram efetuados testes para verificar o funcionamento e validar o que foi

desenvolvido. Da mesma forma, ao longo de todas as etapas de desenvolvimento do sistema foi executada a atividade 7, isto , todos os procedimentos realizados foram documentados para a produo de relatrios bimestrais. Foi reservado tambm um tempo, conforme mostra a atividade 8, para realizar eventuais correes sugeridas pela banca examinadora deste Trabalho de Concluso de Curso.

44 6 Resultados obtidos O primeiro desafio a ser vencido consistiu em aprender a lidar com arquivos de vdeo, desde a sua captura at a reproduo, separao e processamento de quadros. Pelo fato de lidar muito bem com imagens, a biblioteca OpenCV oferece uma gama de funes que tambm se aplicam ao processamento de quadros de um vdeo. Para a captura dos quadros de um vdeo no formato AVI e a sua respectiva execuo, necessrio conhecer algumas das funcionalidades que a ferramenta OpenCV proporciona. Antes do incio da captura de quadros do arquivo de vdeo, necessrio informar para o algoritmo o caminho completo de localizao do arquivo no computador. Alm disso, preciso declarar uma varivel do tipo IplImage para armazenar temporariamente os quadros individuais do arquivo de vdeo, e uma varivel do tipo CvCapture que consiste numa estrutura para carregar o vdeo. Para a execuo do vdeo, necessria a criao de uma janela. Na Figura 11, apresentado um fluxograma com as etapas de captura de quadros num arquivo de vdeo.

Figura 11. Fluxograma com as etapas de captura de quadros de vdeo

45 Na primeira etapa do fluxograma anterior, inicializa-se a captura por meio da chamada da funo cvCreateFileCapture(char*) que retorna uma estrutura para captura de vdeo denominada CvCapture e recebe como parmetro o caminho completo de localizao do arquivo no computador. Caso ocorra alguma falha durante a execuo da funo cvCreateFileCapture(char*), a captura no poder continuar. Uma falha pode acontecer caso o caminho do arquivo de vdeo seja informado incorretamente ou caso o arquivo no exista. No ocorrendo nenhum erro, o programa continua a execuo normalmente. O programa entra em um lao de repetio que s finalizado quando no possvel mais capturar um prximo quadro do vdeo, liberando-se ento a fonte de captura. Em cada execuo do lao de repetio ocorre a captura de um novo quadro por meio da funo cvQueryFrame(CvCapture*) e a sua exibio em uma janela por meio da funo cvShowImage(). A funo cvQueryFrame(CvCapture*) retorna um quadro capturado da varivel Cvcapture. possvel ainda a execuo de algum tipo de processamento sobre o quadro capturado. Portanto, possvel vrias execues das etapas 2 (Captura, descompresso e retorno de Frame ) e 3 (Processando o Frame) do fluxograma da Figura 11. Alm de permitir a aplicao de operaes de processamento s imagens contidas em arquivos de vdeo no formato AVI, a biblioteca OpenCV tambm oferece a possibilidade de capturar um vdeo diretamente de uma cmera filmadora, conforme ilustra a Figura 12.

Figura 12. Tela de sada de vdeo capturado de uma cmera

46 Os procedimentos para captura de vdeo a partir de uma cmera seguem as mesmas etapas do fluxograma da Figura 11, o que muda que a fonte de captura agora uma cmera, ao invs de um arquivo de vdeo. Para definir uma cmera como fonte de captura utiliza-se a funo cvCaptureFromCAM(int). O parmetro desta funo um nmero inteiro (aceita valores de 0 a 10) que se refere ao ndice da cmera que ser utilizada para a captura de imagem, ou seja, possvel capturar imagem de vrias cmeras simultaneamente, chamando a funo com os ndices respectivos. No caso deste projeto, utilizou-se apenas uma cmera, portanto utilizouse o valor do parmetro como sendo 0 (zero). Caso acontea alguma falha e a captura no possa ser inicializada, devido a seleo da cmera errada ou caso ela esteja desligada, uma mensagem de erro ento exibida na tela e o programa ento finalizado. Depois do passo anterior e aps ter inicializado uma janela, para visualizar o resultado, o programa entra em um lao de repetio que s finalizado quando no possvel mais capturar um prximo quadro do vdeo.

6.1 Etapa de processamento das imagens Aps a captura de cada quadro de um determinado vdeo foi aplicado um conjunto de transformaes em cada um desses quadros com o objetivo de facilitar o trabalho da RNA durante a etapa de treinamento e reconhecimento. Podem ser aplicados diversos tipos de operaes de processamento sobre uma determinada imagem. No caso deste trabalho, foram aplicadas operaes de transformao em tons de cinza, filtro gaussiano, binarizao e deteco de bordas por meio do filtro de sobel. Esta ltima foi bastante importante para o desenvolvimento do algoritmo, pois gera como resultado apenas o contorno que define a forma principal do objeto permitindo a economia de recursos computacionais uma vez que no ser necessrio analisar todo o contexto da imagem. A transformao em tons de cinza foi realizada para cada quadro original capturado do vdeo de entrada, utilizando-se a funo cvCvtColor(quadro, cinza, CV_BGR2GRAY) que consiste basicamente em tornar os valores das coordenadas

47 RGB da imagem de origem todos com o mesmo valor de acordo com um limiar estabelecido. Essa funo recebe como parmetros uma imagem de entrada, outra de sada e um cdigo inteiro que identifica o tipo de converso de cor que ser executado, e possui retorno do tipo void. No caso do OpenCV, a transformao de cada pixel ocorre da seguinte forma: Y = 0.299*R + 0.587*G + 0.114*B, onde Y sada para um determinado pixel da imagem. Aps a transformao em tons de cinza, os quadros resultantes passam por um filtro gaussiano para a correo e remoo de rudos. O filtro gaussiano basicamente uma operao de convoluo, utilizada para borrar uma imagem digital com o objetivo de remover detalhes e rudos. Ele utiliza dois parmetros: a dimenso da janela e o desvio padro mximo. O desvio padro est relacionado com o quanto a imagem ser suavizada (quanto maior mais a imagem suavizada), a janela define a influncia que os pixels vizinhos tero sobre um determinado ponto. Para a sua execuo utilizou-se a funo cvSmooth(cinza, filtro, CV_GAUSSIAN, 3, 3, 0, 0), onde se define, respectivamente, a imagem de entrada, a imagem de sada, coordenadas da janela e desvio padro. Utilizou-se uma janela 3 X 3 e um desvio padro igual a 0 pelo fato de no borrar muito a imagem. Uma distribuio Gaussiana com mdia zero e desvio padro em duas

dimenses descrita em termos de direes perpendiculares X e Y pela equao abaixo, onde X e Y representam as posies dos pixels na janela e G(x, y) retorna o valor a ser colocado na posio (x, y) da janela.

G x, y

1 2

x2 y2 2 2

Depois dos quadros passarem pelo filtro gaussiano, aplicou-se o algoritmo de Canny. Este ltimo foi utilizado para efetuar a deteco de contornos e a conseqente binarizao dos quadros. Numa etapa inicial, a imagem de entrada ligeiramente desfocada para reduzir o efeito de pixels ruidosos. Em seguida, acontece o clculo do gradiente da intensidade de cada pixel na imagem, retornando assim a direo da maior variao de claro para escuro e a quantidade de variao nessa direo.

48 No algoritmo de Canny, as primeiras derivadas so calculadas em x e y e ento combinadas em quatro derivadas direcionais. Para o clculo dessas derivadas utiliza-se o operador Sobel definido pela funo cvSobel(source, dest, xorder, yorder, mask) que retorna um tipo void e recebe como parmetro a imagem de entrada, a imagem de sada, ordem da derivada x, ordem da derivada y e tamanho da janela. Os pontos onde estas derivadas direcionais so mximos locais so pixels candidatos para a montagem de contornos. Esses contornos so formados atravs da aplicao de um limiar de histerese para os pixels. Isto significa que existem dois limiares, um superior e um inferior. Se um pixel tem um gradiente maior do que o limite superior, ento aceito como um pixel de borda, se um pixel est abaixo do limite inferior, rejeitado. Se o gradiente do pixel est entre os limiares, ser aceito somente se estiver conectado a um pixel que est acima do limite de altura. Para a execuo do algoritmo de Canny, utilizou-se a funo cvCanny( filtro, filtro_sobel, sobel_limiar, sobel_limiar*8, 3 ), onde se define, respectivamente, a imagem de entrada em tons de cinza, a imagem de sada binarizada, limiar 1, limiar 2 e parmetro de abertura para operador Sobel. A Figura 13 ilustra na prtica alguns dos procedimentos descritos anteriormente, aplicados na etapa de processamento dos quadros de cada um dos vdeos de entrada. As telas da primeira coluna so os quadros originais, nos quadros da segunda foi aplicado transformao em tons de cinza, nos da terceira foi aplicado filtro Gaussiano e nos da ltima foi aplicado filtro Sobel. Aps a aplicao do algoritmo de Canny, os valores dos pixels de cada quadro do vdeo so armazenados em arquivos no formato txt, para posterior treinamento da RNA. Esses arquivos so nomeados de acordo com a ordem de numerao do quadro no vdeo, a Figura 14 mostra um exemplo de sada gerada para o quadro 0 de um arquivo de vdeo. Neste arquivo, o valor da linha 1 e coluna 1 indica o tamanho do vetor de pixels da imagem, resultante da multiplicao do seu comprimento pela sua largura (o que corresponde ao nmero de linhas do arquivo), o valor da linha 1 e coluna 2 a identificao do tipo de padro presente no quadro (o uso desse valor ser entendido posteriormente). Os valores de identificao do tipo de padro foram estabelecidos conforme mostra a Tabela 2.

49

Figura 13. Imagens resultantes do algoritmo de processamento de imagens

Figura 14. Arquivo com sadas do processamento do quadro 0

Tabela 2. Cdigos de identificao das classes de imagem

Padro Crculo Retngulo Tringulo

Sada desejada 10 20 30

50 6.2 Etapa de treinamento Aps devidamente processados, os quadros esto prontos para o treinamento de uma RNA para posterior reconhecimento. Nessa etapa, utilizou-se a RNA fornecida pelo prprio OpenCV. No entanto, antes de chamar a funo do OpenCV para treinamento da rede, foi necessrio configurar os parmetros da rede e preparar os dados para serem submetidos. Criou-se um arquivo da classe CvANN_MLP denominado de mlp que

consiste em uma estrutura para a criao de uma RNA do tipo MLP. Antes da criao da RNA, foi definida a sua arquitetura, que consistiu de 4 camadas (uma camada de entrada com 1200 neurnios, duas camadas ocultas com 20 neurnios e uma camada de sada com 1 neurnio). A quantidade de neurnios na camada de entrada corresponde ao tamanho da imagem de entrada. A quantidade de camadas ocultas com seus respectivos neurnios no fixa e pode ser alterada a qualquer momento no cdigo para refinamento dos resultados. A camada de sada, por meio de seu neurnio, corresponde classificao que ser dada pela rede. Essas configuraes foram ento salvas em uma matriz do tipo CvMat denominada de camadas_rede. Os dados resultantes da etapa de processamento de imagens (entradas e sada, salvas em arquivo do tipo ilustrado na Figura 14) foram ento carregados, respectivamente, para as matrizes denominadas no programa como dados e respostas. Foi criada ainda uma matriz chamada sada_rede para armazenar as respostas produzidas pela RNA. Dessa forma, foi criada uma RNA para cada vdeo de entrada. O cdigo completo da funo de treinamento desenvolvida em linguagem C/C++ encontra-se no Anexo B. Aps o carregamento dos dados, a RNA definida pela varivel mlp ento treinada por meio da chamada da funo mlp.train(), que est detalhada no trecho de cdigo da Figura 15. Dentre os parmetros que ela recebe esto as matrizes de entrada, critrios de finalizao (definidos como sendo o nmero mximo de iteraes ou a preciso), nmero mximo de iteraes (10000), preciso (0.000001), algoritmo de treinamento (BACKPROP - backpropagation), taxa de aprendizagem (0.01) e momento (0.01). A preciso consiste na diferena entre a sada obtida e a sada esperada. O momento um valor constante entre 0 e 1 que influencia na

51 velocidade de alterao dos pesos, acelerando-a ou desacelerando-a. A taxa de aprendizagem tambm um valor entre 0 e 1 que influencia na mudana dos pesos de cada neurnio e, conseqentemente, no tempo de treinamento da rede, isto , quando prximo de 0 esse tempo mais longo, contudo, quando prximo de 1 ele mais curto. A escolha dos valores dos parmetros foi realizada de forma experimental, isto , com base em testes de variados valores e anlises das mudanas nas respostas.

Figura 15. Trecho de cdigo mostrando funo de treinamento

A execuo da funo encerrada ao atingir um dos critrios de finalizao. Aps o treinamento, os dados resultantes so salvos em um arquivo .rna por meio da chamada mlp.save(nome_file). Esse arquivo contm os pesos ajustados pelo algoritmo backpropagation na etapa de treinamento e outras informaes relativas rede tais como: nmero de camadas e de neurnios, parmetros de treino, valores mnimos e mximos, critrios de aprendizagem, taxa de aprendizagem e momento, mtodo de treinamento, entre outras. A Figura 16 ilustra um exemplo desse tipo de arquivo. Para verificar o desempenho da rede chama-se a funo

mlp.predict(file_dados, file_saida_rede) para que ela utilize os pesos obtidos para calcular as sadas a partir dos prprios dados de entrada utilizados no treinamento. A sada gerada pela rede ento comparada com a sada que se espera. Caso o erro gerado seja maior que o erro estabelecido, a rede ento novamente treinada por meio da funo mlp.train() e os resultados so novamente salvos e atualizados.

52

Figura 16. Exemplo de arquivo de configuraes e pesos de uma RNA

No caso deste projeto, utilizou-se 4 vdeos de cada tipo de padro para treinamento (crculos, retngulos e tringulos). Portanto, foram geradas 12 RNAs nas configuraes descritas anteriormente, sendo uma pra cada vdeo de entrada.

6.3 Etapa de reconhecimento Aps a etapa de treinamento, uma RNA poder ento utilizar os pesos calculados para tentar reconhecer um padro em um novo vdeo a ela apresentado. Basicamente, a etapa de reconhecimento de padres constituda por dois blocos: processamento de imagem e a rede neural. O bloco para processamento de imagem efetua os procedimentos j descritos na Subseo 5.2.1. Ele responsvel por preparar a imagem, atravs da aplicao de transformaes sobre os seus pixels, de forma que o bloco da rede neural possa efetuar o reconhecimento do padro da forma mais eficiente possvel. Essa imagem ser algum quadro capturado dentro de uma seqncia de quadros de um arquivo de vdeo. A Figura 17 ilustra as etapas realizadas pelo algoritmo de reconhecimento de padres. O cdigo completo da funo de reconhecimento de padres desenvolvida em linguagem C/C++ encontrase no Anexo C. Nesta etapa verificou-se o correto funcionamento das RNAs geradas na etapa de treinamento utilizando o algoritmo backpropagation. Depois de processar

53 um determinado quadro do vdeo de entrada e gerar um arquivo txt com os dados resultantes da operao de processamento, o arquivo com os dados de treinamento de uma RNA escolhida pelo usurio ento carregado para que possa estimar a sada para aquele quadro. Se a sada estimada estiver com uma determinada preciso estabelecida, ento o padro foi reconhecido.

Figura 17. Esquema de blocos para o de reconhecimento de padres

6.4 Etapa de rastreamento Aps o reconhecimento de um determinado padro, possvel rastre-lo numa seqncia de quadros de um vdeo, caso ele ainda se faa presente. Neste trabalho foi utilizado o algoritmo de rastreamento conhecido como Cam Shift (Continuously Adaptive Mean-SHIFT). Ele foi desenvolvido para o rastreamento de cor. Baseia-se em uma tcnica estatstica onde se busca o pico entre distribuies de probabilidade. Para o seu funcionamento, necessrio fornecer a rea onde se encontra o padro que ser rastreado. Portanto, neste trabalho, o rastreamento acontece de duas formas. Na primeira forma, aps o padro ter sido reconhecido pela RNA, utiliza-se uma funo denominada definir_area(), implementada durante a realizao deste trabalho, para encontrar as coordenadas do retngulo que melhor circunscreve o padro detectado. A funo utiliza tcnicas de deteco de contornos e retorna o retngulo que melhor se adqua a um determinado contorno. O retngulo encontrado ento fornecido como informao inicial para o algoritmo

54 Cam Shift que ento ser responsvel por continuar rastreando o padro nos prximos quadros. A segunda forma de utilizao consiste em o usurio selecionar com o mouse o retngulo que melhor circunscreve o padro a ser rastreado. O Cam Shift utilizado na funo cvCamShift( const CvArr* prob image, CvRect window, CvTermCriteria criteria, CvConnectedComp* comp,

CvBox2D* box=NULL) da biblioteca OpenCV para o acompanhamento de objetos em uma seqncia de quadros. Essa funo retorna um inteiro que indica o nmero de operaes feitas internamente pelo Mean Shift. Ela recebe, respectivamente, como parmetros: projeo de fundo do objeto histograma, janela de pesquisa inicial, critrio para finalizar a pesquisa, estrutura resultante que contm as coordenadas da janela de pesquisa convergente e caixa circunscrita para o objeto. A base desse algoritmo outro algoritmo conhecido como Mean Shift. A Figura 18 mostra o funcionamento do algoritmo Cam Shift, onde a parte cinza corresponde contribuio do algoritmo Mean Shift. Os passos executados pelo Cam Shift podem ser descritos resumidamente da seguinte forma: 1. Determina a regio para clculo da distribuio de probabilidades para toda a imagem; 2. Escolhe a posio inicial para a janela de busca em duas dimenses (2D) necessria para o algoritmo Mean Shift; 3. Calcula a distribuio de probabilidades de cor na regio centrada na localizao da janela de busca, um pouco maior que o tamanho da janela de busca do Mean Shift; 4. Executa o algoritmo Mean Shift para achar o centro da janela de busca. 5. Para o prximo quadro do vdeo, centraliza a janela de busca na localizao mdia encontrada no passo 4. Retorna ao passo 3.

55

Figura 18. Algoritmo Cam Shift (INTEL Corporation,2009).

6.5 Como utilizar os algoritmos Os algoritmos so executados por meio de uma interface simples que possibilita a escolha dos procedimentos desejados pelo usurio. A Figura 19 ilustra o menu principal do sistema. Conforme ilustra a Figura 19, o sistema possibilita treinar uma RNA para um determinado tipo de padro, reconhecer um padro a partir de um vdeo e acompanhar o deslocamento de um padro ao longo de um vdeo. Ao escolher a opo 1 do menu principal, visualiza-se uma tela seguinte conforme mostra a Figura 20. possvel treinar uma RNA para reconhecer os seguintes tipos de padres: crculo, retngulo ou tringulo.

56

Figura 19. Menu principal

Figura 20. Menu treinar RNA

Aps escolher um das opes da Figura 20, aparece a informao de que o caminho completo dos vdeos para serem usados durante o treinamento da RNA deve ser informado em um arquivo no formato txt, conforme ilustram as Figuras 21 e 22. Aps essa informao, basta o usurio pressionar Enter para que o processo de

57 treinamento seja iniciado. Dessa forma, uma nova janela ser aberta com a execuo de cada um dos vdeos informados no arquivo txt.

Figura 21. Menu treinar circulo

Figura 22. Exemplo de arquivo txt com entradas para treinamento

Ao escolher a opo 2 do menu principal, uma tela com as opes de reconhecimento de padres ser aberta, conforme mostra a Figura 23.

Figura 23. Sub-menu reconhecer um padro

58 possvel reconhecer um padro a partir de um arquivo de vdeo armazenado no computador ou dispositivo de memria externa ou ainda por meio de uma cmera conectada e configurada no computador. Caso seja escolhida a opo 1 da Figura 23, ser solicitado que o usurio informe o tipo de padro a ser reconhecido para que o respectivo arquivo com os dados do treinamento produzido pela RNA, conforme mostra a Figura 24. Em seguida dever ser escolhido um dentre oito vdeos com o padro a ser reconhecido, conforme ilustra a Figura 25. Mas caso a opo 2 seja a escolhida, aps escolher o tipo de padro a ser reconhecido da mesma forma que ilustra a Figura 24, basta que o usurio deixe a cmera ligada antes de continuar (Figura 26). Dessa forma, uma nova janela ser aberta com a execuo do vdeo informado pelo usurio para o seu reconhecimento pela RNA e posterior rastreamento.

Figura 24. Reconhecer padro por vdeo

59

Figura 25. Tela para escolha de vdeos

Figura 26. Reconhecer padro por WebCam

Por fim, o sistema tambm possibilita o rastreamento ou acompanhamento de um padro em um arquivo de vdeo, conforme mostra a Figura 27. Caso seja escolhida a opo 1 da Figura 27, ser solicitado que o usurio informe o caminho do arquivo de vdeo com o padro a ser reconhecido, conforme ilustra a Figura 28. Mas caso a opo 2 seja a escolhida, basta o usurio ligar a cmera antes de continuar (Figura 29). Aps isso o programa abrir uma nova janela contendo a execuo do vdeo, onde o usurio dever selecionar com o mouse a rea de interesse que contm o padro que deseja ser rastreado. O algoritmo ento ir desenhar uma elipse verde em torno do padro selecionado ao longo de cada quadro do vdeo (Figura 30). No caso do usurio escolher a opo 3 do menu

60 principal (Figura 19), o rastreamento do padro acontece de forma independente do reconhecimento pela rede neural, tanto que o usurio precisar selecionar com o mouse o padro que deseja acompanhar, dessa forma utilizou-se vdeos para teste com padres mistos, conforme ilustra a Figura 30. Alm disso, possvel ainda rastrear uma face ou qualquer outro padro de um vdeo gerado de uma cmera conectada ao computador.

Figura 27. Menu acompanhar um padro

Figura 28. Acompanhar um padro por arquivo de vdeo

61

Figura 29. Acompanhar um padro por WebCam

Figura 30. Exemplo de tela de acompanhamento de padro

Nas partes do programa onde usurio solicitado a fornecer o caminho no computador para um arquivo de vdeo de entrada, caso o caminho esteja incorreto ou o arquivo informado no exista o programa retorna um erro, informando que o arquivo no pde ser aberto.

6.6 Discusso dos resultados Pretendeu-se, ao longo do desenvolvimento do projeto, obter um algoritmo para capturar e aplicar operaes de processamento de imagem sobre um determinado quadro ou seqncias de quadros de um vdeo, efetuar

reconhecimento de um padro em uma seqncia de quadros utilizando rede neural e acompanhar a trajetria do padro nessa seqncia. A Figura 31 ilustra, em alto nvel e de forma resumida, as etapas do sistema desenvolvido. A Figura 32 mostra o resultado da aplicao de processamento de

62 imagem nos quadros de um vdeo. A Tabela 3 mostra os resultados da etapa de reconhecimento. A Figura 33 mostra os resultados da etapa de rastreamento.

Figura 31. Etapas resumidas do algoritmo

A parte de processamento de imagem demonstrou-se bastante eficaz, para todos os vdeos utilizados, sendo o contorno de cada padro detectado de forma precisa, conforme pode ser verificado nas imagens da Figura 32.

Figura 32. Resultados do processamento de quadros

63
Tabela 3. Resultados obtidos na etapa de reconhecimento

Padro Circulo Retngulo Triangulo

Vdeos testados 8 8 8

Vdeos classificados corretamente 8 8 8

Erro mximo cometido 12% 8% 1,1%

Na Tabela 3, o erro mximo cometido corresponde a percentagem da diferena entre o valor absoluto da diferena entre a sada mxima gerada pela rede e a sada desejada, ou seja:

Quando o erro cometido pela rede for menor que o erro mximo admitido para cada padro, definido como 15%, ento se conclui que o vdeo foi classificado corretamente. Na apresentao das imagens rede, foi verificada a necessidade de imagens de boa qualidade, pois muitos fatores podem influenciar no resultado, como por exemplo, a iluminao, o fundo, rudos, entre outros. Embora a tarefa do sistema de viso humano de analisar e reconhecer informaes visuais parea trivial, esta pode ser muito complexa quando executada por sistemas de viso artificial, tanto mais quanto se permite um conjunto pequeno de restries sobre o sistema de aquisio de imagens, por exemplo, variaes bruscas de iluminao na imagem adquirida.

Figura 33. Resultados para etapa de rastreamento.

64

A parte de reconhecimento pode ser melhorada por meio do aumento do nvel de preciso do reconhecimento sem diminuir muito o tamanho dos quadros do vdeo, pois na medida em que se diminui o tamanho do vdeo a qualidade da imagem fica comprometida e dificulta o nvel de preciso da rede. Apesar de o algoritmo ser desenvolvido para padres de baixa complexidade (crculo, retngulo e tringulo), os resultados podero ser generalizados futuramente para padres de alta complexidade. Durante a realizao do projeto, foi possvel obter um algoritmo para capturar e aplicar operaes de processamento de imagem para um determinado quadro ou seqncias de quadros de um vdeo, reconhecer os padres para os quais a RNA foi treinada, mas apenas em vdeos contendo somente o padro, e acompanhar a trajetria do padro ao longo de uma seqncia de vdeos. Embora o reconhecimento tenha sido de forma limitada, todas as etapas planejadas inicialmente neste trabalho foram executadas.

65 7 Concluso

Por meio do estudo terico e do levantamento bibliogrfico realizado, foi possvel perceber a viabilidade da utilizao das redes neurais artificiais na tarefa de reconhecimento de padres em imagens. Alm disso, algoritmos para

reconhecimento e acompanhamento de trajetria de padres em vdeos so de interesse tanto terico quanto prtico. A importncia desse projeto se deve ao fato de propor um sistema de viso que pode ser melhorado e expandido para utilizao em aplicaes reais. Alm disso, os resultados deste projeto podero ser compartilhados com a comunidade cientfico-acadmica por meio da divulgao em congressos, bem como sociedade em geral atravs de palestras. No contexto tcnico, os resultados deste projeto podero servir de base para o desenvolvimento de futuros projetos relacionados com a mesma linha. A biblioteca OpenCV ofereceu uma grande ajuda no desenvolvimento do projeto, ao oferecer mdulos e solues prontas e em desenvolvimento, alm de possuir uma boa documentao e um livro como excelente referncia, no entanto, algumas limitaes dificultaram a realizao do projeto tais como: mximo de 1000 ciclos para treinamento da rede e limitao do tamanho de dados de entrada para treinamento. Essas limitaes tiveram um peso na preciso do reconhecimento pela RNA. Dentre outras dificuldades encontradas pode-se citar tambm: dificuldade para encontrar uma estratgia eficaz para submeter os dados dos quadros do vdeo para o treinamento da RNA, dominar os comandos e funes da biblioteca OpenCV pois so muitos e alguns possuem elevada complexidade. Portanto, como sugesto de melhorias a serem efetuadas em trabalhos futuros pode-se citar: redimensionamento dos quadros de um vdeo utilizando tcnicas de reduo, adaptao para reconhecimento de outros tipos de padres e melhoria na interface com o usurio. Sem dvidas, a realizao deste trabalho contribuiu para aquisio por parte do discente de uma gama de conhecimentos a respeito da rea definida, no somente conhecimentos tericos como tambm prticos.

66 8 Referncias

ARTUR, J. S. Reconhecimento de Padres Usando Indexao Recursiva. Universidade Federais de Santa Catarina, 1999.

BARRETO, Jorge M. Introduo s Redes Neurais Artificiais. In: V Escola Regional de Informtica. Sociedade Brasileira de Computao. Florianpolis, 1997. BRADSKI, G; KAEHLER, Adrian. Learning OpenCV. OReilly, 2008.

BRAGA, Antnio de Pdua; LUDERMIR, Teresa Bernarda; CARVALHO, Andr C. P. de Leon Ferreira. Redes Neurais Artificiais: teoria e aplicaes. Editora LTC: Rio de Janeiro, 2000.

CARLOS, J. F. P. Aplicao de Redes Neuronais no Processamento Digital de Imagens. Universidade Federal de Minas Gerais, 1994.

CASTLEMAN, Kenneth R. Digital Image Processing. Upper Saddler River: Prentice Hall, Inc. 1996.

CORDEIRO, F. M. Reconhecimento e Classificao de Padres de Imagens de Ncleos Linfcitos do Sangue Perifrico Humano com a Utilizao de Redes Neurais Artificiais. Universidade Federal de Santa Catarina, 2002.

COSTA, Eduard M. M. Programando com C Simples e Prtico. Editora Alta Books: Rio de Janeiro, 2006.

GONZALEZ, R. C. WOODS, R. E. Processamento de Imagens Digitais. EDITORA EDGARD BLCHER LTDA: So Paulo, 2000.

GUIMARES, Luiz Felipe S Leito. Deteco da Bola em Vdeos de Futebol. Universidade Federal de Pernambuco, Centro de Informtica.

HAYKIN, S. Redes Neurais: Princpios e prtica. McMaster University, Hamilton, Ontrio, Canad, 2001.

67

HENRIQUE, J. B. R. Desenvolvimento de uma tcnica de reconhecimento de padres baseada em distncia. Universidade Federal de Santa Catarina, 2003.

INTEL Corporation. OpenCV documentation, reference manual. 2009.

LUDWIG, Oswaldo Jr., e COSTA, Eduard M. M. Redes Neurais: Fundamentos e Aplicaes com Programas em C. Editora Cincia Moderna: Rio de Janeiro, 2007.

LUGER, G. F. Inteligncia Artificial: estruturas e estratgias para a resoluo de problemas complexos. University of New Mexico at Albuquerque, 2004.

MARENGONI, Maurcio; STRINGHINI, Denise. Tutorial: Introduo Viso Computacional usando OpenCV. Universidade Presbiteriana Mackenzie, 2009.

MARIA, L. G. F. Processamento Digital de Imagens. INPE, Junho de 2000.

MASCARENHAS, N. D. A. Breve Introduo ao Reconhecimento Estatstico de Padres. 39 Reunio Anual da SBPC. 1987.

MICROSOFT CORPORATION. DV Data in the AVI File Format. 1997. Disponvel em: <http://download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9843a-923143f3456c/DVAVSPEC.RTF>. Acesso em: 18 de Janeiro de 2011.

PERELMUTER, G.; CARRERA, E. V.; VELLASCO, M.; PACHECO, A. Reconhecimento de Imagens Bidimensionais Utilizando Redes Neurais Artificiais. Anais do VII SIBGRAPI, 1995.

PRADO, A. Jr.; ELFES, A. Um Projeto em Reconhecimento de Padres de Forma. Monografia de Graduao, ITA. So Jos dos Campos-SP, 1975.

SCHWARTZ, William Robson ET AL. Reconhecimento em tempo real de agentes autnomos em futebol de robs. Universidade Federal do Paran: Curitiba, 2003.

68

SILVA, Anderson F.; LEAL, Brauliro L.; COSTA, Luiz Cludio. OpenNet: Software Livre para Estudo e Prtica de Redes Neurais. Universidade Federal de Viosa, 2002.

STEINER, M. T. A. Uma Metodologia para o Reconhecimento de Padres Multivariados com Resposta Dicotmica. Tese de Doutorado. FlorianpolisSC, 1995.

TODESCO, J. L. Reconhecimento de Padres usando Rede Neuronal Artificial com uma Funo de Base Radial: uma aplicao na classificao de cromossomos humanos. Tese de Doutorado. Florianpolis-SC, 1995.

TOU, J. T.; Gonzalez, R. C. Pattern Recognition Principles. Addison-Wesley Publishing Company: Massachusetts, 1981.

VII WORKSHOP DE VISO COMPUTACIONAL. Anais do Evento. Universidade Federal do Paran. Curitiba: 2011. Disponvel em: http://www.wvc2011.ufpr.br/anais_wvc_2011.pdf. Acesso em: 08 de Julho de 2011.

WELCH, Greg; BISHOP, Gary. An Introduction to the kalman filter. Disponvel em: <http://www.cs.unc.edu/~welch/kalman/kalmanIntro.html>. Acesso em: 17 de Novembro de 2010.

69 ANEXOS

ANEXO A. Ajuste do ambiente do OpenCV Download e instalao no Ambiente Linux 1. Efetue o download do pacote OpenCV formaro tar.gz por meio do endereo eletrnico: http://sourceforge.net/projects/opencvlibrary; 2. Entrar no terminal do Linux e efetuar login de super-usurio por meio do comando sudo su. 3. Para descompactar o arquivo, deve-se redirecionar o terminal por meio do comando cd para o diretrio onde foi feito o download do arquivo tar.gz do OpenCV e, na janela aberta, digitar os seguintes comandos (supondo que o pacote que voc tenha baixado seja: opencv0.9.7.tar.gz): tar -xzf opencv-0.9.7.tar.gz cd opencv-0.9.7 ./configure && make && make install Ir ao diretrio home e abrir o arquivo .bashrc (para o ambiente bash). Acrescentar a seguinte linha ao arquivo: alias gcv="g++ -I/usr/local/include/opencv -lcv -lcxcore lcvaux -lhighgui"

4. Fazer os ajustes para o compilador do linux G++:

Download e instalao no Ambiente Windows 1. Efetue o download do pacote OpenCV 2.0 por meio do endereo eletrnico: http://sourceforge.net/projects/opencvlibrary; 2. Aps descompactar clique no arquivo executvel e abrir uma tela semelhante a tela abaixo;

70

3. Na tela anterior clique em Prximo para continuar;

4. Aps ler o acordo de licena clique em Eu concordo;

71

5. Na tela anterior, marque a terceira opo Add OpenCV to the system PATH for current user e clique em Prximo;

6. Escolha a pasta de destino como sendo a padro: C:\OpenCV2.0. Em seguida, clique em Prximo;

72

7. Escolha a pasta do menu iniciar e clique em Prximo;

8. Escolha o tipo de instalao full e clique em instalar.

73 Configurando Windows para execuo de arquivos do OpenCV: 1. No cone Meu Computador clique com o boto direito do mouse e selecione Propriedades. 2. Clique em Avanado e aps no boto Variveis do Ambiente na parte inferior da janela. 3. Nas Variveis do usurio localize a varivel PATH, acrescente o caminho para a biblioteca OpenCV (o padro : C:\OpenCV2.0\bin). 4. Adicione o caminho para a biblioteca de interface (o padro C:\OpenCV2.0\include\opencv). Lembre de separ-las com ;. 5. OBS: a PATH pode ser atualizada automaticamente na instalao, mas preciso verificar. Talvez, seja preciso reiniciar.

Para compilar utilizando o Dev-C++: 1. Abrir o Bloodshed Dev-C++ (verso testada: 4.9.9.2). 2. Para linkar os programas do Dev C++ com as bibliotecas do OpenCV: i. Clicar em Ferramentas e selecionar Opes do compilador. O sistema deve abrir uma janela com a aba Compilador selecionada. ii. Marcar a caixa Adicionar estes comandos linha de comando do linker e copiar os seguintes comandos: C:/OpenCV2.0/lib/libcv200.dll.a C:/OpenCV2.0/lib/libcvaux200.dll.a C:/OpenCV2.0/lib/libcxcore200.dll.a C:/OpenCV2.0/lib/libcxts200.dll.a C:/OpenCV2.0/lib/libhighgui200.dll.a C:/OpenCV2.0/lib/libml200.dll.a 3. Na aba Diretrios, em Binrios adicionar o caminho: C:\OpenCV2.0\bin 4. Em C Includes adicionar o caminho: C:\OpenCV2.0\include\opencv 5. Em C++ Includes adicionar o mesmo caminho acima.

Em Bibliotecas adicionar o caminho: C:\OpenCV2.0\lib. D OK.

74 ANEXO B. Cdigo detalhado da funo de treinamento da RNA

void executarRNA(int num_quadros, int cod, int num) { CvANN_MLP mlp; //RNA char arquivo1[100],arquivo2[100],arquivo3[100], buffer[10]; char buffer2[10]; FILE *f, *fp; int n_amostras = 0; //quantidade de entradas para treinamento int i, j; //controlar linhas e colunas dos arquivos int col_entrada = max_amostras; //quantidade de colunas com dados de entrada int num_entrada,repete; //quantidade de entradas if(num_quadros>max_entradas) num_entrada = max_entradas; else num_entrada = num_quadros; int num_saida = num_entrada; //quantidade de saidas int col_saida=1; //quantidade de colunas com dados de saida double in[num_entrada][col_entrada], out[num_saida],resultado[num_saida]; printf(" Executando RNA...\n"); //Criando as matrizes //Dados de entrada. Matriz de ordem (num_entrada x col_entrada) CvMat *dados = cvCreateMat(num_entrada, col_entrada, CV_64FC1); //Dados de saida. Matriz de ordem (num_saida x col_saida) CvMat *respostas = cvCreateMat(num_saida, col_saida, CV_64FC1); //Armazenara a Saida produzida pela rede CvMat *saida_rede = cvCreateMat(num_saida, col_saida, CV_64FC1); //Matriz de representacao da RNA com 4 camadas CvMat *camadas_rede = cvCreateMat(4, 1, CV_32SC1); //Definindo o numero de neuronios em cada camada da RNA /* Camada 1: 1200 neuronios (entradas) Camada 2: 20 neuronios (camada oculta) Camada 3: 20 neuronios (camada oculta) Camada 4: 1 neuronios (1 saida) */ int camadas []= { col_entrada, 20, 20, col_saida } ; if(cod==1) { strcpy(arquivo2,"treinamento/CirculoNet");

75 strcpy(arquivo3,"resultados/CirculoNet"); } else if(cod==2) { strcpy(arquivo2,"treinamento/RetanguloNet"); strcpy(arquivo3,"resultados/RetanguloNet"); } else { strcpy(arquivo2,"treinamento/TrianguloNet"); strcpy(arquivo3,"resultados/TrianguloNet"); } itoa(num,buffer2,10); strcat(arquivo3,buffer2); strcat(arquivo2,buffer2); strcat(arquivo2,".rna"); strcat(arquivo3,".txt"); for(i=0;i<num_entrada;i++) { strcpy(arquivo1,"arquivos/"); itoa(i,buffer,10); // convertendo inteiro em string strcat(arquivo1,buffer); strcat(arquivo1,".txt"); //Lendo um arquivo com dados para treinamento if((f=fopen(arquivo1,"r"))==NULL) { fprintf(stderr," ERRO: arquivo %s nao foi aberto!!!\n",arquivo1); return; } //Obtendo numero de amostras fscanf(f, "%d %lf\n", &n_amostras, &out[i]); col_entrada = n_amostras; //Lendo e Reunindo os dados de treinamento printf(" Lendo dados de quadro %d...\n",i); for (j=0; j<col_entrada; j++) fscanf(f,"%lf\n",&in[i][j]); fclose(f); //fechando arquivo } //inicializando matrizes cvInitMatHeader(dados, num_entrada, col_entrada, CV_64FC1, in);

76 cvInitMatHeader(respostas, num_saida, col_saida, CV_64FC1, out); cvInitMatHeader(camadas_rede, 1, 4, CV_32SC1, camadas); //Verifica se o arquivo de treinamento da rede jah existe if((fp=fopen(arquivo2,"r"))==NULL) mlp.create(camadas_rede); //Criando a RNA else { mlp.load(arquivo2); fclose(fp); //fechando arquivo } do { printf(" Ciclo %d...\n",i++); mlp.train( dados, //vetor de entradas respostas, //vetor de saidas saida_rede, //vetor de pesos 0, //vetor opicional mostrando colunas de entrada e de saida CvANN_MLP_TrainParams( cvTermCriteria( //criterio de finalizacao CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, /*CV_TERMCRIT_ITER*/ 10000, //numero maximo de iteracoes 0.000001 // precisao necessaria ), CvANN_MLP_TrainParams::BACKPROP, /*CvANN_MLP_TrainParams::RPROP*/ 0.01, 0.01 ) ); // Salvar classificador para o arquivo, se necessrio mlp.save( arquivo2 ); // Testando a rede treinada mlp.predict(dados,saida_rede); for(j=0, repete=0;j<num_entrada;j++) { resultado[j] = CV_MAT_ELEM(*saida_rede,double,j,0); if(abs(resultado[j]-out[j])>erro_treino) { repete = 1; break; } }

77 } while(repete); //Lendo um arquivo com dados para treinamento if((fp=fopen(arquivo3,"w"))==NULL) { fprintf(stderr," ERRO: arquivo %s nao foi aberto!!!\n",arquivo3); return; } for(i=0;i<num_entrada;i++) fprintf(fp, "%.5lf\n", resultado[i]); fclose(fp); //fechando arquivo // desalocando recursos cvReleaseMat(&dados); cvReleaseMat(&respostas); cvReleaseMat(&saida_rede); cvReleaseMat(&camadas_rede); printf(" Fim de execucao da RNA...\n"); }

ANEXO C. Cdigo detalhado da funo de reconhecimento de padres double loadRNA(char *file_treino) { CvANN_MLP mlp; //RNA FILE *f, *fp; int n_amostras = 0; //quantidade de amostras para treinamento int i, j; //controlar linhas e colunas dos arquivos int col_entrada; //quantidade de colunas com dados de entrada int num_entrada=1; //quantidade de entradas int num_saida=1; //quantidade de saidas int col_saida=1; //quantidade de colunas com dados de saida double in[max_amostras],resultado; printf(" Executando RNA...\n"); //Lendo um arquivo com dados para treinamento if((f=fopen("arquivos/EntradaRede.txt","r"))==NULL) { fprintf(stderr," ERRO: arquivo 'arquivos/EntradaRede.txt' " "nao foi aberto!!!\n"); return 0; }

78 //Obtendo numero de amostras fscanf(f, "%d\n", &n_amostras); col_entrada = n_amostras; //Criando as matrizes //Dados de entrada. Matriz de ordem (num_entrada x col_entrada) CvMat *dados = cvCreateMat(num_entrada, col_entrada, CV_64FC1); //Armazenara a Saida produzida pela rede CvMat *saida_rede = cvCreateMat(num_saida, col_saida, CV_64FC1); //Lendo e Reunindo os dados de treinamento for (i=0; i<col_entrada; i++) fscanf(f,"%lf\n",&in[i]); fclose(f); //fechando arquivo //Carregando arquivo de treinamento mlp.load(file_treino); //Executando a rede treinada mlp.predict(dados,saida_rede); resultado = CV_MAT_ELEM(*saida_rede,double,0,0); // desalocando recursos cvReleaseMat(&dados); cvReleaseMat(&saida_rede); printf(" Fim de execucao da RNA...\n"); return resultado; }

You might also like