UNIVERSIDADE CÂNDIDO MENDES CHRYSTIANO BARBOSA DE SOUZA ARAÚJO LEANDRO MORAES VALE CRUZ LUCAS CARVALHO THIAGO RIBEIRO NUNES DEFINIR O TÍTULO - PDF
Download "UNIVERSIDADE CÂNDIDO MENDES CHRYSTIANO BARBOSA DE SOUZA ARAÚJO LEANDRO MORAES VALE CRUZ LUCAS CARVALHO THIAGO RIBEIRO NUNES DEFINIR O TÍTULO"
Cássio Estrada Canejo
1 UNIVERSIDADE CÂNDIDO MENDES CHRYSTIANO BARBOSA DE SOUZA ARAÚJO LEANDRO MORAES VALE CRUZ LUCAS CARVALHO THIAGO RIBEIRO NUNES DEFINIR O TÍTULO Campos dos Goytacazes - RJ Junho
2 MÓDULO DE VISÃO DO TOOLKIT HÓRUS Monografia apresentada à Universidade Cândido Mendes como requisito obrigatório para a obtenção do grau de Bacharel em Cinências da Computação. Aprovada em de de BANCA EXAMINADORA Prof. D.Sc. Ítalo Matias - Orientador Doutor pela UFRJ Prof. D.Sc. Dalessandro Soares Doutor pela PUC-Rio Prof. BLABLABLA Univeridade de Londres
5 Resumo Palavras-chave: vi
6 Abstract Keywords: vii
7 Sumário 1 Introdução 13 2 Inteligência Computacional Agentes Inteligentes Reconhecimento de Padrões Redes Neurais Artificiais Neurônio Biológico O Neurônio Artificial MCP Funções de Ativação Arquiteturas de Redes Neurais Processo de aprendizado Computação Gráfica Visão Computacional Extração de características Reconhecimento Óptico de Caracteres Horus Core Processamento de Imagem Thresholding Skeletonization Visão Extração de características Reconhecimento de Objetos Mapeamento e Navegação ANPR Localização da Placa Pré-processamento da placa OCR Aplicação Web Aplicações do Horus viii
8 SUMÁRIO ix 5 Aplicacoes envolvendo agentes inteligentes Teseu Ariadnes Conclusões e Trabalhos Futuros 72 Apêndices 76 A Dependências do Tool kit 76 B Instalações 77
9 Lista de Figuras 2.1 Neurônio biológico Modelo do neurônio de McCulloch e Pits Gráfico da função Limiar Gráfico da função sigmóide Gráfico da função Signum Gráfico da Tangente Hiperbólica Redes de uma única camada Rede de múltiplas camadas Exemplo de rede feedback Esquema de aprendizado supervisionado Esquema de aprendizado não supervisionado Sub-áreas da computação gráfica Etapas do processo de OCR Arquitetura do módulo core extensão da classe Brain do horus por uma aplicação Comportamento MyBehavior que estende tanto de NeuralNetworkBehavior quanto de MappingBehavior (a) 4-vizinhança, (b) d-vizinhança e (c) 8-vizinhança Exemplo de imagem binária imagem original (à direita) e imagem binarizada com thresholding global (à esquerda) Localização do limiar por Chow e Kaneko código do método de thresholding local implementado em linguagem Python imagem original (à direita) e imagem limiarizada com thresholding local (à esquerda) Imagem de um T e seu respectivo esqueleto Imagem de um B (preto) e seu respectivo esqueleto (branco) vizinhança do pixel p Exemplos das funções: (a)b(p 1 ) = 2, A(p 1 ) = 1 b) B(p 1 ) = 2, A(p 1 ) = a) B(p 1 ) = 7 b) B(p 1 ) = 0 c) B(p 1 ) = Exemplos onde A(p 1 ) é maior que x
10 LISTA DE FIGURAS xi 3.16 Exemplo de situação em que linhas verticais com largura de dois pixels não serão inteiramente removidas Exemplo de situação em que linhas herticais com largura de dois pixels não serão inteiramente removidas a) padrão de entrada do algoritmo b) deleção iterativa dos pixels das bordas c) resultado após a execução do algoritmo Padrões completamente erodidos pelo algoritmo de Hilditch Matriz de pixel de um bitmap Layout com seis regiões em três linhas e duas colunas Quatorze diferentes tipos de arestas Matrizes referentes aos tipos de arestas Vetor de Características Arquitetura conceitual do simulador Ariadnes Agente configurado com dispositivos de lasers Ambiente utilizado no Ariadnes Placa informativa
11 Lista de Tabelas xii
12 Capítulo 1 Introdução Existem alguns tipos de ambiente que são inóspitos ao homem. Nesses casos é comum utilizar um robô para explorar e atuar em tais locais. A movimentação desses robôs pode ser automática (agentes autônomos), semi-automática (agentes semi-autônomos) ou manual. Neste trabalho, serão apresentados os passos para a construção de um toolkit, de nome Horus, utilizado para o desenvolvimento e controle de aplicações que envolvam agentes inteligentes, com foco em dois problemas centrais. O primeiro problema refere-se a movimentação autônoma de um agente inteligente em ambientes desconhecidos. O segundo problema refere-se á visão computacional, onde o agente deve ser capaz de extrair informações do ambiente através da utilização de câmeras virtuais ou reais. Um Agente, por definição, é todo elemento ou entidade autônoma que pode perceber seu ambiente, por algum meio cognitivo ou sensorial, e de agir sobre esse ambiente por intermédio de atuadores. Pode-se citar como exemplos de agentes inteligentes, além de um robô autônomo ou semi-autônomo, personagens de um jogo, agentes de busca e recuperação de informação, entre outros. Para que um agente autônomo seja capaz de atuar em um ambiente desconhecido é necessário anteriormente explorar esse local. Essa exploração pode ser feita através de um mapeamento desse ambiente. A forma como mapeia-se o ambiente internamente no sistema é determinante na sua precisão e performance. As diferentes abordagens para controle de 13
13 CAPÍTULO 1. INTRODUÇÃO 14 agentes móveis autônomos interagem fortemente com a representação do ambiente. Uma proposta para o mapeamento do ambiente, ainda não implementada no Horus, consiste na construção um ambiente virtual 3D associado a um ambiente real no qual um robô real está explorando. Essa abordagem exige que o agente reconheça padrões no ambiente explorado e represente-os no ambiente virtual. Durante a exploração do ambiente, o agente deverá ser capaz de estimar sua posição local para localizar-se globalmente e se recuperar de possíveis erros de localização. Um correto mapeamento do ambiente junto a aplicação correta das leis da cinemática podem resolver tal problema. Uma proposta para a localização de um agente no ambiente é a utilização do método Monte Carlo [1] ou do método SLAM (Simultaneous Location and Mapping) [2], [3]. O método selecionado para ser implementado no toolkit horus foi o SLAM. Um agente explora um ambiente através de sensores. O sensoriamento provê ao robô as informações necessárias para a construção de uma representação do ambiente onde está inserido e para uma interação com os elementos contidos nesse. Sistemas com uma variedade de sensores tendem a obter resultados mais precisos. A fusão de dados de sensores, ou como é mais conhecida, fusão de sensores, é o processo de combinação de dados de múltiplos sensores para estimar ou predizer estados dos elementos da cena. Neste trabalho, foram utilizados lasers, câmeras e odômetro como sensores. Para simular a visão de um agente inteligente, são utilizadas câmeras virtuais. Na abordagem desse trabalho, a visão é a principal forma de percepção do ambiente. A visão possibilita reconhecer padrões e classificar obstáculos. Existem diferentes tipos de obstáculos. Estes podem ser classificados como transponível (aquele que não interrompe a trajetória), intransponível (aquele que o exigirá recalcular a trajetória por outro caminho) e redutor (aquele que permite o robô seguir pela trajetória, porém a uma velocidade mais lenta). Mesmo mediante a obstáculos transponíveis e redutores, pode ser conveniente recalcular o caminho devido ao aumento do custo do percurso. Uma proposta para o desvio de trajetória é o modelo baseado em Campos Potenciais proposto por [8]. A classificação de um obstáculo ocorre mediante a algum método de reconhecimento de padrões, baseado
14 CAPÍTULO 1. INTRODUÇÃO 15 em visão computacional. O toolkit Horus propõe uma coleção de classes e algoritmos voltados a resolução de problemas pertencentes as áreas de visão computacional e mapeamento automático de ambientes. Nessa monografia, será dado foco à parte de visão computacional do Horus. De forma a validar a implementação desse toolkit e demonstrar a sua utilidade, foram desenvolvidas três aplicações distintas: Os simuladores Teseu e Ariadnes, e o ANPR Django. Neste trabalho, além do toolkit Horus, serão, também, apresentados a parte de visão computacional utilizada no simulador Ariadnes e a aplicação para reconhecimento automático de placas de automóveis ANPR Django.
15 Capítulo 2 Inteligência Computacional 2.1 Agentes Inteligentes A Inteligência Computacional (IC) é uma área de estudo da ciência da computação que procura desenvolver sistemas computacionais capazes de ter ações e reações similares as capacidades humanas, tais como: pensar, criar, solucionar problemas entre outros. Um Agente, por definição, é todo elemento ou entidade autônoma que pode perceber seu ambiente por algum meio cognitivo ou sensorial e de agir sobre esse ambiente por intermédio de atuadores [4]. Pode-se citar como exemplos de agentes inteligentes, além de um robô autônomo ou semi-autônomo, personagens de um jogo, agentes de busca e recuperação de informação e agentes de chats. Existem diferentes definições para a arquitetura de um robô presentes na literatura. Este trabalho considera a definição abordada por Arkin [5] a qual considera que uma arquitetura de um robô está mais relacionada com os aspectos de software que os de hardware. Apesar de algumas diferenças, os modelos de arquitetura para robôs móveis descrevem um mecanismo para construção de um sistema de desenvolvimento e controle de agentes inteligentes, apresentando, principalmente, quais os módulos presentes e como estes interagem. De uma forma geral, os módulos de uma arquitetura de um agente inteligente se pre- 16
16 CAPÍTULO 2. INTELIGÊNCIA COMPUTACIONAL 17 ocupam com aspectos como percepção, planejamento e atuação/execução. A percepção refere-se à compreensão do ambiente e dos elementos nele contido. Denomina-se sequência de percepções, a história completa de tudo que o agente já percebeu, ou seja, o conjunto de todas as percepções do agente até um dado momento; o planejamento à inteligência do robô; e a atuação, ou execução, é o modo como o robô procede no ambiente, ou seja, movimentos, captura de informações, etc. Existem diversos modelos de arquitetura para robótica entre os quais ressalta-se os modelos de três camadas como: SSS [6], Atlantis [7], 3T [8]. Todas as arquiteturas se dividem semelhantemente da seguinte forma: ˆ camada reativa: orienta os sensores e atuadores, além de tomar decisões de baixo nível, como visão e movimento; ˆ camada deliberativa: responsável pela inteligência do robô, aspectos mais globais, que não são alterados a cada iteração; ˆ camada de execução: intermedia essas duas outras camadas. As camadas reativa e deliberativa provêem processos denominados de comportamentos. Em termos matemáticos, o comportamento do agente á a função que mapeia qualquer percepção ou sequência de percepções para uma ação específica [4], essa função é conhecida como função de agente. Com base nesses conceitos, definiu-se neste trabalho um agente como uma entidade composta de comportamentos, dispositivos e um programa de agente. Os dispositivos do agente, utilizados no sistema em questão, são de sensoriamento (lasers e câmeras) e de movimentação (rodas). Os comportamentos do agente são: mapeamento, navegação e reconhecimento de objetos. O programa de agente é responsável pelo controle da execução de todos os comportamentos supracitados. Os comportamentos são procedimentos implementados para representar ações e reações dos agentes. As ações são comportamentos ativos, ou seja, procedimentos que visam realizar um objetivo previamente definido. Por outro lado, reações são procedimentos re-
17 CAPÍTULO 2. INTELIGÊNCIA COMPUTACIONAL 18 alizados mediante a estímulos externos. Exemplos de ação e reação ocorrem no deslocamento de um agente de uma posição a outra. Para realizar o deslocamento é necessário traçar uma rota. Tal comportamento é definido como uma ação. Ao se deparar com algum obstáculo durante o percurso, esse agente deve gerar um comportamento de replanejamento da rota para alcançar o objetivo inical sem colidir com o obstáculo. A esse replanejamento, denomina-se reação. Comportamentos podem ser divididos em duas categorias. Os Comportamentos Primários: parar, reduzir velocidade, acelerar, desviar de obstáculos, virar, inverter direção, dirigir-se a meta, fotografar, disparar lasers e etc; e Comportamentos Inteligentes: mapear, reconhecer objetos, navegar e executar uma tarefa específica. Um Comportamento Inteligente executa um conjunto de comportamentos Primários para atingir seu objetivo. Os comportamentos primários ocorrem na camada reativa, enquanto que, os inteligentes ocorrem na camada deliberativa. Entende-se por Programa de Agente o programa que recebe as percepções do ambiente como entrada e as mapeia para uma determinada ação através da função de agente. Além da estrutura citada, o programa de agente pode ser estruturado de outras maneiras. Um exemplo de estrutura é construir o programa de agente como um conjunto de sub-rotinas que serão executadas de forma assíncrona em relação ao ambiente. O programa permanece em loop, recebendo todas as percepções geradas pelo ambiente, e repassa cada percepção para uma sub-rotina que irá tratá-la. Os programas de agente podem ser classificados em quatro categorias principais: ˆ Agentes reativos simples: esse tipo de programa de agente se basea apenas na percepção atual para executar as suas ações, onde a sequência de percepções até o momento é ignorada. ˆ Agentes reativos baseados em modelo: esse programa de agente armazena uma sequência de percepções e toma suas decisões levando em consideração as percepções dessa sequência. ˆ Agentes baseados em objetivos: esse programa de agente possui informações sobre o
18 CAPÍTULO 2. INTELIGÊNCIA COMPUTACIONAL 19 objetivo que deve alcançar. Logo, suas decisões são tomadas com base na combinação das percepções do ambiente e nas informações do objetivo. ˆ Agentes baseados na utilidade: esse tipo de programa de agente tem a preocupação, não só de alcançar o seu objetivo final, como também em determinar a melhor forma possível de alcançá-lo. Em duas das aplicações desenvolvidas neste trabalho, os programas de agente utilizados se enquadram na categoria de agentes baseados na utilidade. 2.2 Reconhecimento de Padrões Reconhecimento de padrões é um atividade que os humanos fazem a todo tempo e, normalmente, sem um esforço consciente. Seres humanos recebem informações através de vários sensores orgânicos, as quais são processadas instantaneamente pelo cérebro. Essa habilidade é ainda mais impressionante no que diz respeito a assertividade do processo de reconhecimento mesmo quando as informações não se encontram em condições ideais, como por exemplo, em situações onde as informações são vagas, imprecisas, ou até mesmo, incompletas. A área de Reconhecimento de Padrões é responsável por projetar algoritmos e abordagens que procuram aproximar as tarefas realizadas computacionalmente das habilidades humanas. Esse processo consiste em classificar e descrever objetos através de um conjunto de características ou propriedades. Um dos principais conceitos dentro de reconhecimento de padrões é o discriminante. Tal conceito consiste em medir uma distância de um determinado padrão para cada outro previamente conhecido. Logo, a classe de um determinado padrão será a mesma do seu vizinho mais próximo [Simp 92], [Simp 93], de menor distância ou o protótipo mais parecido [Torb 98]. Espera-se de um sistema de reconhecimento de padrões que este seja capaz de aprender de uma forma adaptativa e dinâmica. Em sistemas de reconhecimento de padrões automáticos, as etapas de aprendizagem e reconhecimento são combinados a fim de atingir um objetivo desejado [Cagn 93] [Valli 98]. Portanto, redes neurais artificiais é uma das principais técnicas utilizadas nesse
19 CAPÍTULO 2. INTELIGÊNCIA COMPUTACIONAL 20 sentido [Nigr 93] e será apresentada na seção 2.3. Um típico sistema de reconhecimento de padrão consiste em três partes: aquisição de dados, seleção/extração de características e classificação/clustering [Pattern recognition book]. ˆ Aquisição de dados: é o processo de seleção dos dados que serão usados como entrada no processo de reconhecimento. Tais dados podem ser qualitativos, quantitativos ou ambos. Podendo ser numéricos, linguísticos, entre outros. ˆ Seleção/Extração de características: o objetivo principal desta etapa consiste em gerar o melhor conjunto de características necessárias para o processo de reconhecimento, de modo a maximizar a eficácia do sistema. A grande dificuldade dessa etapa está na determinação de um critério adequado para a escolha de um bom conjunto de características. Um bom critério é aquele que é imutável para qualquer variação possível dentro de uma classe, todavia, deve ser capaz de destacar as diferenças importantes a fim de discriminar entre diferentes tipos de padrões. ˆ Classificação/clustering: classificação é o processo de definição de qual classe um determinado padrão de entrada pertence. Essa classificação pode ser feita utilizando técnicas determinísticas e probabilísticas. As classes são definidas a partir de um conjunto de amostras apresentadas na etapa de aprendizagem. A técnica de reconhecimento de padrões possui uma grande variedade de aplicações. Dentre elas, pode-se citar: reconhecimento de faces, leitura biométrica, identificação de circuitos impressos defeituosos, reconhecimento óptico de caracteres, reconhecimento de fala e de escrita cursiva, entre outros. 2.3 Redes Neurais Artificiais Redes Neurais Artificiais (RNAs) são estruturas computacionais que visam imitar a forma com que o cérebro humano processa as informações. O cérebro possui a capacidade de organizar e encadear seus elementos estruturais, conhecidos como neurônios, para realizar
20 CAPÍTULO 2. INTELIGÊNCIA COMPUTACIONAL 21 o processamento das informações de forma não linear e paralela. Dessa forma, as principais características das redes neurais são a habilidade de aprender relações complexas e não lineares entre os padrões de entrada e as saídas, utilizarem procedimentos de treinamento seqüencial e se auto-adaptar aos dados [9]. Na sua forma geral, uma rede neural é uma máquina projetada para imitar a forma com que o cérebro realiza uma tarefa particular ou uma função de interesse, podendo ser implementada em hardware ou simulada através de software. Para atingir uma performance razoável, as redes neurais empregam uma massiva interconexão de unidades de processamento simples, denominadas neurônios [10]. As redes neurais artificais possuem a capacidade de aprendizado e, como conseqüência, de generalização. Generalização refere-se à produção de saídas racionais para entradas que não foram apresentadas a rede durante a fase de treinamento ou aprendizado. As capacidades de aprendizado e de generalização tornam as redes neurais capazes de resolver problemas complexos e não-lineares. A seguir, serão explicadas algumas características do neurônio biológico, fundamentais para o entendimento das RNAs Neurônio Biológico O sistema nervoso é formado por um conjunto extremamente complexo de neurônios. Os neurônios estão conectados uns aos outros através de sinapses. Nos neurônios a comunicação é realizada através de impulsos elétricos, quando um impulso é recebido, o neurônio o processa, e passado um limite de ação, dispara um segundo impulso o qual flui do corpo celular para o axônio que, por sua vez, pode ou não estar conectado a um dendrito de outra célula. A Figura 2.1 apresenta uma representação de um neurônio. Os principais componentes de um neurônio são: ˆ Os dendritos: membrana que recebe os estímulos gerados por outras células. dendritos são as entradas do neurônio. Os ˆ Soma: é o corpo do neurônio, que é responsável por coletar e combinar informações vindas de outros neurônios;
21 CAPÍTULO 2. INTELIGÊNCIA COMPUTACIONAL 22 Figura 2.1: Neurônio biológico ˆ O axônio: membrana constituída de uma fibra tubular que é responsável por transmitir os estímulos para outras células. O axônio representa a saída do neurônio. O neurônio biológico é constituído de um corpo celular denominado soma. Nesse Local ocorre o processamento metabólico da célula nervosa ou neurônio. A partir da soma, projetam-se extensões filamentares denominadas dendritos, e o axônio. Este modelo anatômico foi identificado por Ramon Cajal em Com base nas pesquisas de Erlanger e Gasser, em 1920, e outras posteriores, passou-se a entender o comportamento do neurônio biológico como sendo o dispositivo computacional do sistema nervoso, o qual possui muitas entradas e uma única saída [10]. As entradas ocorrem através das conexões sinápticas, que conectam a árvore dendrital aos axônios de outras células nervosas. Os sinais que chegam pelos dendritos são pulsos elétricos conhecidos como impulsos nervosos ou potenciais de ação, e constituem a informação que o neurônio processará de alguma forma para produzir como saída um impulso nervoso no seu axônio. Sinapse é o nome dado ao ponto de contato entre a terminação axônica de um neurônio e o dendrito de outro. É pelas sinapses que os nodos se unem funcionalmente, formando a rede neural. As sinapses funcionam como válvulas, e são capazes de controlar a transmissão
22 CAPÍTULO 2. INTELIGÊNCIA COMPUTACIONAL 23 de impulsos entre os nodos na rede [11] e estão compreendidas entre duas membranas celulares: a membrana pré-sináptica, que recebe o estímulo vindo de uma célula, e a membrana pós-sináptica, que é a do dendrito. Na região pré-sináptica, se o estímulo nervoso recebido atinge um determinado limiar em um espaço curto de tempo, a célula dispara, produzindo um impulso que é transferido para outras células através de neurotransmissores presentes na membrana dendrital. Dependendo do neurotransmissor, a conexão sináptica é excitatória ou inibitória. A conexão excitatória provoca uma alteração no potencial da membrana que contribui para formação do impulso nervoso no axônio de saída, enquanto que a conexão inibitória age no sentido contrário. O mecanismo como é criado o potencial de ação ou impulso nervoso é o seguinte: quando o potencial da membrana está menos eletronegativo do que o potencial de repouso, diz-se que a membrana está despolarizada e quando está mais negativo, diz-se que ela está hiperpolarizada. O impulso nervoso ou potencial de ação é uma onda de despolarização de certa duração de tempo, que se propaga ao longo da membrana. A formação de um potencial de ação na membrana axonal ocorre quando essa membrana sofre despolarização suficientemente acentuada para cruzar um determinado valor conhecido como limiar de disparo. Quando esse limiar é superado, os estímulos são passados para outras células através das ligações sinápticas O Neurônio Artificial MCP McCulloch e Pits [12] propuseram um modelo matemático do neurônio artificial MCP. Esse modelo foi proposto com base nos principais conceitos do neurônio biológico. O modelo matemático do neurônio proposto por McCulloch e Pits apresenta n terminais de entrada x 1, x 2,..., x n (representando os dendritos) e apenas um terminal de saída y (representando o axônio). Os terminais de entrada do neurônio têm pesos acoplados w 1, w 2,..., w n cujos valores podem ser positivos ou negativos caso as sinapses correspondentes serem inibitórias ou excitatórias. O efeito de uma sinapse particular i no neurônio pós-sináptico é dado por x i w i. Os pesos determinam o nível em que o neurônio deve considerar sinais de disparo
23 CAPÍTULO 2. INTELIGÊNCIA COMPUTACIONAL 24 que ocorrem naquela conexão. Uma descrição do modelo está ilustrada na Figura 2.2. Figura 2.2: Modelo do neurônio de McCulloch e Pits O corpo do neurônio realiza um simples somatório dos valores x i w i que chegam a ele. Se o somatório dos valores ultrapassa o limiar de ativação ou threshold, o neurônio dispara (valor 1 na saída), caso contrário o neurônio permanece inativo (valor 0 na saída). A ativação do neurônio é realizada através de uma função de ativação, que dispara ou não o neurônio dependendo do valor da soma ponderada das suas entradas. No modelo MCP original, a função de ativação ativará a saída quando: n i=1 x iw i θ Na equação acima, n é a quantidade de entradas do neurônio, w i é o peso associado à entrada x i e θ é o limiar do neurônio Funções de Ativação A partir do modelo apresentado por McCulloch e Pits, surgiram vários outros modelos que permitem a produção de qualquer saída, não apenas zero ou um, e com várias funções de ativação. As funções de ativação mais comuns são: ˆ Função Limiar: função utilizada no modelo de McCulloch e Pits, caracterizada por tudo ou nada, representada da seguinte forma: 1, v 0 f(v) = 0, v 0
24 CAPÍTULO 2. INTELIGÊNCIA COMPUTACIONAL 25 Onde v é igual ao valor produzido pelo somatório das entradas do neurônio. Figura 2.3: Gráfico da função Limiar ˆ Função Sigmóide: essa é uma função semilinear, limitada e monotônica que pode assumir valores entre 0 e 1. Existem várias funções sigmodais, porém, a mais usada é a função logística definida pela equação: f(v) = 1 1+e ( av) Onde a é o parâmetro de inclinação da função sigmóide e v é o valor de ativação do neurônio. Figura 2.4: Gráfico da função sigmóide ˆ Função Signum: essa função apresenta as mesmas características da função limiar, porém, se limita ao intervalo entre 1 e 1. Essa função é representada por: f(v) = b v v para v 0 Onde b são os limites inferiores e superiores (b = 1 no gráfico) e v é o valor de ativação.
25 CAPÍTULO 2. INTELIGÊNCIA COMPUTACIONAL 26 Figura 2.5: Gráfico da função Signum ˆ Tangente Hiperbólica: seu gráfico é parecido com o da Função Sigmóide, assumindo valores entre 1 e 1, sendo representada por: f(v) = a e(bv) e ( bv) e (bv) +e (bv) Onde a é o parâmetro de inclinação da curva, b são os limites inferiores e superiores (b = 1 no gráfico) e v o valor de ativação. Figura 2.6: Gráfico da Tangente Hiperbólica Arquiteturas de Redes Neurais A definição da arquitetura de uma RNA define a maneira com que os neurônios são estruturados na rede [10]. A arquitetura restringe o tipo de problema que pode ser tratado pela rede. Redes com uma camada única de nodos MCP, por exemplo, só conseguem resolver problemas linearmente separáveis. Redes recorrentes, por sua vez, são mais apropriadas para resolver problemas que envolvem processamento temporal [11]. A arquitetura de uma rede é definida pelos seguintes parâmetros: número de camadas da rede, número de neurônios em cada camada, tipo de conexão entre os neurônios e topologia da rede.
26 CAPÍTULO 2. INTELIGÊNCIA COMPUTACIONAL 27 Em geral, as redes neurais podem ser classificadas quanto ao número de camadas, quanto ao tipo de conexão e quanto à conectividade entre os neurônios. Quanto ao número de camadas têm-se: ˆ Redes de uma única camada: existe apenas um nó entre uma entrada e uma saída da rede. A Figura 2.7 apresenta um exemplo de redes de única camada. Figura 2.7: Redes de uma única camada ˆ Redes de múltiplas camadas: existe mais de um neurônio entre alguma entrada e alguma saída (Figura 2.8). Figura 2.8: Rede de múltiplas camadas Quanto ao tipo de conexão têm-se: ˆ Feedforward, ou acíclica: a saída de um neurônio na i-ésima camada da rede não pode ser usada como entrada de nodos em camadas de índice menos ou igual a i Figura 2.7. ˆ Feedback, ou cíclica: a saída de algum neurônio na i-ésima camada da rede é utilizada como entrada em neurônios da camada de índice menor ou igual a i (Figura 2.9). Quanto à conectividade têm-se:
27 CAPÍTULO 2. INTELIGÊNCIA COMPUTACIONAL 28 Figura 2.9: Exemplo de rede feedback. Redes parcialmente conectadas (Figura 2.7). Redes completamente conectadas (Figura 2.8) Processo de aprendizado A principal propriedade de uma rede neural é a sua habilidade de aprender sobre o ambiente no qual está inserida de forma a melhorar a sua performance na resolução de problemas complexos. Essa melhora na performance é adquirida a cada instante do processo de aprendizado de acordo com uma forma de medição pré-estabelecida. Com isso, uma rede neural aprende sobre seu ambiente através de um processo iterativo de ajuste dos pesos sinápticos adquirindo mais conhecimento sobre o problema após cada iteração do processo de aprendizado. Segundo Mendel e McLaren [12], no contexto de redes neurais, aprendizado é o processo pelo qual os parâmetros de uma rede neural são ajustados através de estímulos produzidos pelo ambiente no qual a rede está inserida. O tipo de aprendizado é determinado pela maneira particular com que os parâmetros são modificados. Foram desenvolvidos diversos métodos de treinamento de redes, podendo ser agrupados em dois paradigmas principais: aprendizado supervisionado e aprendizado não-supervisionado. No entanto, outros dois paradigmas bastante conhecidos são os de aprendizado por reforço (que é um caso particular de aprendizado supervisionado) e aprendizado por competição (que é um caso particular de aprendizado não supervisionado). Aprendizado Supervisionado:
28 CAPÍTULO 2. INTELIGÊNCIA COMPUTACIONAL 29 Esse tipo de aprendizado é o mais utilizado em RNAs. Esse aprendizado é dito supervisionado porque as entradas e as respectivas saídas desejadas são fornecidas por um supervisor externo, normalmente chamado de professor. Seu objetivo é ajustar os pesos da rede, de forma a encontrar uma ligação entre os pares de entrada e saída fornecidos pelo professor. O professor é responsável por direcionar o processo de aprendizado fornecendo os padrões de entrada, as saídas desejadas e a taxa de erro desejada. A cada padrão de entrada submetido à rede pelo professor, compara-se a resposta desejada (que representa uma solução ótima para aquele padrão de entrada) com a resposta calculada, ajustando-se os pesos das conexões para minimizar o erro. A minimização da diferença é incremental, já que pequenos ajustes são feitos nos pesos a cada iteração do aprendizado. A soma dos erros quadráticos de todas as saídas é normalmente utilizada como medida de desempenho da rede e também como função de custo a ser minimizada pelo algoritmo de treinamento. A Figura 2.10 apresenta um esquema básico de aprendizado supervisionado. Figura 2.10: Esquema de aprendizado supervisionado. Nesse trabalho, o algoritmo de aprendizado utilizado foi o backpropagation. Aprendizado Não Supervisionado: No aprendizado não supervisionado não há um professor que oriente o processo de aprendizado. Ao contrário do aprendizado supervisionado, que possui pares de entrada e saída, para esses algoritmos somente são disponibilizados os padrões de entrada. De acordo com as regularidades estatísticas com que as
29 CAPÍTULO 2. INTELIGÊNCIA COMPUTACIONAL 30 entradas ocorrem, a rede cria classes de acordo com as características extraídas de cada padrão de entrada. Dessa forma, para cada entrada fornecida a rede, a saída será a classe a qual a entrada pertence. Caso a entrada não pertença a nenhuma classe pré-existente, a rede cria uma nova classe para essa entrada. A base para a utilização desse tipo de aprendizado é a redundância nos dados, sem redundância, seria praticamente impossível a utilização bem sucedida do aprendizado não supervisionado. A Figura 2.11 apresenta um esquema de um sistema de aprendizado não supervisionado. Figura 2.11: Esquema de aprendizado não supervisionado. 2.4 Computação Gráfica A computação gráfica é a ciência que basicamente estuda um conjunto de técnicas que transforma dados em imagem apresentada através de um dispositivo gráfico. Estes dados podem ser organizados através de um modelo matemático cuja geometria se assemelhe a do objeto do mundo real a qual se deseja modelar. Segundo J. Gomes e L.Velho em [13] a computação gráfica pode ser dividida em quatro sub-áreas que relacionam dados e imagens. Essas subáreas são tão próxima que estão muitas vezes interligadas, em determinados momentos são até confundidas. Estas sub-áreas são: Modelagem Geométrica, Síntese de Imagem, Processamento de Imagem e Visão Computacional. A figura 2.12 mostra estas quatro sub-áreas da computação gráfica e como se relacionam com os dados e a imagem: A Modelagem Geométrica trata do problema de descrever e estruturar dados geométricos no computador, ou seja, encontrar um modelo matemático capaz de representar o
30 CAPÍTULO 2. INTELIGÊNCIA COMPUTACIONAL 31 Figura 2.12: Sub-áreas da computação gráfica objeto desejado. Um exemplo de Modelagem geométrica é a obtenção de uma função que se aproxime de outra desconhecida através de um método de interpolação de alguns pontos de amostragem já conhecidos. A Síntese de imagens, ou Visualização, processa os dados gerados pelo sistema na modelagem geométrica e produz uma imagem que pode ser vista em um dispositivo de saída gráfica. A partir do mapeamento de alguns pontos, distribuídos em torno de um determinado objeto, obtém-se um modelo matemático, que o representa, através da Modelagem Geométrica. De posse deste modelo é possível apresentar uma imagem que represente a forma do objeto. Este último processo é um exemplo de Síntese de Imagem. O Processamento de Imagens assume como dados de entrada uma imagem, processaa produzindo uma outra imagem como dado de saída. As técnicas desta área podem ser utilizadas, por exemplo, para melhorar a qualidade de uma imagem antiga ou danificada, produzindo outra, imagem com menos ruídos. Por último, o processo de Visão Computacional, ou simplesmente Visão, tem por finalidade obter, a partir de uma imagem de entrada, informações físicas, geométricas e/ou topológicas sobre os dados do objeto apresentado na imagem. Um bom exemplo
31 CAPÍTULO 2. INTELIGÊNCIA COMPUTACIONAL 32 desta área aparece nas transmissões de futebol, quando é necessário observar com segurança e certeza se um jogador está em posição de impedimento, ou seja, uma situação onde é necessário determinar a sua posição no campo em relação à posição dos jogadores adversários. Para determinados pesquisadores a Computação Gráfica é apenas a área denominada de síntese de imagem. Porém para [13], além de outros pesquisadores desta área, esta ciência é composta pelas quatro linhas apresentadas acima. Este fato se justifica graças ao fato de cada vez surgir mais métodos e técnicas que solucionem problemas nestas quatro vertentes. 2.5 Visão Computacional Visão computacional é uma linha de pesquisa que procura definir procedimentos automatizados que imitem processos da visão humana (ou de outros animais). Normalmente essa área basea-se em técnicas estatísticas, ou probabilísticas, para estimar informações baseadas em imagens. Para desenvolver técnicas nessa linha de pesquisa é essencial uma boa compreensão sobre o funcionamento das câmeras (com suas falhas na aquisisão de sinais que compõem uma imagem, inserção de ruídos, distorção de cores, etc) assim como seu posicionamento no espaço ambiente. Esse segundo problema é conhecido como calibração de camera e é um tema largamente estudado, pois normalmente, para estimar informações em uma cena vista em duas dimensções é necessário ter noções sobre profundidade (e profundidade é estimada através da especificação da posição da câmera e de objetos na cena). De um modo mais geral visão computacional é a área da computação gráfica que extrai informações de uma imagem ou de um conjunto de imagens. Existem diversas aplicações de visão computacional em diversas áreas como detecção automática de tumores imagens médicas; definição de posição de jogadores de futebol no campo, em um determinado instante; determinação de volume de um fluido em mares ou rios,
32 CAPÍTULO 2. INTELIGÊNCIA COMPUTACIONAL 33 etc. Nesse trabalho foi estudado um tema particular de visão computacional, que é o de reconhecimento de padrões, seção 2.2. Para reconhecer padrões, assim como na maioria dos problemas de visão computacional, é necessário extrair características da imagem. Um padrão em particular que podemos citar são caracteres. O campo de pesquisa, dentro da visão computacional, que se preocupa com o reconhecimento de caracteres é conhecido pelo acrônimo OCR, do inglês, Optical Recognition Caracter. Esse tema será abordado na seção Extração de características No campo de reconhecimento de padrões, extrair caracerísticas significa extrair medidas associadas ao objeto que se deseja reconhecer, de forma que essas medidas sejam semelhantes para objetos semelhantes e diferentes para objetos distintos [14]. Definir vetores de características é o método para representação de dados mais comum e conveniente para problemas de classificação e reconhecimento. Cada característica resulta de uma medição qualitativa ou quantitativa, que é uma variável ou um atributo do objeto [15]. Para reconhecer um caractere de uma representação bitmap, há a necessidade de extrair características do mesmo para descrevê-lo de uma forma mais apropriada para o seu processamento computacional e reconhecimento. Como o método de extração de características afeta significantemente a qualidade de todo o processo de reconhecimento de padrões, é muito importante extrair características de modo que elas sejam invariantes no que diz respeito às várias condições de iluminação, tipo de fonte e possíveis deformações dos caracteres causadas, por exemplo, pela inclinação da imagem. Geralmente, a descrição de uma região de uma imagem é baseada em suas repre-
33 CAPÍTULO 2. INTELIGÊNCIA COMPUTACIONAL 34 sentações interna e externa. A representação interna de uma imagem é baseada em suas propriedades regionais, como cor ou textura. A representação externa é selecionada quando se deseja dar ênfase nas características da forma do objeto. Logo, o vetor de características de uma representação externa inclui características como o número de linhas, a quantidade de arestas horizontais, verticais e diagonais, etc. O conjunto de vetores de características forma um espaço vetorial. Cada caractere representa uma determinada classe, e todas as formas de representação desse caractere definem as instâncias dessa classe. Todas as instâncias do mesmo caractere devem ter uma descrição similar através de vetores numéricos chamados de descritores, ou padrões. Logo, vetores suficientemente próximos representam o mesmo caractere. Essa é a premissa básica para que o processo de reconhecimento de padrões seja bem sucedido. No capítulo que trata do toolkit Horus, serão explicados alguns métodos de extração de características implementados no módulo de visão computacional Reconhecimento Óptico de Caracteres Reconhecimento Óptico de Caracteres ou OCR (Optical character recoginition) é um campo de pesquisa nas áreas de reconhecimento de padrões, inteligência artificial e visão computacional. Em computação, OCR é o processo de tradução eletrônica de imagens de textos para textos que possam ser editados computacionalmente, permitindo assim, a realização de operações que seriam inviáveis de serem realizadas sobre o texto em formato de imagem. Sistemas OCR, ou de reconhecimento de caracteres, datam do final dos anos 50 e têm sido amplamente utilizados em computadores desktop desde os anos 90. Esses sistemas disponibilizam textos contidos em imagens, capturadas por dispositivos ou geradas computacionalmente, em textos editáveis por computador. Os textos gerados por sistemas OCR são, normalmente, utilizados por outras ferramentas que permitem operações, como a busca de determi-
34 CAPÍTULO 2. INTELIGÊNCIA COMPUTACIONAL 35 nado conteúdo de interesse. Apesar de mais de 40 anos de pesquisa, sistemas OCR ainda estão muito longe de alcançar a eficácia de um ser humano. A eficácia desses sistemas está fortemente ligada à qualidade das imagens. Imagens limpas e de alta qualidade levam esses sistemas a atingirem uma taxa de aproximadamente 99œde eficácia [16]. Porém, imagens com baixa resolução, com ruído ou com diferenças de luminosidade, por exemplo, podem levar esses sistemas a cometerem erros grosseiros e confundirem diversos tipos de caracteres. Caracteres como 6 e 9, B e 8 e o e 0, são facilmente confundidos em imagens imperfeitas. Nesse sentido, atualmente, boa parte das pesquisas em OCR está focada na melhoria da sua eficácia no que diz respeito à extração de textos de imagens que não se encontram em condições ideais. Além disso, o reconhecimento de textos escritos a mão em linguagem cursiva ainda são uma área de pesquisa muito ativa. Há vários sistemas OCR, livres e proprietários, presentes no mercado hoje. O processo de OCR é constituído de várias etapas, com responsabilidades bem definidas, que ao final apresentam o texto editável. A figura 2.13 apresenta um esquema básico do processo de OCR. Na figura 1, tem-se as várias etapas de um processo clássico de OCR. Inicialmente, é necessário tornar a imagem binária, isto é, transformar a imagem, que se encontra em escala de cinza, em uma imagem com apenas duas cores: preto e branco, cores essas representadas respectivamente pelos inteiros 0 e 255. Na etapa de segmentação, cada caractere presente na imagem é recortado da imagem binária para ser tratado individualmente. Após a segmentação, cada caractere é passado individualmente para a etapa de extração de características, onde um vetor numérico é extraído a partir das características desse caractere. Por último, é realizada a etapa de reconhecimento do vetor de características, que finalmente deverá apontar o caractere correto. Cada etapa desse processo pode ser implementada de diversas maneiras e por vários algoritmos diferentes. No capítulo 3 serão apresentados alguns algoritmos que podem ser utilizados no processo de OCR.
35 CAPÍTULO 2. INTELIGÊNCIA COMPUTACIONAL 36 Figura 2.13: Etapas do processo de OCR
36 Capítulo 3 Horus Horus é um toolkit para desenvolvimento e controle de agentes inteligentes desenvolvido na linguagem de programação Python. Esse toolkit foi construído com o objetivo de fornecer classes e algoritmos voltados a resolução de problemas de mapeamento automático de ambientes e visão computacional. O toolkit Horus fornece os módulos Core, Mapeamento, Visão e Util. O módulo Core apresenta as abstrações que devem ser implementadas pelas aplicações para construir um agente inteligente. O módulo Mapeamento fornece algoritmos de localização, mapeamento e navegação para um agente. O módulo Visão fornece os algoritmos de visão computacional necessários na etapa de reconhecimento de padrões. Por último, o módulo Util fornece um conjunto de funções utilitárias que podem ser usadas tanto no toolkit Horus quanto em qualquer outra aplicação. Cada um desses módulos será explicado nas subseções seguintes. 3.1 Core O Horus pode ser utilizado tanto como uma biblioteca de algoritmos para processamento de imagens, visão computacional e mapeamento de ambientes, como através 37
37 CAPÍTULO 3. HORUS 38 de extensões das classes fornecidas pelo módulo core. Essas classes, que podem ser estendidas pelas aplicações, são chamadas de abstrações. A Figura 3.1 mostra a arquitetura deste módulo. Figura 3.1: Arquitetura do módulo core A arquitetura acima apresenta classes que representam o ambiente (Environment), o agente inteligente (Agent), os dispositivos (Device), o programa de agente (Brain), eventos (Event) e a hierarquia de comportamentos (hierarquia Behavior). Cada instância da classe Agent representa um agente inteligente na aplicação. Para que um agente inteligente possa ser utilizado por uma aplicação, ela deve configurá-lo com instâncias de Device e uma única instância da classe Brain, responsável pela inteligência do agente. O programa de agente, responsável pela inteligência do agente, deve ser implementado em extensões da classe Brain (cérebro). Uma aplicação que deseja implementar um programa de agente para um agente em particular deve estender a classe Brain e implementar o método run() dessa classe, como apresentado na figura 3.2. Esse método é o loop principal da execução do agente, sendo executado dez vezes por segundo. No diagrama acima, nota-se que a classe Brain pode estar relacionada a nenhum ou a muitos comportamentos. Essa é mais uma facilidade fornecida pelo módulo core
38 CAPÍTULO 3. HORUS 39 do horus que tem o objetivo de organizar a implementação dos comportamentos separadamente da implementação da classe Brain. Dessa forma, o programa de agente fica mais claro e simples de ser compreendido e mantido. Figura 3.2: extensão da classe Brain do horus por uma aplicação. Os comportamentos (Behavior) recebem eventos gerados pela aplicação e fazem com que o agente execute uma determinada ação com base no tipo de evento recebido. Como exemplo de eventos, pode-se citar a captura de uma cena, um obstáculo detectado, a leitura de um determinado dispositivo, etc. Um comportamento pode ser implementado diretamente como uma extensão da classe Behavior ou como uma extensão de uma ou várias de suas subclasses. As subclasses da classe Behavior (Neural- NetworkBehavior, TesseractBehavior e MappingBehavior) fornecem facilidades para a utilização de funcionalidades fornecidas pelo Horus. Logo, NeuralNetworkBehavior fornece métodos para a construção e treinamento de redes neurais na implementação de um comportamento. A classe TesseractBehavior disponibiliza a funcionalidade de OCR da engine tesseract, presente no Horus. A classe MappingBehavior disponibiliza métodos para implementação de comportamentos de mapeamento de ambientes
39 CAPÍTULO 3. HORUS 40 através da técnica SLAM. Dessa forma, uma aplicação que necessite de um comportamento que envolva mapeamento de ambientes e redes neurais, por exemplo, deve criar uma classe que estenda tanto da classe MappingBehavior como da classe Neural- NetworkBehavior. A figura 3.3 mostra como ficaria o esquema desse comportamento, sendo representado pela classe MyBehavior. A classe Behavior também possui atributos para armazenar informações sobre estado de execução de um comportamento. Essas informações são os horários de início e término da execução e o status de execução do comportamento. Essas informações são utilizadas para emissão de relatórios de atuação do agente. Figura 3.3: Comportamento MyBehavior que estende tanto de NeuralNetworkBehavior quanto de MappingBehavior. Em certas aplicações, um agente inteligente não necessariamente se encontra sozinho
40 CAPÍTULO 3. HORUS 41 no ambiente. Ele pode interagir com outros agentes inteligentes, como no caso de aplicações que envolvam enxames de agentes. Para que um agente possa obter informações sobre outros agentes que se encontrem no ambiente, ou sobre o próprio ambiente, foi criada a classe Environment, que representa o ambiente no qual o agente está inserido. Dessa forma, o cérebro do agente deve ser configurado tanto com uma instância da classe Agent, como com uma instância da classe Environment para operar. Quando o cérebro do agente é configurado com diversos comportamentos, é necessário definir a ordem de execução desses comportamentos. Em alguns casos, os comportamentos podem possuir condições de execução. Logo, o cérebro é responsável por identificar as condições que cada comportamento necessita para ser executado e colocá-lo como ativo quando a sua condição de execução for satisfeita. Contudo, há casos em que dois ou mais comportamentos podem ter a sua condição de execução satisfeita. Nesses casos, é necessário definir prioridades de execução sobre os comportamentos ou executá-los em paralelo. A ordem de execução dos comportamentos define a máquina de estados de execução do agente inteligente. Sendo assim, a implementação do cérebro como uma máquina de estados se enquadra perfeitamente em aplicações que exijam a interação entre diversos comportamentos. 3.2 Processamento de Imagem O termo processamento de imagens refere-se ao processamento de imagens de duas dimensões por um computador digital [LIVRO FUNDAMENTALS OF DIGITAL IMAGE PROCESSING]. Processamento de imagens normalmente é utilizado como um estágio para novos processamentos de dados, tais como reconhecimento de padrões e aprendizagem de máquina. Esse tipo de processamento é utilizado em diversos tipos de aplicações, entre elas, processamento de imagens médicas e de satélite, robótica, sensoriamento remoto, entre outras.
41 CAPÍTULO 3. HORUS 42 Para uma melhor compreensão dos conceitos e algoritmos utilizados durante esse trabalho, é necessário uma breve introdução sobre algumas propriedades de uma imagem digital. Essas propriedades são: Conectividade: esse conceito determina se dois pixels estão conectados entre si. Para isso, é necessário determinar se esses pixels são adjacentes, segundo algum critério, e se os seus níveis de cinza são, de alguma forma, similares. Definindo uma image binária onde os pixels somente assumem valores 0 e 1, dois pixels vizinhos só serão considerados conectados se possuírem o mesmo valor. Adjacência: dois pixels p e q são adjacentes somente se estiverem conectados segundo algum critério. Dados os conjuntos de pixels C 1 e C 2, esses conjuntos serão adjacentes se algum pixel de C 1 é adjacente a algum pixel de C 2. Vizinhança: dado um pixel p de coordenadas (x, y), sua 4-vizinhança é definida como (x + 1, y), (x 1, y), (x, y + 1), (x, y 1), chamada de N 4 (p). Os quatro vizinhos diagonais do pixel p são definidos como (x 1, y 1), (x 1, y +1), (x+ 1, y 1), (x + 1, y + 1), chamada de N d (p). Dessa forma, a união dos conjuntos N 4 (p) e N d (p) forma o conjunto da 8-vizinhança do pixel p, chamado de N 8 (p). A Figura 3.4 ilustra as possíveis vizinhanças de um pixel. Figura 3.4: (a) 4-vizinhança, (b) d-vizinhança e (c) 8-vizinhança. Nas próximas subseções serão explicados os principais algoritmos de processamento de imagens implementados no toolkit Horus.
42 CAPÍTULO 3. HORUS Thresholding O processo de limiarização da imagem, também chamado de thresholding, consiste em transformar a imagem que inicialmente se encontra em escala de cinza, com 256 tons diferentes, para uma imagem com apenas dois tons: preto e branco, representados por 0 ou 255 (Figura 3.5). No processo de OCR, Essa etapa é utilizada para definir claramente as fronteiras dos caracteres na imagem, afim de prepará-los para serem analisados pela etapa de extração de características. Para transformar uma imagem monocromática de 256 tons de cinza em binária podem ser utilizadas técnicas de thresholding global e adaptativo. Figura 3.5: Exemplo de imagem binária Thresholding Global Thresholding global é um algoritmo simples que depende de um único parâmetro denominado limiar. O limiar é um valor de intensidade de pixel utilizado como base de comparação. Sendo assim, em uma imagem monocromática de 256 tons de cinza, todo valor de pixel da imagem de entrada que se encontra abaixo do limiar é colocado como 0 e todo valor acima do limiar é colocado como 255 na imagem resultante. Tendo v como o valor do pixel na imagem original e t como limiar, o novo valor de pixel computado é: 255, v t f(v) = 0, v t
43 CAPÍTULO 3. HORUS 44 Uma da formas de se obter o valor do limiar t é através de uma inspeção visual do histograma da imagem. Uma vez que o limiar é utilizado para toda a imagem, o thresholding global pode falhar algumas vezes. No caso de imagens com diferenças de iluminação ou parcialmente sombreadas, informações que não pertencem ao plano de fundo podem ser apagadas. A figura 3.6 mostra um exemplo de aplicação de thresholding global com imagens sombreadas. Figura 3.6: imagem original (à direita) e imagem binarizada com thresholding global (à esquerda). Em casos onde a imagem se encontra parcialmente sombreada, a melhor opção é utilizar a técnica de thresholding adaptativo Thresholding Adaptativo No caso de imagens parcialmente sombreadas ou não uniformemente iluminadas, o algoritmo de thresholding global falha devido à utilização de um único limiar para a imagem inteira. Isso pode causar o efeito apresentado na Figura 3.6. O algoritmo de thresholding adaptativo resolve esse problema calculando o limiar para cada pixel da imagem com base na sua vizinhança. Há duas abordagens principais de thresholding adaptativo: Chow e Kaneko [17] e thresholding local [18]. Abordagem Chow e Kaneko: esse método, assim como o de thresholding local, se baseia na teoria de que regiões menores da imagem têm maior probabilidade
44 CAPÍTULO 3. HORUS 45 de possuírem uma iluminação aproximadamente uniforme. Com isso, o método de Chow e Kaneko divide a imagem em um vetor de sub-imagens sobrepostas e então encontra o limiar ótimo para cada sub-imagem através da análise de seus histogramas. O limiar para cada pixel é encontrado interpolando os resultados extraídos das sub-imagens. Apesar de gerar resultados satisfatórios, o método de Chow e Kaneko possui um alto custo computacional. Na Figura 3.7 é mostrado como o limiar de uma subimagem é localizado e a posterior interpolação dos valores para encontrar o limiar de cada pixel na subimagem. Figura 3.7: Localização do limiar por Chow e Kaneko Thresholding Local: a segunda forma de encontrar o limiar de cada pixel é uma inspeção estatística da sua vizinhança, levando em consideração que os vizinhos de um pixel tendem a possuir maior chance de ter uma iluminação mais uniforme. No método de thresholding local, o limiar de um pixel é definido com base nos valores de um número predeterminado de vizinhos do mesmo. Dessa forma, aplica-se uma operação estatística nos valores da vizinhança de um pixel a fim de obter o seu limiar t. Essas operações podem ser a média,
45 CAPÍTULO 3. HORUS 46 a mediana e a média dos valores mínimo e máximo da vizinhança. Na figura 3.8 é apresentado o código do algoritmo de thresholding local, implementado no toolkit horus, utilizando a média entre os valores da vizinhança. Figura 3.8: código do método de thresholding local implementado em linguagem Python No código da Figura 3.8 os parâmetros passados são: a imagem (image), o tamanho da vizinhança (size) e uma constante que é subtraída da média (con). Na figura 3.9 é apresentado o resultado da limiarização com o algoritmo de thresholding local, utilizando uma vizinhança de tamanho 7 7 com um valor de constante igual a 7 (size = 7 e con = 7). Figura 3.9: imagem original (à direita) e imagem limiarizada com thresholding local (à esquerda).
46 CAPÍTULO 3. HORUS Skeletonization Skeletonization (Esqueletonização) é o processo de remoção dos pixels de uma imagem, o máximo quanto possível, de forma a preservar a estrutura básica ou esqueleto da imagem. O esqueleto extraído deve ser o mais fino quanto possível (largura de um pixel), conectado e centralizado. Quando estas propriedades são satisfeitas, o algoritmo deve parar. As figuras 3.10 e 3.11 mostram exemplos de imagens e seus respectivos esqueletos. Figura 3.10: Imagem de um T e seu respectivo esqueleto Figura 3.11: Imagem de um B (preto) e seu respectivo esqueleto (branco). Normalmente, o esqueleto de uma imagem enfatiza as propriedades geométricas e topológicas dos padrões e é extraído quando se desejam preservar as características estruturais da imagem, como por exemplo, junções, loops e terminações de linha. Essas características podem ser extraídas do esqueleto para serem utilizadas, posteriormente, em um processo de reconhecimento e classificação de formas através de técnicas de inteligência computacional.
47 CAPÍTULO 3. HORUS 48 O algoritmo de skeletonization implementado no horus utiliza o conceito de fire front. Esse conceito realiza a remoção iterativa dos pixels da borda dos padrões até que as condições de conectividade, centralização e espessura do esqueleto sejam satisfeitas. Esse algoritmo, denominado algoritmo de Hilditch, é um processo iterativo em que se aplicam sucessivamente dois passos aos pixels pertencentes à borda de um padrão. O primeiro passo concentra-se em selecionar os pixels das bordas que serão removidos e marcá-los para deleção. O segundo passo é remover todos os pixels marcados para deleção no passo anterior. A figura 3.12 ilustra os oito vizinhos do pixel p 1. Figura 3.12: 8-vizinhança do pixel p 1 A fim de estabelecer as condições para que um pixel da borda seja marcado para deleção, serão definidas duas funções: B(p 1 ): número de vizinhos pretos do pixel p 1. A(p 1 ): número de transições de preto para branco (0 para 255) na seqüência p 2, p 3, p 4, p 5, p 6, p 7, p 8, p 9. A Figura 3.13 mostra exemplos dessas duas funções. Há duas versões do algoritmo de Hilditch, uma usando uma janela 4 4 e outra usando uma janela 3 3, nesse trabalho foi utilizada uma janela 3 3. Utilizando as funções apresentadas acima, o algoritmo de Hilditch verifica os pixels pretos e marca para deleção aqueles que satisfazem as quatro seguintes condições:
48 CAPÍTULO 3. HORUS 49 Figura 3.13: Exemplos das funções: (a)b(p 1 ) = 2, A(p 1 ) = 1 b) B(p 1 ) = 2, A(p 1 ) = 2 2 B(p 1 ) 6: essa condição assegura que o número de vizinhos pretos de um pixel seja maior ou igual a 2 e menor ou igual a 6. Isso garante que nenhuma terminação de linha ou pixel isolado, seja deletada e que o pixel em questão seja um pixel de fronteira. Figura 3.14: a) B(p 1 ) = 7 b) B(p 1 ) = 0 c) B(p 1 ) = 1 A Figura 3.14 apresenta três condições em que um determinado pixel p 1 não deve ser deletado. Quando B(p 1 ) é igual a 7, o pixel não é um bom candidato, pois, sua deleção pode quebrar a conectividade do padrão. Quando B(p 1 ) é igual a 1, significa que o pixel p 1 é uma terminação de linha e já faz parte do esqueleto, portanto, não deve ser removido. Quando B(p 1 ) é igual a 0 significa que o pixel p 1 é um pixel isolado e também não deve ser removido. A(p 1 ) = 1: essa condição representa efetivamente um teste de conexão. Os casos em que A(p 1 ) é maior que 1, a deleção do pixel p 1 causa uma quebra na conectividade do padrão, como mostra a Figura p 2 + p 3 + p ou A(p 2 ) 1: essa condição assegura que linhas verticais com largura de dois pixels não serão inteiramente removidas pelo algoritmo. A figura abaixo apresenta uma situação em que a condição acima é satisfeita.
49 CAPÍTULO 3. HORUS 50 Figura 3.15: Exemplos onde A(p 1 ) é maior que 1. Figura 3.16: Exemplo de situação em que linhas verticais com largura de dois pixels não serão inteiramente removidas. p 2 + p 4 + p ou A(p 4 ) 1: essa condição assegura que linhas horizontais com largura de dois pixels não serão inteiramente removidas pelo algoritmo. A figura abaixo apresenta uma situação em que a condição acima é satisfeita. Figura 3.17: Exemplo de situação em que linhas herticais com largura de dois pixels não serão inteiramente removidas. A cada iteração do algoritmo, os pixels das bordas são analisados, alguns deles são marcados para deleção e então deletados. A figura abaixo ilustra o processo iterativo do algoritmo, onde, os pixels deletados em cada iteração são representados pelas diferenças nos tons de cinza da imagem. O algoritmo de Hilditch é menos custoso do que o algoritmo de transformação de eixo mediano. Porém, esse algoritmo não funciona perfeitamente para todos os padrões. A Figura 3.19 apresenta dois tipos de padrões que são completamente erodidos pelo algoritmo.
50 CAPÍTULO 3. HORUS 51 Figura 3.18: a) padrão de entrada do algoritmo b) deleção iterativa dos pixels das bordas c) resultado após a execução do algoritmo Figura 3.19: Padrões completamente erodidos pelo algoritmo de Hilditch. 3.3 Visão O Sistema de Visão é um dos mais complexos e completos do ser humano, pois fornece um conjunto de informações necessárias à interação do homem com o ambiente. Tal processo se inicia com a captação dos estímulos luminosos do ambiente formando uma imagem, que juntamente aos outros estímulos captados por demais sensores do corpo (som, temperatura, pressão, umidade, cheiro, etc) e as informações contidas na memória, compõem uma cena compreendida pelo cérebro. Esse módulo tem como principal objetivo o reconhecimento de padrões. Na aplicação Ariadnes, desenvolvida neste trabalho, o padrão a ser reconhecido é uma placa com o nome dos locais do ambiente e setas que indicam as direções dos mesmos. Para reconhecimento de uma placa é necessário identificar algumas características de uma imagem, que servirão de padrões de entrada para uma rede neural.
51 CAPÍTULO 3. HORUS Extração de características Para realizar o reconhecimento de objetos em uma cena, é necessário extrair características das imagens desse objeto, de forma a identificá-lo, independentemente das variações com que ele possa ocorrer na imagem. O toolkit Horus apresenta três algoritmos para extração de características. Cada um deles será explicado nos itens abaixo. Matriz de Pixel: a maneira mais simples de extrair características de um bitmap é associar a luminância de cada pixel com um valor numérico correspondente no vetor de características. Esse método, apesar de simples, possui alguns problemas que podem torná-lo inadequado para o reconhecimento de caracteres. O tamanho do vetor é igual à altura do bitmap multiplicado pela sua largura, portanto, bitmaps grandes produzem vetores de características muito longos, o que não é muito adequado para o reconhecimento. Logo, o tamanho do bitmap é uma restrição para esse método. Além disso, este método não considera a proximidade geométrica dos pixels, bem como suas relações com a sua vizinhança. No entanto, este método pode ser adequado em situações onde o bitmap do caractere se encontra muito opaco ou muito pequeno para a detecção de arestas. Figura 3.20: Matriz de pixel de um bitmap. Histograma de Arestas por Regiões: esse método extrai o número de ocorrências de determinados tipos de arestas em uma região específica do bitmap. Isso torna
52 CAPÍTULO 3. HORUS 53 o vetor de características desse método invariante com relação à disposição das arestas em uma região e a pequenas deformações do caractere. Sendo o bitmap representado pela função discreta f(x, y), largura w e altura h, onde 0 x < w e 0 y < h. Primeiramente é realizada a divisão do bitmap em seis regiões (r 0, r 1,..., r 5 ) organizadas em três linhas e duas colunas. Quatro layouts podem ser utilizados para a divisão do bitmap em regiões. Figura 3.21: Layout com seis regiões em três linhas e duas colunas. Definindo a aresta de um caractere como uma matriz 2 2 de transições de branco para preto nos valores dos pixels, tem-se quatorze diferentes tipos de arestas, como ilustrado na figura Figura 3.22: Quatorze diferentes tipos de arestas O vetor de ocorrências de cada tipo de aresta em cada sub-região da imagem é normalmente muito longo o que não é uma boa prática em reconhecimento
53 CAPÍTULO 3. HORUS 54 de padrões, onde o vetor de características deve ser tão menor quanto possível. Com isso, pode-se agrupar tipos de arestas semelhantes para reduzir o tamanho do vetor de características. Por questões de simplicidade, o agrupamento dos tipos de aresta será desconsiderado no algoritmo de extração de características. Sendo n igual ao número de tipos de arestas diferentes, onde h i é uma matriz 2 2 que corresponde ao tipo específico de aresta, e p igual ao número de regiôes retangulares em um caractere têm-se: Figura 3.23: Matrizes referentes aos tipos de arestas O vetor de características de saída é ilustrado pelo padrão abaixo. A notação h i siginifica número de ocorrências de um tipo de aresta representado pela matriz h j na região r i : Uma outra forma de extração de características é a análise estrutural do padrão. Através desse tipo de extração é possível diferenciar padrões por suas caracteristias mais substanciais. No caso de reconhecimento de caracteres, a análise estrutural leva Figura 3.24: Vetor de Características
54 CAPÍTULO 3. HORUS 55 em consideração estruturas mais complexas, como junções, terminação de linha e loops. Terminação de Linha: é representada por um ponto que possui exatamente um vizinho de pixel preto na 8-vizinhança. Junções: consiste em um ponto que possui pelo menos três pixels pretos na 8-viznhança. No presente trabalho, considerou-se apenas dois tipos de junções: com três e quatro vizinhos. A Figura mostra um exemplo de cada caso. Loops: este é a característica estrutural mais complexa de ser extraída em um caractere. Neste trabalho, o processo de contagem de loops trabalha com a imagem negativa do caractere (Figura 00000), ou seja, o fundo da imagem é reprensetado pela cor preta, enquanto que o caractere é representado pela cor branca. O número de loops pode ser calculado como o número de grupos de pixels pretos na imagem negativa, representado na Figura pelos números 1, 2, 3, subtraido de um. Essa subtação é feita para não considerar o fundo da imagem como um loop. O toolkit Horus fornece algumas implementações de algoritmos para análise estrututal de caracteres Reconhecimento de Objetos Reconhecimento de objetos é o processo de identificação de um determinado objeto através de suas características. Normalmente, esse processo se inicia com a captura de informações sobre o objeto através de câmeras ou outros tipos de sensores, como sonares por exemplo. Em seguida, essas informações passam pelo processo de extração de características com a finalidade de se extrair um vetor de informações que identifiquem unicamente o objeto independente das variações com que ele se apresente. Por fim, esse vetor de características é passado para o processo de reconhecimento, o qual identifica o objeto através de suas características.
55 CAPÍTULO 3. HORUS 56 Para tarefas de reconhecimento, o Horus disponibiliza funções para construção e treinamento de redes neurais através da utilização de uma biblioteca denominada FANN (Fast Artificial Neural Network). O FANN é uma biblioteca de código aberto implementada em linguagem C que fornece conectores para diversas linguagems de alto nível, dentre elas pode-se citar: Java, C++, Python e Ruby. Outra funcionalidade disponibilizada pelo horus para reconhecimento de objetos é o módulo de OCR. Esse módulo utiliza uma engine OCR Open Source chamada de Tesseract. Essa engine está sob a licensa Apache e é escrita nas linguagens de programação C e C++. O módulo OCR do Horus pode ser utilizado em aplicações em que haja a necessidade de se reconhecer textos existentes em imagens. O módulo OCR é utilizado nas aplicações ANPR e Ariadnes. No ANPR, esse módulo é utilizado para reconhecer o texto que se encontra nas placas dos automóveis. Já na aplicação Ariadnes, o agente inteligente utiliza esse módulo para reconhecer os textos que se encontram nas placas informativas presentes no ambiente. 3.4 Mapeamento e Navegação Chamamos de mapeamento o processo de identificar locais no ambiente do simulador e representa-los em um grafo. O mapeamento no Horus utiliza uma técnica genérica denominada SLAM. Nessa técnica, um agente consegue realizar o mapeamento e a localização no ambiente de forma simultânea. Os dispositivos utilizados pela implementação da técnica SLAM são lasers, para identificar obstáculos, e um odômetro, para medir distâncias percorridas. O SLAM é composto por vários procedimentos interligados. Cada um desses procedimentos pode ser implementado de diversas formas. Dentre os procedimentos implementados no Horus, podemos citar: 1. Landmark Extraction: procedimento responsável pela extração de marcos no
56 CAPÍTULO 3. HORUS 57 ambiente. 2. Data Association: procedimento que associa os dados extraídos de um mesmo marco por diferentes leituras de lasers. 3. State Estimation: procedimento responsável por estimar a posição atual do robô com base em seu odômetro e nas extrações de marcos no ambiente. 4. State Update: procedimento que atualiza o estado atual do agente. 5. Landmark Update: procedimento que atualiza as posições dos marcos no ambiente em relação ao agente. Neste trabalho, a proposta utilizada é mapear o ambiente através de um grafo conexo, cujos nós referem-se a: entradas/saídas do ambiente, acessos aos cômodos, obstáculos fixos e esquinas. O peso das arestas é calculado de acordo com o custo de processamento no deslocamento entre a posição de um nó ao outro. O problema de navegação consiste na localização e definição do caminho que o agente deve seguir. Após a construção de uma representação do ambiente em forma de um grafo, o agente é capaz de se localizar e se movimentar pelo ambiente através dos vértices e arestas, previamente mapeados no grafo. Para a utilização de grafos, o Horus fornece classes para sua construção e algoritmos para cálculo de caminho mínimo.
57 Capítulo 4 ANPR Nesse capítulo serão abordados os principais conceitos sobre um sistema de Reconhecimento Automático de Números de Placas (Automatic Number Plate Recognition - ANPR). Nesse trabalho será adotado o acrônimo do termo em inglês ANPR. Atualmente, ANPR se tornou a principal técnica para muitos sistemas de transporte automatizado, como monitoramento de tráfego em estradas, pagamento automático de pedágios e controle de acesso a pontes e estacionamentos. Esse tipo de sistema consiste em, a partir de uma imagem de um carro, localizar a placa e identificar os caracteres presentes nesta. Com base no reconhecimento dos caracteres presentes na placa, é possivel identificar o carro e levantar informações sobre o mesmo automaticamente. Sistemas ANPR também são conhecidos como: Automatic licence plate recognition (ALPR), Automatic vehicle identification (AVI), Car plate recognition (CPR), Licence plate recognition (LPR) e Lecture Automatique de Plaques d Immatriculation (LAPI). A idéia de um sistema ANPR foi criado em 1976, pelo Departamento de Desenvolvimento Científico de Polícia no Reino Unido, com o objetivo de identificar carros roubados. O primeiro prototipo desenvolvido, ficou pronto em 1979, e foi desenvolvido pela empresa Britanica EMI Electronics. Esse sistema começou a ser testado na rodovia A! e no Túnel Dartford, ambos na Inglaterra. Somente em 58
58 CAPÍTULO 4. ANPR ocorreu a identificação de um carro roubado, seguido de prisão do delinquente, através da utilizalação deste sistema. Há algum tempo atrás, a identificação de veículos era um trabalho completamente manual, porém, com o crescimento do tráfego de veículos nas rodovias, a tarefa de identificação manual de veículos se tornou inviável. Com a evolução dos componentes eletrônicos, foi criado um sistema AVI, onde, o código do veículo era armazenado em um transponder que era instalado em cada veículo. Quando o veículo passava por alguns pontos de controle da rodovia, unidades de leitura identificavam a sua presença e realizavam a leitura do seu código, presente no transponder. Muitos sistema AVI eram equipados com um sistema de captura de vídeo, aumentando o seu custo. Com o aumento considerável de veículos, a produção e manutenção em larga escala desses sistemas passou a se tornar extremamente custosa. Com a evolução das técnicas de visão computacional, tornou-se possível a identificação de veículos pela leitura de suas placas através de câmeras de monitoramento, diminuindo o custo para implantação desse tipo de sistema. Na aplicação ANPR desenvolvida existem três etapas entre a inclusão da imagem de um carro até a extração do caracter. A primeira consiste na localização da Placa. A segunda consiste num pré-processamento da placa, para binarizar a imagem e remover ruédos. E a terceira etapa consiste em aplicar uma função de OCR a fim de identificar os caracteres da placa. 4.1 Localização da Placa O processo de localização da placa consiste em definir uma região (normalmente um retângulo com a orientação da imagem, mas também pode ser um retângulo rotacionado de modo a se ajustar otimamente a placa) que contenha a imagem. Quanto melhor for o ajuste entre o retângulo e a placa, melhor será o processo de reconhecimento dessa. Para gerar este retângulo, neste trabalho, aplicou-se duas etapas. Na
59 CAPÍTULO 4. ANPR 60 primeira aplica-se um corte vertical definindo o intervalo de linhas que inclua a placa. Essa região foi denominada de Band. A segunda etapa é semelhante. Realiza-se um corte horizontal no band definindo a região que contém a placa, denominada de Plate. A Figura X mostra essas duas etapas. Figura X: (a) Fotografia de um carro; (b) band; (c) plate. O método de localização do Band inicia-se com um pré-processamento na imagem do carro. Esse pré-processamento consiste em aplicar um filtro de detecção de arestas verticais (filtro de sobel - vertical) em uma imagem em escala de cinza. Esse processo é mostrado na Figura X. Figura X: (a) Fotografia de um carro; (b) imagem convertida para escala de cinza; (c) imagem filtrada por Sobel-Vertical. Após o pré-processamento aplica-se uma projeção vertical. Essa projeção consiste em somar a itensidade de cor dos pixels da imagem filtrada linha a linha. Matematicamente, pode-se definir a projeção vertical como uma função pv : 0,..., h 1 N onde pv(i) = w 1 j=0 I(i, j) sendo I : [0, w] [0, h] 0, 1,..., 255] a função de intensidade de luz da imagem pré-processada cuja largura é w e altura é h. A figura X mostra o exemplo de uma projeção vertical de uma imagem de um carro. Figura X: (a) Imagem do carro; (b) pré-processamento (c) projeção vertical Analogamente, no processo de detecção do plate aplica-se um pré-processamento, que difere-se do pré-processamento do band somente no fato que o filtro de detecção de arestas usado é o filtro de sobel - horizontal. No resultado do pré-processamento aplica-se uma projeção horizontal. Essa projeção é analoga a projeção vertical. Somase, coluna a coluna, as intensidades de cor de cada pixel. Matematicamente essa é dada pela função ph : 0,..., w 1 N onde pw(j) = h 1 i=0 I(i, j). A figura X mostra o exemplo de uma projeção horizontal de uma imagem de um band. Figura X: (a) Imagem do band; (b) pré-processamento (c) projeção horizontal Normalmente o máximo global da projeção vertical está na região que contém a
60 CAPÍTULO 4. ANPR 61 placa. Isso se deve ao fato que em uma imagem de carro filtrada por Sobel-Vertical, normalmente, a região da placa é a região que contém mais arestas, e portanto essa é a região que contém o máximo global da função. Sendo essa uma função discreta, o processo de deteção de máximo global pode ser determinado por inspeção, sem grandes custos computacionais. A esse valor de máximo global, denominaremos de pico. Para definir o band é necessário encontrar a linha inicial e a linha final da imagem do carro que o determinarão. Para tal é necessário definir uma região próximo ao pico. A abordagem utilizada nesse projeto para definir essa região divide-se em duas etapas. Na primeira, aplica-se uma suavização na projeção vertical. Para isso aplica-se um processo de convolução na imagem da função projeção. Essa convolução calcula a média de valores em uma determinada vizinhança. Após isso, na segunda etapa aplica-se uma função threshold, que consiste em, dado um valor x que nesse caso é a média dos valores da imagem da projeção, para cada elemento da imagem da projeção verifica se este é menor que x: caso seja, seu valor é zerado. Após essa etapa, tem-se uma função cuja imagem está dividida em intervalos não nulos. Normalmente a placa está no intervalo que contém o pico. Logo, basta pegar o índice inicial e o final que definem esse intervalo e considerá-los como as linhas inicial e final, respectivamente, usadas para o corte do band. A Figura X mostra o processo de projeção para determinar o band. FiguraX: (a) Imagem do carro; (b) pre-processamento; (c) projeção vertical; (d) projeção suavizada; (e) threshold; (f) band. O processo de detecção do plate é semelhante. Aplica-se a projeção horizontal na imagem do band pré-processada, como dito anteriormente. Após essa etapa, aplica-se as duas etapas de processamento na projeção, assim como feito na projeção vertical, o que resultará em uma função cuja imagem estará dividida em intervalos não nulos. Normalmente a placa está no intervalo de maior comprimento. Como dito ao longo do texto, esse processo não é determinístico. Ele basea-se na
61 CAPÍTULO 4. ANPR 62 alta probabilidade de acerto verificada empiricamente. Porém, pode-se adotar algumas técnicas caso o band adotado não seja o que contenha o pico. Isso pode acontecer quando alguma outra região da imagem que contenha o carro contenha algum objeto com riqueza de detalhes, ou haja excesso de ruídos concentrado em uma região. Nessas possibilidades haverá região de alta frequência, além da região da placa. No caso do band podemos ordenar os intervalos obtidos na etapa final após a projeção. Essa ordenação basea-se em picos locais (picos nos intervalos). Então os intervalos são organizados decrescentemente baseado nos picos locais. Vale destacar que o conjunto dos picos locais não é o conjunto de máximos locais, pois em um intervalo podem existir mais de um máximo local. Com essa ordenação, continua-se o processo a partir do primeiro intervalo. Caso no fim do processo não encontre nenhuma placa, o processo com o band é feito na segunda posição. Analogamente o plate pode não estar no intervalo de maior comprimento. Dessa forma realiza-se uma ordenação decrescente baseada no tamanho dos intervalos. Outra alternativa é utilizar algum método para estimar a probabilidade de haver uma placa no band e no plate. Um método que pode ser utilizado é a Transforada de Hough e verificar se existe um quadrilátero na região determinada pelo band ou plate. Mais uma vez, esse é um método probabilístico. Porém, vale destacar que a taxa de eficiência do sistema ANPR implementado é satisfatória. 4.2 Pré-processamento da placa Normalmente a imagem da placa contém ruídos ou está em uma resolução baixa. Esses fatores costumam baixar a taxa de acerto do reconhecimento dos caracteres (OCR). Para melhorar a qualidade da imagem, aumentando a taxa de acerto do reconhecimento de caracteres no sistema ANPR desenvolvido, adotou-se um processo dividido em três etapas. Na primeira etapa, converte-se a imagem para escala de cinza. Na segunda extrai-se o ruído através de um filtro de convolução cujo núcleo
62 CAPÍTULO 4. ANPR 63 basea-se na mediana, descrito no capítulo de processamento de imagens. Por fim aplica-se um threshold, Seção??. Um possível valor do limiar é 128, mas este pode ser alterado caso insira-se alguma outra etapa intermediária. Uma etapa que pode ser utilizada é aplicar um filtro que realce arestas. Dessa forma, após o pré-processamento, obtém-se uma imagem binária da placa que servirá de entrada para a próxima etapa, a de reconhecimento de caracter. 4.3 OCR O toolkit Horus disponibiliza diversos algoritmos para implementação de cada uma das etapas que constituem um sistema OCR, Seção??. Os algoritmos necessários para a construção das etapas de pré-processamento e segmentação dos caracretes estão disponíveis no módulo de processamento de imagens do Horus, alguns desses algoritmos são: detecção de arestas, binarização, suavização, remoção de ruídos, projeções, entre diversos outros algoritmos. Após a segmentação dos caracteres, extrai-se um vetor númerico (vetor de características) de cada um desses. Tal vetor é utilizado como padrão de entrada para uma rede neural no processo de reconhecimento. O processo de extração de características é um dos mais importantes em um sistema OCR, a qualidade dessa etapa influencia no resultado de todo o sistema. Portanto, a escolha de quais características serão utilizadas como padrão de entrada no processo de reconhecimento é extremamente importante. A construção do vetor de características pode ser feito utilizando os diversos algoritmos implementados no módulo de extração de características do Horus, Seção??, podem ser: histograma de arestas por regiões, terminação de linha, loops, entre outros. Por último, é realizado a etapa de reconhecimento do vetor de características, que finalmente deverá apontar o caractere correto. Uma abordagem usual para a contrução da etapa de reconhecimento consiste na utilização de redes neurais artificiais, Seção??. O Horus disponibiliza algoritmos para criação e uti-
63 CAPÍTULO 4. ANPR 64 lização de redes neurais através de uma API Open Souce chamada Fast Artificial Neural Network(FANN). O toolkit Horus atualmente não possui um sistema OCR próprio, essa funcionalidade será implementada em um trabalho futuro. Porém, esse toolkit disponibiliza funcionalidades de um sistema OCR através da utilização de um OCR Open Source chamado Tesseract. 4.4 Aplicação Web Durante o desenvolvimento deste trabalho, mais especificamente do sistema ANPR, foi desenvolvido um sistema web cujo objetivo é: através do upload de uma imagem de um carro, o sistema realizará o ANPR nessa imagem e retornará todas as informações da placa contidas em seu banco de dados. Esse sistema foi construído utilizando um framework web de altíssimo nível chamado Django. Esse framework é escrito na linguagem de programação Python e é baseado no padrão arquitetural Model View and Controller(MVC), [19]. Falar mais sobre o sistema 4.5 Aplicações do Horus O sistema de ANPR desenvolvido nesse projeto, e abordado nesse capítulo foi desenvolvido utilizando recursos de visão computacional, processamento de imagem e de matemática disponíveis no toolkit horus. As funcionalidades de localização de uma placa e reconhecimento de caracterer também são utilizadas em uma outra aplicação desenvolvida utilizando o horus ao longo desse projeto. Essa aplicação foi denominada de Ariadnes e consiste em um sistema de mapeamento e navegação autônoma em ambientes virtuais. Nele um agente inteligente, que simula um robô real, se
64 CAPÍTULO 4. ANPR 65 desloca em um ambiente. Para se orientar o agente realiza a leitura de placas colocadas no ambiente. Para que esse seja capaz de entender o conteúdo da placa ele captura uma imagem que contenha a placa, localiza a placa nessa imagem e reconhece os caracteres. Esse processe é analogo ao desenvolvido no sistema ANPR abordado nesse capítulo. Uma melhor descrição do Ariadnes será feita no capítulo 8.
65 Capítulo 5 Aplicacoes envolvendo agentes inteligentes As aplicações desenvolvidas nesse projeto tem o objetivo de validar e demonstrar a utilidade do toolkit Horus no desenvolvimento de aplicações que envolvem agentes inteligentes, visão computacional, mapeamento automático de ambientes e matemática. São três as aplicações desenvolvidas no projeto como um todo, porém, neste trabalho serão detalhadas somente as aplicações que possuem aspectos de visão computacional. As aplicações desenvolvidas foram: um sistema de reconhecimento automático de placas de automóveis denominado ANPR, descrito no Capítulo 4, um simulador para mapeamento automático de ambientes desconhecidos através da técnica SLAM, chamado Teseu e um simulador de movimentação autônoma em ambientes desconhecidos, utilizando visão computacional, denominado Ariadnes. Os simuladores Teseu e Ariadnes serão detalhados nas próximas seções. 66
66 CAPÍTULO 5. APLICACOES ENVOLVENDO AGENTES INTELIGENTES Teseu 5.2 Ariadnes Ariadnes é um sistema que simula a movimentação autônoma de um agente inteligente em um ambiente. Nele é possivel simular o comportamento de um robô real no que tange mapeamento e navegação. Inicialmente, o agente tem o objetivo de chegar a uma determinada sala no ambiente utilizando técnicas de localização e mapeamento de ambientes e de visão computacional. O simulador Ariadnes é composto por quatro partes principais, onde duas delas utilizam o toolkit Horus. A Figura 5.1 apresenta a arquitetura conceitual do simulador Ariadnes com seus principais componentes. Figura 5.1: Arquitetura conceitual do simulador Ariadnes. As principais partes do simulador Ariadnes são: ambiente, engine 3D, agentes e dispositivos. O ambiente, nesse simulador, foi construído utilizando o modelador
67 CAPÍTULO 5. APLICACOES ENVOLVENDO AGENTES INTELIGENTES 68 Blender3D. Esse ambiente é composto basicamente de diversos cômodos interligados por corredores, em alguns pontos desse ambiente existem placas informativas cujo objetivo é orientar o agente durante o mapeamento, como mostra a Figura A engine 3D utilizada no controle do ambiente e do agente foi o Panda3D. Por último, agentes e dispositivos são extensões de abstrações fornecidas no módulo Core do Horus para implementação de tais partes. O agente configurado com dispositivos emissores de lasers é mostrado na Figura 5.2. Figura 5.2: Agente configurado com dispositivos de lasers. Inicialmente, o agente é configurado com os comportamentos de Navegação, Mapeamento, Localização e Leitura de placas. Após a configuração, o agente é inserido em um ambiente totalmente desconhecido com a missão de chegar a uma sala específica. Na Figura 5.3 é apresentado a vista de cima do ambiente utilizado no Ariadnes. Após o estabelecimento da missão, o agente inicia o mapeamento do ambiente utilizando os algoritmos do módulo Mapeamento do Horus para construir uma representação do ambiente em forma de grafo. A máquina de estados utilizada no Ariadnes é composta por: mapeamento, navegação,
68 CAPÍTULO 5. APLICACOES ENVOLVENDO AGENTES INTELIGENTES 69 Figura 5.3: Ambiente utilizado no Ariadnes reconhecimento de objetos e execução. O agente tem por objetivo partir de um ponto inicial para um ponto final, para isso, ele tenta definir uma rota. Nesse momento, o agente se encontra no estado de navegação. Caso ele não consiga definir uma rota, o estado desse agente muda para mapeamento. Nesse estado, ele explorará o ambiente até que encontre uma placa ou algum ponto já mapeado. Caso encontre a placa, seu estado mudará para reconhecimento de objetos. Nesse estado, caso a placa seja a identificação do cômodo destino, seu estado muda para execução. Caso contrário, o agente muda para o estado de navegação ou retorna para o estado de reconhecimento de objetos, caso a placa identificada seja informativa. No estado de execução, uma tarefa especifica, previamente determinada, é realizada. No estado de mapeamento, ao encontrar um ponto já mapeado, ele verifica se agora é possível traçar uma rota até seu objetivo. Caso não seja possível, o agente continua no estado de mapeamento. O agente é capaz de estimar sua posição local para se localizar globalmente e recuperar-se de possíveis erros de localização. A proposta utilizada para realização das etapas de mapeamento e localização é a técnica SLAM, descrita na Seção Durante o mapeamento, uma câmera é utilizada pelo agente para localizar as placas informativas presentes no ambiente. Quando este depara-se com uma dessas placas, interrompe o processo de mapeamento e utiliza algoritmos de visão para interpretar o