• Nenhum resultado encontrado

2.3.1 Bag of features (BoF)

Um conceito para categorização visual de imagens é apresentado por Csurka et al. (2004). Neste conceito, as características locais das imagens são quantizadas para classi-car um objeto ou imagem dentro de uma determinada classe. O Bag of Features (BoF),

Tabela 2: Valores de precisão das redes YOLOv3 e SSD no banco de dados MS COCO. Fontes: Redmon e Farhadi (2018) e Tensorow (2019).

mAP

YOLOv3 33,0%

SSD ResNet-50 35,0%

SSD MobileNet v1 21,0% SSD MobileNet v2 22,0%

ou Bag of KeyPoints, é baseado na proposta de Bag of Words, nessa representação um documento textual é descrito como um histograma com o número de ocorrências de cada palavra. Perronnin (2008) explica que de forma similar, essa quantização pode ser apli-cada a imagens, onde ao invés de contabilizar dados textuais, são contabilizados dados visuais.

Csurka et al. (2004) abordam o problema de recuperação de imagens em grandes ban-cos de dados e explicam que para gerenciar tal quantidade de informação, é necessário ter acesso a informações de mais alto nível em cada uma dessas imagens. Para chegar a esse nível de interpretação, primeiramente deve-se processar dados de baixo nível que caracterizem a imagem. Procura-se então reduzir o espaço semântico entre as caracte-rísticas locais e as informações interpretadas pelo conhecimento humano. Partindo desse princípio, são utilizados descritores locais agrupados para gerar um vocabulário de pala-vras visuais (Figura 13), e posteriormente descrever e classicar cada uma das imagens. Esse vocabulário corresponde a um histograma com o número de ocorrências de um deter-minado padrão na imagem. Com uma categorização apropriada do conteúdo, é possível medir a similaridade entre imagens.

Segundo Liu (2013), a principal diferença entre o Bag of Words e o Bag of Features é que o primeiro analisa um texto contabilizando as palavras, ou seja, já existe um voca-bulário denido. Já no segundo caso, não há um vocavoca-bulário pronto de palavras visuais e este deve ser gerado automaticamente a partir de uma leitura das imagens existentes no banco de dados.

Csurka et al. (2004) explicam que a geração do descritor visual consiste em três fases:

• Detecção e descrição dos pontos de interesse contidos em todas as imagens;

• Geração do vocabulário de palavras visual através de um algoritmo de agrupamento, no caso, o k-means;

• E por último uma contagem de quantas vezes cada palavra aparece na imagem, formando um vetor característico que descreve a imagem.

Para o processo de classicação é proposta mais uma etapa, que consiste em enviar o histograma extraído da imagem para um modelo de aprendizado que determina a categoria a qual a imagem pertence (CSURKA et al., 2004). Os autores apresentam resultados utilizando os métodos Support Vector Machine e Naive Bayes, porém esta etapa não será utilizada neste trabalho, visto que o objetivo está em utilizar o vetor descritivo gerado pelo algoritmo para ativação dos motores do colete vibrotátil.

A primeira etapa do processo consiste na detecção e descrição dos pontos de interesse e no trabalho de Csurka et al. (2004) foi utilizado o algoritmo SIFT (LOWE, 1999b; LOWE, 2004). Neste trabalho, não será utilizado nenhum algoritmo de detecção de pontos de interesse, pois serão utilizados os descritores locais extraídos nas saídas das camadas intermediárias das redes convolucionais.

Para a geração do vocabulário, é utilizado o algoritmo k-means que recebe todos os descritores locais de todas as imagens no banco de dados e os divide em k grupos. O algoritmo converge esses pontos para k centros de massa onde cada ponto pertence ao grupo que possui a média mais próxima, conforme descrito por Forsyth e Ponce (2012) e demonstrado na Figura 14. Cada centro de massa, indica uma palavra no vocabulário que será utilizada para gerar o histograma de acordo com sua proximidade em relação aos pontos. A implementação do algoritmo k-means foi feita utilizando a biblioteca OpenCV,

com um máximo de 10 iterações como critério de parada e inicialização de centróides aleatórios.

Figura 14: Representação do agrupamento realizado pelo algoritmo k-means, com seus respectivos centros de massa indicados pelos circulos maiores de cada grupo.

Com o vocabulário denido, a próxima etapa consiste em identicar o dicionário de palavras existente em cada uma das imagens, conforme descrito por Csurka et al. (2004). Para isso, os descritores locais são utilizados novamente, e cada descritor é atribuído a uma das palavras do vocabulário utilizando a técnica KNN (K-Nearest Neighbors), ou seja, o ponto irá representar a palavra que possua K vizinhos mais próximos deste. Cria-se um histograma com a quantidade de posições igual a quantidade de palavras no vocabulário. Para cada ponto o valor da respectiva palavra é incrementado obtendo-se o histograma, em seguida os valores são normalizados e este será o vetor que descreve a imagem. 2.3.2 Vector of locally aggregated descriptors (VLAD)

Jegou et al. (2010) propõe um método para representação vetorial de imagens derivado do BoF, chamado Vector of Locally Aggregated Descriptors (VLAD). O autor utiliza o algoritmo SIFT para geração dos descritores, que são agregados com base em um critério de posição no espaço de características, além do respectivo cluster no vocabulário de palavras visuais.

Assim como no algoritmo BoF, primeiramente é necessário gerar o vocabulário de palavras visuais C = {c1, ..., ck} de tamanho k através do algoritmo k-means utilizando todos os descritores locais de todas as imagens no banco de dados. Em seguida, para

cada imagem comd descritores, cada descritor local x é atribuído a uma das palavras do vocabulário utilizando a técnica KNN. O vetor do VLAD é obtido aplicando a Equação 1 e por m os valores são normalizados.

vi,j = X

seknn(x)=ci

xj−ci,j (1)

A ideia por trás do método VLAD é acumular, para cada descritor local, a diferença

x−ci entre o descritor localx e a respectiva palavra ci no vocabulário, gerando um vetor descritivo para a imagem representado porvi,j, onde i={1, ..., k} e j ={1, ..., d}.

3 MATERIAIS E MÉTODOS

Diante da necessidade das pessoas com deciência visual em identicar e localizar objetos em ambientes desconhecidos de forma independente e com base na teoria de plasticidade do cérebro humano, o presente trabalho apresenta a criação de um sistema similar ao desenvolvido por Novich (2015), porém voltado para o auxílio de decientes visuais. O sistema implementa a substituição de visão para reconhecimento de objetos, por meio de atuadores posicionados em um colete na parte dorsal do tronco do usuário, que permite a realização de tarefas do dia-a-dia sem obstrução de nenhum outro sentido.

3.1 Protótipo versão 1 (Max. 10 motores)

No desenvolvimento do primeiro protótipo buscou-se atender o máximo possível de requisitos citados por Tapu, Mocanu e Tapu (2014). O sistema criado é vestível, portátil, de baixo custo, amigável e sem os. O processamento em tempo real é um dos desaos que este trabalho procura endereçar. Foram estudados modelos de deep learning para pré-processamento das imagens e o custo computacional destes modelos é uma característica que foi considerada.

O primeiro protótipo é composto por um colete com 10 motores cilíndricos de vibração conectados nas portas PWM (pulse width modulation) de duas placas do modelo Arduino Uno R3, um computador portátil Raspberry Pi 3 modelo B+ e uma câmera USB de resolução HD.

A placa Raspberry Pi foi escolhida por se tratar de uma unidade de processamento de baixo custo e portátil o suciente para ser carregada pelo usuário. Essa placa possui um processador ARM Cortex-A53 de 64 bits com 4 núcleos de 1.2 GHz, 1 Gb de memória RAM e é capaz de rodar diferentes sistemas operacionais. Foi utilizada a distribuição Raspbian do sistema operacional Linux, especicamente desenvolvida para esse hardware. O sistema Raspbian é um sistema leve e capaz de rodar o software TensorFlow com a linguagem de programação Python, que foram utilizado no processo de inferência dos modelos de deep learning.

pro-totipação, utilizando a linguagem de programação C, e à quantidade de portas PWM disponíveis para acionamento dos motores. A placa Raspberry Pi possui apenas 4 portas PWM, o que é pouco para o projeto proposto. Por isso, a tarefa de acionamento dos mo-tores foi centralizada nas placas Arduíno e a inferência dos modelos na placa Raspberry Pi.

Foram utilizados motores do tipo cilíndricos devido a rápida resposta entre totalmente ativos e totalmente em repouso, além da facilidade do controle de frequência através de uma voltagem padrão de 3V a 5V no modelo utilizado. Cada motor pode ser ativado ou desativado para obter o número desejado de atuadores em funcionamento. Além disso, também é possível alterar as posições dos motores, já que estes estão xados com tas de velcro, o que possibilita a realização de testes com diferentes congurações, conforme pode ser observado na Figura 15.

Figura 15: Imagem da parte interna do colete.

Os motores foram montados na parte interna de um colete de ciclismo que é feito de um material com elastano, de forma que os mesmos quem bem juntos ao corpo e passem ao usuário a sensação das vibrações e diferenciação de quando o motor está ativo ou em repouso. Para alimentação dos motores foi necessária uma bateria auxiliar, já que a corrente fornecida pelo Arduíno não era suciente para alimentar todos os motores. A Figura 16 mostra como o colete ca ao ser vestido. As placas Arduíno, a bateria e o Raspberry Pi, cam alocados nos bolsos traseiros do colete. A câmera é xada em um óculos comum e conectada ao Raspberry Pi.

Figura 16: Imagens do colete vestido e do detalhe da câmera.

A imagem é capturada pela câmera posicionada no óculos (Figura 16), conectada via porta USB no Raspberry Pi, que processa a imagem utilizando o software TensorFlow para fazer inferência em um modelo de deep learning e envia uma saída para os Arduínos. O sinal enviado indica quais os motores que devem ser ativados. Cada placa Arduíno possui apenas 5 portas PWM no modelo Uno R3, por isso foram necessárias duas placas que se conectam através de um protocolo chamado I2C. A Figura 17 apresenta um diagrama do protótipo que foi desenvolvido.

Figura 17: Diagrama do protótipo.

Para validar o funcionamento correto de todo o sistema foi feito um teste utilizando o algoritmo de detecção de faces de Viola e Jones (2001), disponível na biblioteca OpenCV,

face o sistema aciona cada um dos motores sequencialmente, validando assim que todos estão operantes. Quando nenhum rosto é detectado os motores permanecem desligados. Esse teste ajudou a vericar a captura e processamento da imagem e o acionamento adequado dos motores.