Acelerando Algoritmos de Baixo Nível em Visão Robótica com Hardware Reconfigurável



Documentos relacionados
Ao longo do presente capítulo será apresentada uma descrição introdutória da tecnologia FPGA e dos módulos básicos que a constitui.

1. CAPÍTULO COMPUTADORES

Sistemas Digitais. Módulo 15 Prof. Celso PLD - DISPOSITIVOS LÓGICOS PROGRAMÁVEIS

Hardware (Nível 0) Organização. Interface de Máquina (IM) Interface Interna de Microprogramação (IIMP)

3. Arquitetura Básica do Computador

Curso Superior de Sistemas de Telecomunicações Unidade São José. Disciplina: Síntese de Sistemas de Telecomunicações 7º Fase

1.1. Organização de um Sistema Computacional

Arquitetura de Computadores Paralelismo, CISC X RISC, Interpretação X Tradução, Caminho de dados

Introdução ao Desenvolvimento de Circuitos Digitais Prof. Rômulo Calado Pantaleão Camara. Carga Horária: 2h/60h

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

Disciplina: Introdução à Informática Profª Érica Barcelos

O hardware é a parte física do computador, como o processador, memória, placamãe, entre outras. Figura 2.1 Sistema Computacional Hardware

ENGENHARIA DE SOFTWARE I

Organização e Arquitetura de Computadores I. de Computadores

Itinerários de Ônibus Relatório Final

PROCESSO DE DESENVOLVIMENTO DE SOFTWARE. Modelos de Processo de Desenvolvimento de Software

Capítulo 3. Avaliação de Desempenho. 3.1 Definição de Desempenho

Engenharia de Software

UNIVERSIDADE FEDERAL DO PARANÁ UFPR Bacharelado em Ciência da Computação

Engenharia de Sistemas Computacionais

3/9/2010. Ligação da UCP com o barramento do. sistema. As funções básicas dos registradores nos permitem classificá-los em duas categorias:

Introdução à Computação

Dadas a base e a altura de um triangulo, determinar sua área.

PROGRAMAÇÃO EM VHDL DE CIRCUITOS LÓGICOS PARA IMPLEMENTAÇÃO EM FPGA RELATÓRIO FINAL DE PROJETO DE INICIAÇÃO CIENTÍFICA

1. NÍVEL CONVENCIONAL DE MÁQUINA

Na medida em que se cria um produto, o sistema de software, que será usado e mantido, nos aproximamos da engenharia.

ULA Sinais de Controle enviados pela UC

BARRAMENTO DO SISTEMA

15 Computador, projeto e manufatura

3. O NIVEL DA LINGUAGEM DE MONTAGEM

ÁREA: CV ( ) CHSA ( ) ECET ( )

Algoritmos: Lógica para desenvolvimento de programação de computadores. Autor: José Augusto Manzano. Capítulo 1 Abordagem Contextual

O processador é composto por: Unidade de controlo - Interpreta as instruções armazenadas; - Dá comandos a todos os elementos do sistema.

11/3/2009. Software. Sistemas de Informação. Software. Software. A Construção de um programa de computador. A Construção de um programa de computador

Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO)

Orientação a Objetos

INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO

UNIVERSIDADE FEDERAL DO PARANÁ UFPR Bacharelado em Ciência da Computação

Capacidade = 512 x 300 x x 2 x 5 = ,72 GB

MRP II. Planejamento e Controle da Produção 3 professor Muris Lage Junior

Figura 1 - O computador

Sistema de Computação

ENGENHARIA DE SOFTWARE

Sistemas Operacionais

Análise e Projeto de Software

Introdução. Hardware X Software. Corpo Humano Parte Física. Capacidade de utilizar o corpo em atividades especificas explorando seus componentes

4 Segmentação Algoritmo proposto

Disciplina: Processamento Digital de Sinais (ENG577) Aula 05 Parte 2: Dispositivos de Hardware Programável Prof.: Eduardo Simas

A lógica de programação ajuda a facilitar o desenvolvimento dos futuros programas que você desenvolverá.

Aprenda as melhores práticas para construir um completo sistema de teste automatizado

O que é um programa? Programa é uma lista de instruções que descrevem uma tarefa a ser realizada pelo computador.

Organização de Computadores 1

1

Análise de Sistemas. Visão Geral: Orientação a Objetos. Prof. José Honorato Ferreira Nunes honorato.nunes@bonfim.ifbaiano.edu.br

Prof. Esp. Lucas Cruz

Processos de Desenvolvimento de Software

Arquitetura de Rede de Computadores

CHECK - LIST - ISO 9001:2000

Introdução à Organização e Arquitetura de Computadores. Prof. Leonardo Barreto Campos 1

Para construção dos modelos físicos, será estudado o modelo Relacional como originalmente proposto por Codd.

Notas da Aula 15 - Fundamentos de Sistemas Operacionais

Air-Fi - sistema sem fio Sinta-se confortável com a confiança e o desempenho líderes do setor.

1 Introdução Motivação

Programação Estruturada e Orientada a Objetos. Fundamentos Orientação a Objetos

Solitaire Interglobal

Dispositivos Lógicos Programáveis

ORGANIZAÇÃO DE COMPUTADORES MÓDULO 8

Intranets. FERNANDO ALBUQUERQUE Departamento de Ciência da Computação Universidade de Brasília 1.INTRODUÇÃO

Um Driver NDIS Para Interceptação de Datagramas IP

BRAlarmExpert. Software para Gerenciamento de Alarmes. BENEFÍCIOS obtidos com a utilização do BRAlarmExpert:

SISTEMAS OPERACIONAIS CAPÍTULO 3 CONCORRÊNCIA

Admistração de Redes de Computadores (ARC)

Engenharia de Software: conceitos e aplicações. Prof. Tiago Eugenio de Melo, MSc tiagodemelo@gmail.com

Sua indústria. Seu show. Seu Futuro

5 Mecanismo de seleção de componentes

Memória Cache. Prof. Leonardo Barreto Campos 1

Introdução aos Computadores

Projeto de Sistemas I

10 DICAS DE TECNOLOGIA PARA AUMENTAR SUA PRODUTIVIDADE NO TRABALHO

FACULDADE PITÁGORAS DISCIPLINA: ARQUITETURA DE COMPUTADORES

Introdução à Engenharia de Software

Automação de Locais Distantes

Memórias Prof. Galvez Gonçalves

Automação de Bancada Pneumática

O modelo do computador

Feature-Driven Development

O CONCEITO DE TDD NO DESENVOLVIMENTO DE SOFTWARE

A Unidade Central de Processamento é a responsável pelo processamento e execução de programas armazenados na MP.

GUIA DE LABORATÓRIO DE SISTEMAS DIGITAIS PARA O CURSO DE ENGENHARIA DE CONTROLE E AUTOMAÇÃO

UNIVERSIDADE FEDERAL DE SANTA CATARINA

MEMÓRIA. 0 e 1 únicos elementos do sistema de numeração de base 2

Tópicos em Engenharia de Software (Optativa III) AULA 2. Prof. Andrêza Leite (81 )

Paralelismo. Computadores de alto-desempenho são utilizados em diversas áreas:

Implementação de um módulo Ethernet 10/100Mbps com interface Avalon para o processador Nios II da Altera

Entendendo como funciona o NAT

Arquitetura dos Sistemas de Informação Distribuídos

Algoritmos. Cláudio Barbosa

ESTUDO COMPARATIVO ENTRE AS PLATAFORMAS ARDUINO E PIC

Componentes de um computador típico

Transcrição:

UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE CENTRO DE TECNOLOGIA PROGRAMA DE PÓS-GRADUAÇÃO EM ENGENHARIA ELÉTRICA Acelerando Algoritmos de Baixo Nível em Visão Robótica com Hardware Reconfigurável Gianna Rodrigues de Araújo Orientador: Prof. Dr. Luiz Marcos Garcia Gonçalves Dissertação de Mestrado apresentada ao Programa de Pós-Graduação em Engenharia Elétrica da UFRN (área de concentração: Engenharia de Computação) como parte dos requisitos para obtenção do título de Mestre em Ciências. Número de ordem PPgEE: M298 Natal, RN, fevereiro de 2011

Acelerando Algoritmos de Baixo Nível em Visão Robótica com Hardware Reconfigurável Gianna Rodrigues de Araújo Dissertação de Mestrado aprovada em 18 de fevereiro de 2011 pela banca examinadora composta pelos seguintes membros: Prof. Dr. Luiz Marcos Garcia Gonçalves (orientador)........... DCA/UFRN Prof a. Dr a. Raquel Esperanza Patiño Escarcina.................. UCSP, Perú Prof. Dr. José Alberto Nicolau de Oliveira..................... DEE/UFRN Prof. Dr. Rummenigge Rudson Dantas......................... ECT/UFRN

Aos meus pais e a minha família NatalNet.

Agradecimentos Ao meu orientador, Prof. Dr. Luiz Marcos Garcia Gonçalves, sou grata pela orientação. Ao Prof. Dr. José Alberto Nicolau de Oliveira, pelo apoio e orientação. Aos colegas Julio Cesar e Renato Gardiman pelas sugestões para minha dissertação. Aos demais colegas de pós-graduação, pelas críticas e sugestões. À minha família, amigos e namorado pelo apoio durante esta jornada. Ao CNPq, pelo apoio financeiro.

Resumo Um desafio que ainda resta no campo da robótica é como fazer um robô reagir em tempo real a estímulos visuais. Técnicas tradicionais de visão robótica usadas para resolver este problema ainda são muito caras tomando muito tempo quando se usa processadores convencionais. Algoritmos simples com filtragem em imagens ou operações de morfologia matemática podem tomar muito tempo de execução. Pesquisadores têm implementado algoritmos de processamento de imagens em dispositivos de hardware com alto grau de paralelismo, visando diminuir o tempo de processamento nos algoritmos, com bons resultados. Usando técnicas de processamento de imagens implementadas em hardware e um sistema orientado a plataforma que usa o processador Nios II, propomos um método que usa processamento em hardware e programação baseada a eventos, para simplificar sistemas baseados em visão, enquanto que, ao mesmo tempo, conseguimos acelerar algumas partes dos algoritmos usados.

Abstract A challenge that remains in the robotics field is how to make a robot to react in real time to visual stimulus. Traditional computer vision algorithms used to overcome this problem are still very expensive taking too long when using common computer processors. Very simple algorithms like image filtering or even mathematical morphology operations may take too long. Researchers have implemented image processing algorithms in high parallelism hardware devices in order to cut down the time spent in the algorithms processing, with good results. By using hardware implemented image processing techniques and a platform oriented system that uses the Nios II Processor we propose an approach that uses the hardware processing and event based programming to simplify the vision based systems while at the same time accelerating some parts of the used algorithms.

Sumário Sumário Lista de Figuras Lista de Tabelas i iii iv 1 Introdução 1 1.1 Definição do problema........................... 2 1.2 Principais Contribuições.......................... 3 1.3 Aplicações.................................. 4 Lista de Símbolos e Abreviaturas 1 2 Estado da Arte 5 3 Embasamento teórico 8 3.1 Dispositivos lógicos Programáveis..................... 8 3.1.1 Processadores Digitais de Sinais.................. 9 3.1.2 Dispositivos Lógicos Complexos Programáveis.......... 9 3.1.3 A Tecnologia FPGA - Field Programable Gate Array....... 10 3.2 Programação para FPGA.......................... 10 3.2.1 Verilog............................... 11 3.2.2 VHDL............................... 12 3.3 Estudo de Caso: Visão Computacional................... 13 3.3.1 Algoritmos de Visão Computacional baseado em eventos..... 14 3.3.2 Correlação e Filtragem....................... 16 3.3.3 Transformada de Hough...................... 17 3.3.4 Filtro Média............................ 18 3.3.5 Filtro de Sobel........................... 19 3.4 Sistema orientado a plataforma....................... 19 4 Implementações 21 4.1 A Tecnologia Field Programable Gate Array................ 22 4.2 Simulink................................... 24 4.3 Incorporando dispositivos com o SOPC.................. 24 4.4 Quartus II.................................. 25 4.5 NIOS IDE II................................. 25 i

5 Resultados 31 5.1 Filtro Genérico............................... 31 5.2 Mapa de Atenção.............................. 32 5.2.1 Filtro de Sobel........................... 33 5.2.2 Filtro Média............................ 33 5.2.3 Filtro Gaussiano.......................... 34 5.2.4 Filtro Laplaciano do Gaussiano.................. 35 5.2.5 Integração dos resultados...................... 35 6 Conclusão 37 6.1 Trabalhos futuros.............................. 38 Referências bibliográficas 39

Lista de Figuras 3.1 Estrutura comum dos sistemas de Visão Computacional.......... 13 3.2 Sistema de tratamento de evento do teclado................ 15 3.3 Módulo de visão modificado........................ 16 3.4 Resultado da adição do hardware de visão baseado em eventos...... 17 3.5 Arquitetura comum a sistemas orientados a plataforma.......... 20 4.1 Arquitetura da plataforma desenvolvida.................. 21 4.2 Vista superior da DE2............................ 22 4.3 Esquema da placa FPGA DE2 (diagrama de blocos)............ 23 4.4 Projeto do Simulink............................. 26 4.5 Projeto do NMAC (numerical multiplier and accumulator)........ 27 4.6 Projeto do Mapa Atencional........................ 28 4.7 SOPC.................................... 29 4.8 quartus................................... 30 5.1 FPGA.................................... 32 5.2 Imagem original, Imagem obtida por filtro puramente em software e Imagem obtida pelo dispositivo........................ 33 5.3 Imagem original, Imagem obtida por filtro puramente em software e Imagem obtida pelo dispositivo......................... 34 5.4 Imagem original, Imagem obtida por filtro puramente em software e Imagem obtida pelo dispositivo......................... 35 5.5 Imagem original, Imagem obtida por filtro puramente em software e Imagem obtida pelo dispositivo......................... 36 iii

Lista de Tabelas 5.1 Comparação dos resultados usando hardware e puramente em software.. 31 iv

Capítulo 1 Introdução Visão Computacional é uma das áreas da pesquisa científica que cresceu muito nos últimos anos. As técnicas de Visão Computacional estão presentes nos mais diversos campos de aplicação, tais como robótica, automação industrial, sistemas de segurança, cartografia, realidade virtual, e animação, entre outros, e até em campos não tão convencionais tais como medicina, televisão, teatro e dança telemática. Dentro deste universo, é grande o número de aplicações que necessitam de resposta do sistema em tempo real, como exemplo temos as aplicações em visão robótica e dança telemática. Em geral, algoritmos de Visão Computacional são computacionalmente custosos, além de sua alta complexidade, exigindo geralmente uso de grande quantidade de memória, além do tempo substancial de processamento, o que torna difícil, a obtenção de uma resposta em tempo real, para algumas aplicações. Por exemplo, um desafio que ainda permanece nas pesquisas em visão robótica é como construir um sistema que permita a um robô reagir em tempo real a estímulos visuais providos pelo seu ambiente. Um dos principais problemas está relacionado à utilização de algoritmos de visão por computador tradicionais e sua implementação em processadores convencionais, o que os torna caros computacionalmente. Ou seja, operações com alto grau de paralelismo, tidas como de mais baixo nível necessárias nas etapas iniciais desses algoritmos, tais como filtragem de imagens implementada geralmente pelo operador de convolução, ou mesmo operações mais simples de processamento de imagem, tal como o uso de operadores de morfologia matemática, podem demorar muito tempo em um processador seqüencial, conseqüentemente atrasando outras etapas do fluxo de processamento do sistema. Uma solução seria a utilização de imagens pequenas para compensar o tempo alto gasto pelas técnicas convencionais de processamento de imagem, mas isso pode ser inútil para algumas aplicações, como por exemplo, de reconhecimento de padrões onde detalhes podem ser cruciais. A fim de reduzir a maior parte do tempo gasto nos algoritmos de processamento de imagem, pesquisadores os têm implementado em arquiteturas de hardware específico, que possuem dispositivos de hardware com alto grau de paralelismo, obtendo bons resultados Exemplos de tais implementações podem ser vistos na Arquitetura Sonic [Haynes et al. 2000], no Multiplicador de matriz em Processamento de vídeo [Haynes & Cheung 1998] e alguns outros trabalhos que serão discutidas mais adiante neste documento. Apesar de prover respostas em tempo real, essas arquiteturas são conhecidas por terem um valor

CAPÍTULO 1. INTRODUÇÃO 2 comercial que as torna inviável quando o quesito principal é minimizar o custo monetário do sistema. Um exemplo também monetariamente caro encontra-se no uso de placas gráficas gráficas específicas que permitem sua programação em linguagens como CUDA, mais conhecidas como Unidades de Processamento Gráfico (do Inglês Graphics Programming Unity - GPU) [Pharr & Fernando 2005]. Placas do tipo GPU estão sendo cada vez mais utilizadas até mesmo na execução de outras tarefas que não sejam específicas da área de processamento gráfico, mas com alto grau de complexidade, tal como execução massiva de cálculos, problemas de otimização, enter outras. Porém, convém ressaltar novamente o custo de tais placas, na casa dos milhares de dólares, para um bom desempenho. 1.1 Definição do problema Atualmente, é possível encontrar pesquisas das mais diversas em visão robótica, voltadas a aplicações como por exemplo o auxilio à educação [Barrios-Aranibar et al. 2006] ou o mapeamento de áreas [de et al. 2010, Herinque et al. 2009]. Em muitas dessas aplicações, a tomada de decisão a partir das respostas obtidas pelo sistema de visão computacional dos robôs é um fator primordial. Como visto acima, geralmente, os algoritmos de visão computacionais são custosos computacionalmente, por possuírem uma alta complexidade, ocupando assim muito tempo do processador. Isto aliado à espera de resultados para as tomadas de decisões constituem um dos problemas a ser resolvido para fazer com que robôs respondam a estímulos visuais em tempo real. Ou seja, considerando que o sistema executa outras tarefas, estas serão afetadas com um eventual retardo, diminuindo os rendimentos do sistema como um todo. Em face da complexidade e morosidade, vários estudos vêm sendo realizados visando otimização de algoritmos de visão computacional. Alguams dessas pesquisas verificam a eficácia do desenvolvimento de algoritmos de Visão Computacional em hardware, utilizando uma implementação mista (hardware / software) [de Souza & Bianchi 2002]. Em nosso contexto, uma implementação mista é aquela que combina o poder do processamento direto em hardware dedicado com a facilidade de abstração provida pelo nível de software. Ou seja, o que for passível de implemenmtação em hardware sendo controlado dinamicamente pelo software. Uma vez que é complicado mudar o hardware, o máximo possível de flexibilidade deve ser provido em software, sempre tentando minimizar esta flexibilização. Ainda existe um forte nicho de pesquisa quando nos referimos a implementações mistas, uma vez que não existe, ainda, uma definição precisa do que seja esse paradigma de implementação. Estudos que vão desde a utilização de portas de comunicação (paralela ou serial) para acesso externo de computadores até soluções utilizando processadores embarcados com a tecnologia FPGA (Field Programmable Gate Array) tentam resolver o problema com implementações totalmente disjuntas. Alem do problema na definição em si das implementações mistas, ainda existe a forte aversão à utilização de hardware reprogramável pela dificuldade de integração dos mesmos com as linguagens de propósito gerais. Muitos estudos e documentações precisam ser feitos nessas áreas para que novos pesquisadores possam ingressar nessa problemá-

CAPÍTULO 1. INTRODUÇÃO 3 tica sem ter tantos problemas com a configuração e utilização dos artefatos e ferramentas inerentes a essa área. 1.2 Principais Contribuições A contribuição do presente trabalho é o desenvolvimento de um sistema orientado a plataforma usando FPGA no qual agregamos dispositivos que são algoritmos implementados usando programação mista. A idéia é simplificar um sistema de visão robótica tomado como estudo de caso e, ao mesmo tempo, acelerar algumas partes dos algoritmos utilizados. A utilização de uma implementação mista faz com que os algoritmos mais custosos de visão computacional tenham uma significativa diminuição de tempo de processamento, mantendo a mesma precisão. Com isto, esperamos atender os requisitos de algumas aplicações que necessitam de uma resposta em tempo real. Desenvolvemos um conjunto de artefatos visando otimizar alguns algoritmos de Visão Computacional tidos como de baixo nível (etapas iniciais do processamento visual) e, com isso, pudemos contribuir para que outros projetos do Laboratório Natalnet possam ser efetivados. A seguir, destacamos nossas comtribuições mais específicas. Idealizamos e formalizamos a arquitetura que permitiu a implementação mista (software/hardware) de algoritmos de Visão Computacional de baixo nível. Provemos uma plataforma visando integração dos dispositivos (algoritmos e técnicas) desenvolvidos. Cada novo algoritmo pode ser considerado como um novo dispositivo. Assim,etapas posteriores podem ser também implementadas usando este conceito e simplesmente acopladas à plataforma desenvolvida. Realizamos de testes de performance (tempo x precisão) na plataforma, para verificação de funcionamento em tempo real da arquitetura mista desenvolvida. Esses testes serviram de base para validação do modelo proposto e seus resultados foram publicados em veículos relevantes da nossa área. O número de pesquisadores na área de Sistemas Embarcados envolvendo hardware ainda é relativamente pequeno. Assim, com esse trabalho pudemos contribuir na área de pesquisa com o uso de hardware, dentro da UFRN, podendo esse conhecimento ser passado à frente para que outros pesquisadores possam enveredar nessa área. Resumidamente, como contribuições práticas, implementamos algoritmos de visão de baixo nível em hardware e realizamos comparações entre as implementações em software e em hardware. Ainda, comparamos principalmente o tempo de processamento das implementações puras e da implementação mistas, analisando o ganho computacional. Incorporamos os dispositivos desenvolvidos (algoritmos implementados) na plataforma. E, respaldando nossa idéia, conseguimos publicar os principais resultados do presente trabalho em congressos e conferências da área [de ARAÚJO et al. 2009, de ARAÚJO et al. 2010].

CAPÍTULO 1. INTRODUÇÃO 4 1.3 Aplicações O presente trabalho está relacionado diretamente a outros projetos do Laboratório Natalnet, sendo os algoritmos desenvolvidos deverão ser usados em projetos de monitoramento usando robôs, e de mapeamento interno e externo usando também robôs. Os robôs Galatéia(Pioneer), utilizada no projeto GTMV [Dantas et al. 2009] e o Helicóptero NatalGIS, utilizado no projeto de mesmo nome [Herinque et al. 2009], ambos em execução pelo laboratório NatalNet-DCA, podem ter parte do seu sistema de Visão Computacional embarcado e conseqüentemente otimizado. Com isso, o processamento ocioso pode ser usado para outras etapas ou atividades, mais conhecidas como técnicas de pay-load (técnicas que podem ser de processamento on board). Tendo em vista a necessidade de uma resposta mais rápida por parte dos sistemas e os problemas encontrados para conseguir isso, foi que surgiu a idéia de implementarmos algoritmos de Visão Computacional diretamente em dispositivos de hardware programável, no caso, usando FPGA. O uso de hardware dedicado torna possível a paralelização (real e também aparente) dos algoritmos, o que vem a diminuir a sua complexidade. O FPGA permite mais uma flexibilidade, devido à possibilidade de re-configuração. Também, possuem capacidade de processamento maior do que os processadores de sinais digitais (DSP - Digital Signal Processors) específicos e micro-controladores convencionais baseados em arquiteturas mais simples como micro-processadores e processadores ARM e outros. Ressaltamos que a nossa proposta pode ter um cunho mais geral, mas aqui foi desenvolvida com base em um estudo de caso visando encontrar uma solução para a aceleração de algoritmos de visão computacional, que são geralmente usados em aplicações robóticas, em tempo real. A idéia principal é usar o paralelismo, a flexibilidade e a estrutura simples do hardware como meios para reduzir o tempo de processamento. Propomos e desenvolvemos um sistema orientado a plataforma, em que dispositivos são desenvolvidos e alocados a uma plataforma, sendo usados apenas quando necessários. Estes dispositivos são implementações em hardware dos algoritmos de visão computacional.

Capítulo 2 Estado da Arte Embora tenha se estabelecido uma das área da pesquisa científica muito recentemente se comparada com outras áreas mais tradicionais, com apenas pouco mais de 3 décadas de existência, a área de Visão Computacional é bastante difundida atualmente, sendo as aplicações de suas técnicas e métodos bem diversificadas. Inúmeras pesquisas recentes podem ser encontradas visando o desenvolvimento de novos métodos e técnicas mas também são realizados trabalhos visando otimizar os algoritmos existentes. A busca por tornar os sistemas de visão menos custosos computacionalmente, ou seja, rápidos, e sem perder a qualidade dos dados são temas de muitas pesquisas no mundo todo. Alguns trabalhos explorando implementações em hardware podem ser encontradas na literatura [Haynes et al. 2000, Haynes & Cheung 1998, de Souza & Bianchi 2002, RILLO 1989, de Almeida Nobre 2009, Fredi 2001]. Aqui apresentamos os sistemas que tem um relacionamento mais direto com o nosso visando melhor entender nossa proposta. A arquitetura do sistema Sonic [Haynes et al. 2000] é complexa, permitindo ao usuário configurar o hardware em tempo real, oferecendo, por exemplo, melhor desempenho em filtragem de imagens através da implementação mais eficiente de multiplicadores e acumuladores (convolução) e outras operações. A abordagem é semelhante à nossa no sentido de que um sistema de hardware e/ou software é usado para acelerar o processamento de imagem digital. Porém, o trabalho não prevê um sistema como um todo, com etapas posteriores sendo processadas, como ocorre na área de visão computacional. Sua aplicação nesta área poderia ser viabilizada, tornando o processamento de imagem mais rápido e economizando tempo para outros métodos de processamento de imagem. No trabalho de Haynes [Haynes & Cheung 1998], é implementada uma solução de hardware apenas para acelerar a multiplicação de matrizes, o chamado "Multiplicador de Matriz de Processamento de Vídeo". A flexibilidade do multiplicador de matriz implementada pode tornar 25 vezes mais rápido que uma solução de software. Nas aplicações de visão robótica, a eficiência do sistema de visão computacional é fator decisivo. Um exemplo ocorre no futebol de robôs. Neste caso, numa visão genérica, o sistema geral é composto de um subsistema de visão (percepção), um subsistema de decisão (planejamento) e um subsistema que executa fisicamente (atuação) tarefas, ou seja, move os robôs no campo executando determinadas ações como chute, drible, e passe, entre outras. Neste caso, o subsistema de visão deve fornecer ao subsistema de decisão informação abstraída a partir de dados adquiridos de imagens que são base para o seu planejamento. Sendo assim, é desejável que a reposta do subsistema de visão computacional

CAPÍTULO 2. ESTADO DA ARTE 6 seja rápida, para que não afete o desempenho dos demais sistemas. Visando obter um melhor desempenho do sistema de visão computacional,o trabalho proposto por Souza e Bianchi [de Souza & Bianchi 2002] implementa técnicas de processamento de imagem em hardware, utilizando a linguagem de descrição de hardware VHDL. Basicamente, o objetivo principal do trabalho é acelerar a detecção da posição e orientação de objetos importantes no campo, tais como os robôs (colegas e oponentes) e a bola. No trabalho, eles implementam três módulos em hardware, o primeiro é responsável pela binarização da imagem, a partir de um valor limiar de cor. As regiões onde a cor está acima do limiar, é atribuído o valor 1 e as regiões abaixo do limiar é atribuído o valor 0. O segundo módulo é responsável pela extração de bordas da imagem, usando um algoritmo tradicional de detecção de arestas [RILLO 1989]. O terceiro e último módulo é responsável pela vetorização da imagem. Dada uma imagem binária com os contornos definidos, esse módulo determina as regiões da imagem que possuem contornos fechados. Com o uso de hardware, o sistema consegue disponibilizar os dados de saída, após passar pelos três módulos, em cerca de 1,54 ms. Os mesmos módulos, quando implementados em linguagem C e ambiente Linux, necessitam de 21,5 vezes mais tempo do que os implementados em hardware, uma vez que levaria 33ms para os dados estarem disponíveis na saída. A busca por padrões em um imagem é outra tarefa que possui alto custo computacional. Quando o padrão procurado não é invariante a determinadas características, esse custo se torna muito mais elevado. Diversas aplicações necessitam fazer uso da busca por padrões, principalmente em tarefas de vigilância e monitoramento, onde reconhecimento e identificação de objetos pontuais na cena devem ser características essenciais do sistemas. No trabalho de Pires [de Almeida Nobre 2009], é implementado um módulo baseado no método Ciratefi, recentemente proposto [Kim & Araújo 2007a, Kim & Araújo 2007b]. Basicamente, o método realiza uma busca na imagem por uma dada máscara, sendo invariante aos aspectos RSTBC (rotação, escala, translação, brilho e contraste, na tradução do inglês). O processamento ocorre pela aplicação de três filtros em cascata, Cifi, Rafi e Tefi. Os três filtros são invariantes a translação e vão excluindo, sucessivamente, os pixels não pertencentes a imagem da mascára (padrão procurado). O primeiro filtro, Cifi, é invariante a escala e calcula a provavél escala do pixels candidatos ao padrão. O segundo filtro, Rafi, tem como entradas os pixels resultantes do primeiro filtro e é invariante a rotação. Após sua aplicação, é calculado e atribuido para os pixels resultantes, o ângulo de rotação mais adequando. O terceiro filtro, Tefi, é invariante a brilho e contraste e tem como entrada os pixels resultantes do segundo filtro. Ele é o responsável por encontrar a posição mais provável da máscara na imagem dada. Neste trabalho, o filtro Cifi foi implementado em hardware. Com essa implementação em hardware, eles melhoram o tempo de 7 s para 1,367 ms, o que provê um desempenho excelente já que o tempo está abaixo do necessário para sistemas críticos de tempo real, conseguindo alta performance e baixo custo computacional. Em seu trabalho, Fredi [Fredi 2001] propõe uma metodologia de desenvolvimento de hardware e software utilizando soluções baseadas em FPGA s, linguagem C e DSPs para a aceleração de sistemas de visão computacional. Como estudo de caso, é desenvolvida uma solução para localização e reconhecimento de placas com formato retangulares. A parte do software está localizada em um hardware DSP orientada ao controle do hard-

CAPÍTULO 2. ESTADO DA ARTE 7 ware de uma placa FPGA. Sua metodologia divide o processamento de imagem em 4 etapas (entrada, pré-processamento, processamento e saída) que pode mudar dependendo da aplicação. A parte do pré-processamento é composta por filtragem da imagem, detecção de bordas e extração de formas (retangulares). Essa etapa é realizada utilizando hardware e software. A etapa de processamento da imagem é dividida em dois blocos, um para a extração de feições e outro para a etapa de classificação. A etapa de extrações de feições foi implementada em software pois a utilização de pontos flutuantes, não seria possivel por causa da capacidades das placas FPGAs utilizadas. Já a etapa de classificação foi feita em hadware, utilizando o paralelismo e permitido a obtenção de alta velocidade de processamento. A principal diferença com o nosso trabalho é que a proposta de Fredi é baseada em um sistemas dedicado em FPGA enquanto que o nosso usa uma arquitetura orientada à plataforma, o que facilitaria o adicionamente de novos componentes a nossa plataforma e nos dar uma maior flexibilidade.

Capítulo 3 Embasamento teórico Em uma análise mais genérica, nosso trabalho abrange as áreas de processamento digital de imagens, visão computacional e sistemas embarcados usando FPGA. Assim, um melhor entendimento sobre as tecnologias utilizadas no nosso trabalho bem como um embasamento teórico a respeito das ferramentas matemáticas necessárias para o bom entendimento do resto do trabalho se faz necessário. Uma dessas novas tecnologias refere-se aos dispositivos lógicos programáveis. Esses dispositivos, apesar de executarem a maior parte de suas operações em hardware, possuem algum elemento de software que permite realizar a sua programação permitindo execução de tarefas diferentes, no mesmo hardware, usando programações diferentes. Porém, convém ressaltar que, uma vez programados, não permitem alteração de sua programação durante a execução. Geralmente a memória de armazenamento do programa é pequena e sua linguagem de baixo nível não é trivial. Sendo assim, linguagens mais acessíveis surgem naturalmente para sua programação, derivando diversos tipos de hardware para esses dispositivos. Neste contexto, surgem os dispositivos de hardware reconfigurável, mais conhecidos como Field Programmable Gate Arrays (FPGA), que se tornam populares, pois permitem construção e configuração de componentes de hardware de forma declarativa, possibilitando desenvolvimento e estudo de diversas construções de hardware de forma barata e relativamente simples. Para programar tais dispositivos, a linguagem de descrição de hardware conhecida, como VHDL, é usada, que será detalhada mais à frente. Essa linguagem foi utilizada no desenvolvimento de grande parte de nossos componentes de hardware e foi escolhida por sua versatilidade e por possuir uma grande e ativa comunidade de desenvolvedores. Com ela, conseguimos implementar em hardware programável todas as ferramentas matemáticas utilizadas para nossas aplicações. Serão abordados principalmente algoritmos de visão computacional, porém alguns conceitos de processamento digital de imagens são necessários, endereçados a seguir. 3.1 Dispositivos lógicos Programáveis Um PLD 1 é, basicamente, um componente eletrônico utilizado para se construir circuitos digitais. O PLD foi originalmente projetado baseado em lógica configurável e 1 PLD - Programmable Logic Device

CAPÍTULO 3. EMBASAMENTO TEÓRICO 9 usando flip-flops, que são, unidades básicas de circuitos lógicos, ligados em conjunto com interconexão programável. Um PLD fornece funções específicas, incluindo dispositivo de interface, comunicação de dados, processamento de sinal, display de dados, calendário e operações básicas de controle, e quase todas as outras funções que um sistema de controle robusto deve ter. Assim, podemos entender o PLD como uma combinação de dispositivos logicos e de memória. A memória é usada para guardar o padrão que é dado ao chip durante a programação. Muitos dos métodos usados para armazenar dados no circuito integrado são adaptados para serem usados em PLDs. Isto Inclui: SRAM Células EPROM, EEPROM Memória Flash Dentro dos dipositivos lógicos programáveis abordamos os três tipos mais utilizados nos trabalhos relacionados com o nosso, são eles DSP, CPLD e os FPGA. 3.1.1 Processadores Digitais de Sinais Os DSP (Digital signal processors) são dispositivos construídos com microprocessadores especializados, especificamente projetados para processamento digital de sinais, desenvolvidos para serem utilizados em aplicações em tempo real. Os DSP também pode ser usados para executar cálculos de propósito geral, mas não são otimizados para essa função. Em comparação aos outros tipos de microcontroladores, os DSP possuem um maior poder de processamento. Tanto podem ser programados usando liguagem de baixo nível, assembly, como também em liguagem de mais alto nível, como "C"padrão. 3.1.2 Dispositivos Lógicos Complexos Programáveis Os CPLD Complex Programmable Logic Devices são circuitos integrados (CI) que possibilitam executar aplicações para implementar hardware digital, tais como telefones celulares. Os CPLD podem suportar projetos significativamente maiores do que os dispositivos simples lógicos programáveis (SPLD), mas fornecem menos lógica do que os FPGA. Abaixo listamos algumas características dos CPLD. Os CPLD não permitem configuração da sua memória volátil. A configuração externa da ROM (Random Access Memory) não é necessária, e os CPLD podem funcionar imediatamente após a inicialização do sistema. Possuem grande número de portas disponíveis. Os CPLD têm tipicamente o equivalente a milhares de portas lógicas, permitindo a implementação de dispositivos de processamento de dados moderados. Os CPLD possuem algumas disposições para lógica mais flexíveis do que expressões de soma de produtos, incluindo caminhos feedback complicados entre as células macro e a lógica especializada para implementar várias funções comumente usadas, tais como aritmética de inteiros.

CAPÍTULO 3. EMBASAMENTO TEÓRICO 10 3.1.3 A Tecnologia FPGA - Field Programable Gate Array Dispositivos FPGA implementam conexões entre vetores (arrays) lógicos e registradores que permitem, através de uma linguagem de descrição, que dispositivos de hardware sejam construídos e integrados. Dessa forma, é possível utilizar um dispositivo FPGA para aplicações de prototipagem ou teste a fim de produzir ou melhorar resultados de forma mais barata. É uma tecnologia muito utilizada na área acadêmica, pois facilita o o ensino de disciplinas como eletrônica, programação e arquiteturas híbridas. É também muito utilizado em pesquisas aplicadas da engenharia, pois facilita o desenvolvimento de dispositivos e protótipos. Um dispositivo FPGA, ao invés de estar restrito a uma função de hardware prédeterminada, permite que os recursos do seu programa e, consequentemente, as funções do produto possam ser modificados e adaptadas às novas normas. Ou seja, se necessário, o hardware pode ser reconfigurado, via software, para aplicações específicas, mesmo depois que o produto tenha sido instalado numa dada planta, daí o nome field-programmable. Pode-se usar um dispositivo FPGA para implementar qualquer função lógica que um circuito integrado de aplicação específica (ASIC) poderia realizar. Sua capacidade de atualizar, incluindo a funcionalidade de navegação, após, oferece vantagens para muitas aplicações. Ao contrário da geração anterior dos FPGA E/S (utilizando entrada e saída), hoje, os FPGA são compostos por várias combinações de SRAM embutidas configurávelmente, incluindo transceptores de alta velocidade, alta velocidade de entrada e saída (I/O) de blocos, lógica e roteamento. Especificamente, um FPGA contém componentes lógicos programáveis chamados elementos lógicos (LES) e uma hierarquia de interconexões reconfiguráveis que permitem que o LES possa estar fisicamente ligado. É possível configurar LES para executar funções complexas combinadas, ou apenas portas lógicas simples, como AND e XOR. Na maioria dos FPGA, os blocos lógicos também incluem elementos de memória, flip-flops, que podem ser simples ou mais blocos completos de memória. Entre as principais vantagens para se projetar e desenvolver com um FPGA podemos incluir: Prototipagem rápida Tempo mais curto para o mercado Capacidade de reprogramar no campo para depuração Ciclo de vida do produto mais longo para reduzir o risco de obsolescência 3.2 Programação para FPGA Para definir o comportamento do dispositivo FPGA, o usuário fornece instruções usando uma linguagem de descrição de hardware (HDL Hardware Description Language) ou um desenho esquemático. O uso de HDL é mais adequado para trabalhar com grandes estruturas, pois é possível especificá-los apenas numericamente ao invés de ter que desenhar cada pedaço à mão. No entanto, a entrada esquemática pode ser utilizada para facilitar a visualização de um projeto de sistema como um todo.

CAPÍTULO 3. EMBASAMENTO TEÓRICO 11 Em seguida, utilizando uma ferramenta de automação de design eletrônico (EDA - Electronic Design Automation), um netlist é gerado. O netlist é uma descrição logicamente equivalente consistindo apenas de primitivas lógicas elementares (AND, OR, NOT, flip-flops, etc) que estão disponíveis em uma tecnologia VLSI específica. O netlist pode ser configurado para a arquitetura real do FPGA, geralmente realizada por um software proprietário da empresa fornecedora do FPGA. O usuário irá validar o mapa, o local e os resultados da rota através da análise de tempo, simulação e outras metodologias de verificação. Uma vez que o design e processo de validação forem concluídos, o arquivo binário gerado (usando também software fornecido pela empresa do FPGA) é utilizado para reconfigurar o FPGA. As linguagens de descrição de hardware mais comuns são o VHDL e Verilog. Começamos descrevendo esta última. 3.2.1 Verilog Verilog é uma linguagem de descrição de hardware usada para modelar sistemas eletrônicos. Verilog não deve ser confundida com VHDL, sendo esta mais comumente usada no projeto, verificação e implementação de chips de lógica digital, a nível de transferência de registos (RTL) da abstração. Ela também é usada na verificação de circuitos analógicos e de sinal misto. Linguagens de descrição de hardware como o Verilog diferem das linguagens de programação de software, porque incluem maneiras de descrever a propagação de tempo e as dependências do sinal (sensibilidade). Há dois operadores de atribuição, a atribuição de bloqueio (=), e atribuição de não-bloqueio (<=). A atribuição de não-bloqueio permite que os projetistas possam descrever uma atualização da máquina de estados sem a necessidade de declarar e usar variáveis de armazenamento temporário. Uma vez que estes conceitos fazem parte da semântica da linguagem Verilog, os designers podem escrever rapidamente as descrições dos circuitos de grande porte, de uma forma relativamente compacta e concisa. Quando foi introduzido na comunidade (1984), o Verilog representou um enorme aumento de produtividade para os projetistas de circuito que já estavam usando o software de captura esquemática e programas de softwares gráficos, especialmente escritos para documentar e simular circuitos eletrônicos. Os projetistas da linguagem Verilog queriam uma linguagem com sintaxe similar à linguagem de programação C, que já era amplamente utilizada no desenvolvimento de software de engenharia. Verilog é case-sensitive, tem uma base de pré-processamento (embora menos sofisticado do que a de ANSI C e C ++), e palavras-chave equivalentes de controle de fluxo tais como if e else, for, while, case etc, e possui compatibilidade com operadores de precedência. Um projeto Verilog consiste de uma hierarquia de módulos. Os módulos são encapsulados no projeto de forma hierárquica e se comunicam com outros módulos através de um conjunto declarado de portas de entradas e de saída de modo bidirecional. Internamente, um módulo pode conter declarações de variáveis (register, integer, etc), concorrente, declaração seqüencial e instâncias de outros módulos (sub-hierarquias). instruções seqüen-

CAPÍTULO 3. EMBASAMENTO TEÓRICO 12 ciais são colocadas dentro de begin/end do bloco e executadas em ordem seqüencial dentro do bloco. Mas os próprios blocos são executados simultaneamente, qualificando o Verilog como uma linguagem dataflow. O conceito de Verilog, de fio, é composto por dois valores de sinal (4 estado: 1, 0, flutuante, undefined), e as forças (forte, fraca, etc). Este sistema permite a modelagem abstrata do sinal de linhas compartilhadas, onde vários fontes de unidade de uma rede comum. Quando o fio tem vários drivers, o valor do fio (legível) é resolvida por uma função da fonte de condutores e seus pontos fortes. Um subconjunto de instruções na linguagem Verilog são sintetizados. Os módulos Verilog que atendem a sintetização do estilo de codificação, conhecido como RTL (Register Transfer Level), pode ser realizado materialmente por software de síntese. Isto transforma a fonte Verilog em um netlist, uma descrição logicamente equivalente consistindo apenas de primitivos lógica elementar (AND, OR, NOT, flip-flops, etc) que estão disponíveis em uma específica tecnologia VLSI. 3.2.2 VHDL A sigla VHDL é a abreviação de VHSIC Hardware Description Language (VHSIC é a abreviação de Very High Speed Integrated Circuits). VHDL é uma linguagem de descrição de hardware com foco em circuitos integrados de alta velocidade, que pode ser usada para modelar um sistema digital, desde uma simples porta lógica até um sistema digital completo. A necessidade de uma padronização de liguagem de descrição de hardware surgiu no Departamento de Defesa Americano. Por possuir vários fornecedores de CIs e cada um com sua própria liguagem, o departamento ficava preso a empresa fornecedora de CIs. Não sendo possível a continuação de um projeto por outra empresa, por não existir uma padronização de linguagem. Somente em 1986 o IEEE adotou a liguagem para padronização. Por causa da grande necessidade de padronizar linguagem, após a linguagem ter sido apresentada. O projetista pode usar três tipos de modelagens para implementar o sistema. Os três tipos são: o método de Fluxo de Dados, o método Comportamental (Behavioral), e o método Estrutural. No método de Fluxo de Dados o projetista define declarações Booleanas que são atribuídas a sinais. Essas declarações são executadas concorrentemente e são usadas para implementar funções Booleanas simples, que dependem de um ou vários sinais binários. O método Comportamental descreve os componentes por entradas e saídas. As declarações dentro de um processo são executadas consecutivamente e trabalham da mesma maneira que qualquer programa escrito em uma linguagem procedimental, como C. Dentro de um processo podemos usar estruturas de controles de fluxos, como if e else, for, while, case etc. No método Estrutural o projetista descrever os componentes em componentes mais primitivos. É usado para definir a interconexão lógica dos componentes de circuito. Os três tipo de modelagens podem fazer parte de um mesmo projeto. Cada parte de uma projeto pode ser utilizada a modelagem mais adequada.

CAPÍTULO 3. EMBASAMENTO TEÓRICO 13 3.3 Estudo de Caso: Visão Computacional A área de Visão Computacional (VC) surgiu recentemente, tendo sido estabelecida como uma das áreas da pesquisa científica. Hierarquicamente, podemos incluí-la como uma das sub-áreas da grande área de Ciência da Computação. Resumidamente, a área de VC usa, entre outras, técnicas de processamento de imagem, específicas da área, para extrair informação importante de imagens ou vídeos. Os resultados destas operações (informação codificada) são geralmente usados em fases posteriores de sistemas mais complexos, tais como os sistemas de monitoramento e vigilância. Técnicas de visão tradicionalmente usadas em computadores são desenvolvidas com o objetivo de dar apoio aos sistemas maiores que precisam de alguma informação advinda das imagens. A parte física de um sistema de Visão Computacional é geralmente composta de dispositivos de captura e digitalização de imagens (câmeras e placas capturadas) e de um computador que processa e retira a informação essencial a uma determinada tarefa. Esses sistemas podem estar acoplados a sistemas mais complexos, como por exemplo um sistema de controle de uma planta (termo usado na engenharia para representar a parte física de um sistema), como por exemplo um sistema de controle de vazão. A estrutura geral dos algoritmos de Visão Computacional tradicionais é mostrada na figura 3.1. Em primeiro lugar, na fase de aquisição, as imagens do ambiente de trabalho são adquiridas e transformadas em dados digitais. Em seguida, a imagem é processada através de algumas técnicas de processamento de imagem que extraem dados da imagem. Esses dados são considerados brutos e precisam ainda ser processados visando realçar determinadas feições ou características, de acordo com a aplicação desejada. Figura 3.1: Estrutura comum dos sistemas de Visão Computacional O resultado (apenas dados relevantes) é processado novamente por outros métodos, visando extrair a informação essencial à realizaçõao da tarefa específica. Esses métodos de pós-processamento podem se utilizar de técnicas exatas ou de técnicas de Inteligência Artificial, não sendo esta etapa relevante ao escôpo de nosso trabalho. Por fim, o resultado (dados transformados em informação relevante) pode ser usado por um bloco específico

CAPÍTULO 3. EMBASAMENTO TEÓRICO 14 que finalmente realiza o trabalho para o qual o sistema foi concebido (apanhar um objeto, ativar uma válvula, prover o desvio de um obstáculo, ligar uma bomba, entre outras atividades físicas no mundo real). Algoritmos em hardware podem ser idealizados para executarem na fase de aquisição de imagens, utilizando o hardware para fornecer melhores imagens para a fase posterior de processamento de imagem, que, conseqüentemente, poderá necessitar de menos filtragem do que os exigidos por muitos algoritmos de visão de baixo nível. Claramente, vemos que uma grande parte do tempo de execução do sistema é dispendido na fase de processamento de imagem. Por exemplo, a realização de uma filtragem em imagens com 640x480 pixels pode demorar até centenas de milissegundos, dependendo da área ou do diâmetro do filtro. Isso pode ser um fator impeditivo em algumas aplicações. Por exemplo, considere um sistema de rastreamento que precisa seguir um determinado objeto em uma seqüência de imagens como a acima. Numa solução simples para este problema, a cada vez, o sistema precisa verificar toda a imagem à busca do objeto. Isto envolve realização de filtragens na imagem para extrair características (padrões) e verificar, para cada posição da imagem, se os padrões extraídos nesta posição batem com os padrões do objeto em questão (conhecido a priori), consequentemente determinando sua posição no quadro corrente. Se o objeto for encontrado, o sistema efetivamente consegue realizar o trabalho de rastreamento. Numa execução em tempo real, o problema é que o sistema precisa verificar toda a imagem em menos de 33 ms, a fim de ser capaz de restrear a 30 quadros por segundo (fps), sendo esta uma taxa de aquisição comum, para encontrar o objeto rastreado. A realização de filtragem na imagem toda certamente pode reduzir a velocidade de todo o sistema. Convém ressaltar que a extração de informação para uma dada análise geralmente toma menor tempo e algoritmos mais eficazes existem para resolver o problema mencionado. 3.3.1 Algoritmos de Visão Computacional baseado em eventos Para entender melhor a aplicação da abordagem proposta no presente trabalho, vejamos o sistema de tratamento de evento de teclado, como mostrado na figura 3.2. O processador principal está executando algum outro trabalho quando uma determinada interrupção é ativada, dando o alerta de que um evento de teclado chegou na fila de eventos. Assim, o processador chama uma rotina pré-configurado para lidar com este evento. Essa rotina agora pode obter os parâmetros do evento e em seguida passar para outras aplicações que podem estar esperando por esse tipo de evento. Podemos inserir um sistema de visão computacional numa abordagem semelhante, como uma fonte de eventos, podendo de alguma maneira avisar o processador sobre a ocorrência de algum tipo de evento. Desta forma, podemos, por exemplo, modularizar a parte do bloco de processamento de imagem reduzindo o tempo de processamento de todo o sistema de visão computacional. A Figura 3.3 mostra como o sistema de eventos ficaria com um módulo de visão que pode processar eventos em imagens e avisar o processador que alguns eventos ocorreram. Com a nossa abordagem, os sistemas de visão computacional podem se tornar mais simples e mais rápido porque num hardware paralelo fica o processamento de imagem, e em

CAPÍTULO 3. EMBASAMENTO TEÓRICO 15 Figura 3.2: Sistema de tratamento de evento do teclado outro hardware o controle, a fim de gerar eventos, e apenas quando tais eventos ocorrem os métodos de processamento de imagem são chamados. Um problema com essa abordagem é a especialização do sistema, isto é, a definição de eventos de imagem pode mudar de uma aplicação para outra. Isto significa que o que é considerado um evento para um sistema de rastreamento, que tem que seguir uma bola em uma imagem, pode não ser considerado em outro sistema, tal como como um robô automatizado que está programado para evitar obstáculos. Isto significa que o sistema que é o processamento das imagens tem de ser reconfigurado com base na aplicação em que está sendo utilizado. Na arquitetura projetada, encontramos uma boa solução para este problema. Uma vez que estamos falando de soluções integradas de hardware e software, é fácil definir alguns dos parâmetros de hardware para o aplicativo antes de iniciar o trabalho, tornando o sistema flexível, aplicável a mais de um propósito, incluindo mais de um caso. A implementação de um módulo de eventos em um sistema de processamento de visão pode afetar diretamente o modelo apresentado na figura 3.1. Isso acontece porque o modelo dessa figura tem que bloquear o processador durante o tempo que o bloco de processamento de imagem está funcionando. Com a nossa abordagem, isso não acontece porque muitos dos processamento é feito em um módulo de hardware, em paralelo. Isto levou-nos a um outro modelo que é mostrado na figura 3.4. O bloco de hardware é apresentado como o antigo bloco de processamento de imagem. A diferença é que ele não precisa bloquear o processador, a fim de executar. Outro bloco que está conectado com o bloco de aquisição de imagem, chamado processamente de imagem específico, foi adicionado a fim de tornar o modelo mais genérico. Este bloco é necessário no caso de algoritmos novos ou experimentais de processamento que não são implementadas direto no módulo de hardware, mas necessários para execução do

CAPÍTULO 3. EMBASAMENTO TEÓRICO 16 Figura 3.3: Módulo de visão modificado sistema. Este pode ser o pior caso do sistema, quando ele funciona de forma semelhante ao primeiro modelo, mas ainda assim o nosso modelo é mais rápido porque ele poupa muito tempo de computação nos módulos de hardware. Alguns métodos e/ou técnicas que podem ser implementados segundo nosso modelo são descritos a seguir. 3.3.2 Correlação e Filtragem A técnica conhecida como correlação é muito usada em algoritmos de visão computacional, geralmente quando se deseja verificar a similaridade entre padrões ou conjuntos de dados. Esta técnica pode ser implementada através do uso do operador matemático conhecido como convolução, em suas várias formas (minimização ou maximização). Geralmente, o modelo mais utilizado é a função de correlação cruzada normalizada, que pode ser facilmente derivada usando o teorema de Cauchy-Schuartz ou a desigualdade entre vetores [Anton & Busby 2003] e a média dos valores de cada conjunto de dados (template e região considerada na imagem). Neste modelo, a correlação é definida no intervalo de -1 a +1, sendo que o máximo desta função significa a maior semelhança entre os dois padrões. A filtragem de imagens é outra técnica que também se utiliza do operador de convolução. Basicamente, a idéia é definir empiricamente os valores de uma máscara (filtro), com a qual a imagem é convoluída. Na prática, implementar a filtragem para toda a imagem é calcular, para cada posição, o produto interno entre dois vetores, um definido pelos valores de uma certa vizinhança da posição da imagem considerada e outro definido pelos valores dados pela máscara, num espaço cuja dimensão é definida pelo tamanho da máscara e da região da imagem, que devem ser o mesmo. Dependendo dos valores atribuídos a cada posição da máscara, o efeito da filtragem pode ser diferente. Operações geralmente conhecidas como "achar a média"(filtro média), "realçar arestas"(filtro gradiente),

CAPÍTULO 3. EMBASAMENTO TEÓRICO 17 Figura 3.4: Resultado da adição do hardware de visão baseado em eventos "suavizar"(filtro gaussiano), "achar texturas"(filtro laplaciano) podem ser implementadas através deste artifício. Então, podemos peceber que a convolução é um operador básico, que pode e deve ser implementado diretamente em hardware. A convolução é implementada computacionalmente através da multiplicação e acumulação (soma) dos valores dos pixels de uma imagem em uma determinada vizinhança, seja por uma máscara (filtragem) ou por um template (ou pequena região) de outra imagem ou modelo (correlação). Geralmente esta função possui um suporte local limitado, ou seja, a função é limitada a uma vizinhança pequena da imagem. 3.3.3 Transformada de Hough A transformada Hough é uma técnica para extração de características de uma imagem. Inicialmente a transformada só detectava linhas, mas posteriormente passou a ser usada também para identificação de outras formas geométricas parametrizáveis. A idéia da transformada de Hough é transformar a imagem do espaço x,y para o espaço dos parâmetros que descrevem a curva que se deseja encontrar na imagem. Para isto, este espaço dos parâmetros é discretizado e representado na forma de uma matriz de inteiros, onde cada posição da matriz corresponde a um intervalo no espaço real dos parâmetros. Há várias parametrizações possíveis para o espaço de linhas. Hough usou a equação declive-intercepte, definida por y = a.x + b, como representação paramétrica de uma linha, o que conduziu a dificuldade prática de um espaço de parâmetro ilimitado para linhas que são paralelas ao eixo y. Como solução, é melhor utilizar coordenadas polares para a representação das linhas. Linhas poderiam ser completamente parametrizadas usando o comprimento, r, e a orientação, q, do vetor normal para a linha da imagem original (figura 3). Usando esta parametrização, todo o ponto (x,y) na linha satisfará a equação r

CAPÍTULO 3. EMBASAMENTO TEÓRICO 18 = x. cos ( q ) + y. sin ( q ). O algoritmo de Hough requer um acumulador de dimensão igual ao número de parâmetros desconhecidos na equação da família de curvas que são buscadas. Por exemplo, achar segmentos de linhas usando a equação y = ax + b requer achar dois parâmetros para cada segmento: a e b.as duas dimensões da matriz acumuladora para esta família correspondem aos valores quantizados para a e b. Assim, usando uma matriz acumuladora A, o procedimento de Hough examina cada pixel e calcula os parâmetros da curva (equação) especificada que passa pelo pixel. Caso esteja analisando uma imagem que não foi pré-processada com algoritmo de detecção de bordas, fato incomum na transformada de Hough, será examinado o pixel e sua vizinhança na imagem, para determinar se há evidência de extremidade naquele pixel. Somente se houver realizar-se-á o calculo dos parâmetros. Após calculados os parâmetros de um determinado pixel, eles são quantizados para um valor correspondente a e b, e o acumulador A(a, b) é incrementado. Quando todos pixels tiverem sido processados, é procurado no acumulador A os maiores valores (picos). Eles indicam os parâmetros de prováveis linhas na imagem. Um limiar pode ser utilizado quando procura-se o(s) máximo(s) no acumulador, a fim de determinar um valor mínimo de pontos colineares. Se o valor do acumulador não for superior ao do limiar então será considerado um ruído. As detecções de outras formas utilizando a transformada de Hough usam o mesmo princípio, há somente alteração no número de parâmetros da equação que será empregada, e em conseqüência na dimensão do acumulador. 3.3.4 Filtro Média Ao convoluir uma imagem com o filtro da média, obtém-se uma suavização de ruído na imagem, sendo este filtro muito usado no pré-processamento da imagem. Segundo Trucco [Trucco & Verri 1998]; sendo I uma imagem N x M, m um número impar menor que N e M, e A a matriz de filtro linear, uma máscara m x m. A imagem filtrada Ia da imagem I para cada pixel (i,j) é dada pela convolução discreta: I A (i, j) = I A = m 2 h= m 2 m 2 A(h,k)I(i h, j k) (3.1) k= m 2 sendo m/2 uma divisão inteira(i.e 3/2=1). Se todas as entradas A são positivas, o filtro realiza uma suavização média. Essa simples suavização é o filtro da média, que substitui os valores de cada pixel pela média deles com suas respectivas vizinhanças. A M edia = 1 9 1 1 1 1 1 1 1 1 1

CAPÍTULO 3. EMBASAMENTO TEÓRICO 19 3.3.5 Filtro de Sobel O filtro de Sobel é um operador matemático que convoluido com uma imagem extrai os contornos da imagem. Por também se tratar de um filtro linear, assim como o filtro da média, a imagem filtrada também é obtida a partir de uma convolução discreta. Suas máscaras de convolução são divididas em duas, uma para os contornos verticais e outra para os contornos horizontais. A Sobelx = A Sobely = 1 0 1 2 0 2 1 0 1 1 2 1 0 0 0 1 2 1 Portanto a magnitude e a direção do gradiente são dadas por: A Sobel = 2 (A 2 sobel x + A 2 sobel y ) θ = tan 1( A y A x ) 3.4 Sistema orientado a plataforma Nas pesquisas em hardware re-configurável, é comum o uso de modelagem a nível de transferência de registro (RTL) para projetar máquinas de estados e outras construções que estão diretamente relacionadas com o hardware. Esse tipo de construção é normalmente utilizado em conjunto com as FPGA que possuem uma função específica comumente desempenhada totalmente pelo hardware. Sistemas desse tipo são bastante comuns porém possuem problemas no que se diz respeito a parametrização e reusabilidade o que normalmente leva os desenvolvedores a refazer boa parte do sistema quando se deparam com a adição de novas funcionalidades ou a necessidade de alguma atualização do mesmo. Visando resolver esse tipo de problema em sistemas embarcados, surge o modelo de sistema baseado em plataforma. Este tipo de sistema possibilita a utilização de vários sub-componentes de hardware que são controlados por um ou mais processadores, integrados através de um barramento comum. Esta característica facilita os processos de atualização, gerenciamento e integração desses dispositivos, provendo assim um sistema mais complexo e de forma segura. Em geral, os sistemas baseados em plataforma não têm apenas componentes de hardware, que os tornaria estáticos e voltados completamente a um único tipo de aplicação. Normalmente, tais sistemas permitem que mudanças no tipo de aplicação possam ser realizadas em software, suportando a execução de códigos escritos por desenvolvedores em linguagens imperativas que podem ser utilizados para o controle, gerenciamento e execução de tarefas. Esta possibilidade de programação do hardware via software dá mais

CAPÍTULO 3. EMBASAMENTO TEÓRICO 20 flexibilidade e capacidade de configuração, principalmente na resolução de problemas que possuem muitas variáveis e parâmetros. Figura 3.5: Arquitetura comum a sistemas orientados a plataforma A Figura 3.5 mostra a arquitetura básica de um sistema orientado a platafoma contendo um processador e outros dispositivos. Se fosse usada a modelagem clássica de hardware embarcado, teríamos que integrar todos os dispositvos através de entradas e saídas fornecidas pelos mesmos, além de nos preocupar com a sincronização entre os diferentes tipos. Com o uso do modelo de sistemas orientados a plataforma, essa sincronização e ligação entre os componentes é realizada através de um código escrito alguma linguagem de alto nível. Embora o funcionamento de alto nível dos sistemas baseados em plataforma seja mais lento porque o software precisa interagir com os processadores através de uma interface de barramento compartilhado, a parte específica de processamento em hardware compensa isto. Isto é, funções antes realizadas em software agora podem ser realizadas em hardware, aumentando em dezenas de vezes a velocidade de processamento em muitas situações e casos. A flexibilidade deste tipo de sistema permite um ganho considerável, por exemplo, na área de visão computacional, onde muitas aplicações podem ser implementadas em hardware paralelo ou de processamento vetorial (array processors) para diminuir enormemente o trabalho sequencial em software. A Figura 3.5 mostra a arquitetura básica de sistemas orientados a platafoma, contendo um processador e outros dispositivos, usando modelagem clássica de hardware embarcado teríamos que integrar todos os dispositvos através de entradas e saídas fornencidas pelos mesmos, além de nos preocupar com a sincronização entre os diferentes tipos. Com sistemas orientados a plataforma essa sincronização e ligação entre os componentes é feita através de um código escrito alguma linguagem de auto nível. Embora os sistemas baseados plataforma sejam mais lentos porque precisam interagir com os processadores através de um interface de barramento compartilhado, em muitas situações e casos, a flexibilidade deste tipo de sistema é necessária, como na área de visão computacional onde muitas aplicações podem ser implementadas em hardware para simplificar o trabalho em software.

Capítulo 4 Implementações A fim de testar e validar a nossa idéia, partimos para a implementação em hardware do modelo proposto, construindo e inserindo componentes com a finalidade de observar a eficiência do sistema orientado a plataforma. Planejamos e implementamos um procedimento de atenção visual que é um dos comportamentos considerados como essenciais em sistemas de visão robótica [Gonçalves et al. 2000]. Basicamente, um mapa atencional (ou mapa de saliências) é construído a partir de características extraídas de imagens adquiridas de um ambiente onde se encontra o sistema visual, que pode, por exemplo, estar em um robô. O sistema deve combinar as características extraídas e calcular, segundo alguma função, o local para onde o robô deve voltar sua atenção. Como este não é o foco principal deste trabalho, aqui usamos simplesmette a função somátorio. Assim, o resultado do sistema é um mapa (matriz 2D) onde cada posição é um somatório dos resultantes dos filtros gaussianio, de Sobel, do laplaciano do gaussiano, do Gaussiano e da Média. Com este mapa de saliências, o robô consegue decidir para qual região ou local do ambiente ele deve voltar sua atenção ou se locomover, dependendo de sua tarefa. Então, em nosso procedimento simples de teste, as imagens capturadas em tempo real são os dados de entrada para nossa plataforma, sendo este tipo de sistema considerado massivo em processamento. Dentro do componente do mapa de atenção, foi também implementado os filtros anteriormente citados. A arquitetura, incluindo componente de filtragem, na plataforma, pode ser vista na figura 4.1. Nas implementações, usamos componentes disponíveis na ferramenta bem como planejamos e desenvolvemos componentes específicos, úteis para nossas aplicações de visão computacional, incluindo componentes de filtragem e um integrador. Esses componentes foram desenvolvidos usando o DSP Builder e programados em hardware usando uma placa FPGA Altera DE2. Figura 4.1: Arquitetura da plataforma desenvolvida No desevolvimento do projeto, escolhemos o VHDL como linguagem de discrição

CAPÍTULO 4. IMPLEMENTAÇÕES 22 de hardware. Além de ser uma linguagem de descrição com a qual já possuíamos uma familiarização, justificamos a sua escolha por ser uma das mais populares, tendo vasta documentação e fóruns de discussões que nos foram de grande valia na detecção e correção de erros. No nosso sistema de teste, usamos programação mista, software/hardware. Uma parte foi desenvolvida usando discrição em hardware (VHDL) e outra foi implementada em C padrão. Usamos a linguagem de programação C para fazer a interface com os componentes, incluindo o controle de todos eles. Figura 4.2: Vista superior da DE2 4.1 A Tecnologia Field Programable Gate Array Em nosso trabalho, utilizamos FPGA para a prototipagem dos componentes de hardware que implementarão funções parciais ou totais de algoritmos de visão computacional. Para esse desenvolvimento utilizamos uma placa específica a DE2, do fabricante Altera. A Altera DE2 é uma placa que foi desenvolvida para fins educacionais, visando implementação e teste de circuítos lógicos e circuítos integrados (prototipagem de placas) em áreas do ensino como Engenharia Elétrica, Eletrônica e Computação. Ela tem vários componentes acoplados que podem ser vistos na figura 4.2 e são melhores descritos no seu manual de usuário [ALTERA 2006]. Os componentes disponíveis na placa DE2 são: Dispositivo Altera Cyclone II 2C35 FPGA Altera Dispositivo de Comunicação Serial - EPCS16 USB blaster 512-Kbyte SDRAM 8-Mbyte SDRAM

CAPÍTULO 4. IMPLEMENTAÇÕES 23 4-Mbyte Memória Flash Entrada para cartão SD 4 pushbutton switches 18 toggle switches 18 LEDs vermelhos 9 LEDs verdes Osciladores de 50-MHz e 27-MHz para servirem como clock CODEC áudio de 24-bits com qualidade de CD com line-in, line-out, e microfonein VGA DAC (10-bit high-speed triple DACs) com conector VGA-out Decodificador de TV (NTSC/PAL) e conector TV-in Controlador ethernet 10/100 Ethernet Controlador USB Host/Slave com conectores USB do tipo A e B RS-232 transceiver e conector de 9 pinos Conector de mouse e teclado PS/2 IrDA transceiver Dois espaços para de 40 pinos para expansão com proteção à base de diodos Figura 4.3: Esquema da placa FPGA DE2 (diagrama de blocos) Dos componentes acima listados, nem todos são utilizados nas nossas aplicações, porém alguns elementos são extremamente importantes para nossas implementações como

CAPÍTULO 4. IMPLEMENTAÇÕES 24 os elementos de memória externos, incluindo a SDRAM e memória DRAM, para suprirem os requisitos de memória presentes em aplicações de visão computacional. Alguns outros componentes como switches e botões específicos (toogle buttons) são utilizados para depuração de implementações em hardware e para testes modulares. Por fim, utilizamos o pulsador (clock) dos osciladores externos, de 50 Mhz e 27 Mhz para funcionamento externo do processador. A figura?? mostra o diagrama de blocos da DE2. 4.2 Simulink O dispositivo de filtragem foi inicialmente concebido usando o Simulink, que é uma ferramenta do Matlab [Mat 2010]. A edição e projeto de sistemas de hardware torna-se possível pela adição de uma ferramenta específica para este fim (um plugin) da Altera. Com este plugin, o Simulink torna-se, então, um ambiente amigável para a construção de sistemas em simulação, incluindo a opção de análise e síntese do Quartus, sua ferramenta de análise e síntese, e também permitindo a integração de sistemas construídos diretamente em VHDL ou Verilog. No Sumulink, cujo ambiente é mostrado na Figura 4.4, desenvolvemos um dispositivo de filtro genérico. Os valores das máscaras são entrados pelo software, tornando-o uma ferramenta em hardware com inicialização (programação dos parâmetros) em software. O dipositivo de filtragem foi incorporado à plataforma usando a ferramenta SOPC Builder(construtor de sistemas em um chip disponibilizado no Quartus II). No dipositivo de filtragem, o bus splitter serve como um habilitador, sendo usado, pela lógica de desenvolvimento como o responsável pela leitura dos pixels e da mascára. Dependendo do seu valor, podemos saber se está sendo lido um pixel ou um valor da mascára. O subsistema mask e o subsistema pixels são responsáveis pelo armazemamento dos dados. Um multiplexador é utilizado para determinar qual pixel/mascára está sendo lido, de acordo com os dados gerados pelo bussplitter. Registradores são usados para garantir que os dados estão sendo lidos corretamente, ao serem executadas as multiplicações e o somatório, operações básicas inerentes ao operador de convolução, necessário no processo de filtragem. Na figura 4.5, podemos ver o esquema de multiplicação dos pixels pelo respectivo pixel da mascára, seguido da acumulação dos valores (somátorio) e tendo como saída o pixel resultante. Ainda no Simulink, desenvolvemos o segundo dispositivo, que complementa o processo de atenção visual, integrando as características extraídas para gerar o mapa de saliências. A escrita e leitura de dados segue a mesma lógica do filtro genérico. Na figura 4.6 podemos observamos que as filtragem são feitas em pararelo, com isso conseguimos uma aceleração do algoritmo. 4.3 Incorporando dispositivos com o SOPC O filtro genérico desenvolvido foi incorporado a uma plataforma construída usando o SOPC (System On a Programmable Chip). O SOPC, mostrado na Figura 4.7, é uma

CAPÍTULO 4. IMPLEMENTAÇÕES 25 ferramenta disponivél no Quartus, responsável pela integração dos componentes na plataforma. Ele é responsável também pela interligação entre os componentes, via o barramento comum, mostrando o mapeamento em memória de I/O dos dispositivos. Possui alguns componentes importantes já definidos como alguns processadores (NIOS), controladores de barramento (Avalon), entre outros. Através dele podemos saber em que endereço da memória estão os dispositovos de entrada e saída. E podemos então usar esses endereços para o controle dos dispositivos. A nossa plataforma desenvolvida é composta por: Processador Nios II Memória on-chip Memória sdram Filtro e somador (dispositivo desenvolvido) 4.4 Quartus II O Quartus II é uma ferramenta de software desenvolvida e fornecida pela Altera para análise e síntese dos projetos de HDL. Esta ferramenta permite que o desenvolvedor possa compilar seus projetos, realizar análises de tempo e espaço, examinar diagramas RTL, simular a reação de um projeto para diferentes estímulos e configurar o dispositivo alvo com o programador. Ele integra o SOPC Builder,permitindo a otimização do hardware que vai ser gerado. Na figura 4.8 podemos vê o Quartus. 4.5 NIOS IDE II Foi desenvolvido um programa que é responsável por controlar toda a funcionalidade da plataforma. Implementamos um programa que foi desenvolvido no ambiente NIOS IDE II. O NIOS IDE II é um ambiente de desenvolvimento de códigos em C/C++. Fornece compilador dedicado a plataforma NIOS. Também fornece uma interface entre o NIOS e o desenvolvedor, permitindo que um código em C/C++ seja executado no NIOS. Nosso programa, desenvolvido para controlar o filtro genérico, é responsável pela leitura da imagem, pela definição de qual filtro iremos usar, definindo os valores da máscara. Através dele controlamos a leitura dos pixels e da mascára por nosso dispositivo e a escrita do pixel resultante. Esse programa controla o comportamento do sistema através do barramento Avalon Bus, que pode ser visto na figura 4.4. O programa apenas lê uma imagem e os pesos do filtro. Em seguida, ele grava os pixels e os pesos do filtro nos registradores do sistema e retorna o pixel filtrado.

CAPÍTULO 4. IMPLEMENTAÇÕES 26 Figura 4.4: Projeto do Simulink

CAPÍTULO 4. IMPLEMENTAÇÕES 27 Figura 4.5: Projeto do NMAC (numerical multiplier and accumulator)

CAPÍTULO 4. IMPLEMENTAÇÕES 28 Figura 4.6: Projeto do Mapa Atencional

CAPÍTULO 4. IMPLEMENTAÇÕES 29 Figura 4.7: SOPC

CAPÍTULO 4. IMPLEMENTAÇÕES 30 Figura 4.8: quartus