UNIVERSIDADE ESTADUAL PAULISTA "JÚLIO DE MESQUITA FILHO" FACULDADE DE CIÊNCIAS - CAMPUS BAURU DEPARTAMENTO DE COMPUTAÇÃO BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO VICENTE COELHO LOBO NETO RECONHECIMENTO DE SINAIS DO ALFABETO DA LIBRAS USANDO VISÃO COMPUTACIONAL BAURU Novembro de 2019 VICENTE COELHO LOBO NETO RECONHECIMENTO DE SINAIS DO ALFABETO DA LIBRAS USANDO VISÃO COMPUTACIONAL Trabalho de Conclusão de Curso do Curso de Bacharelado em Ciência da Computação da Uni- versidade Estadual Paulista “Júlio de Mesquita Filho”, Faculdade de Ciências, Campus Bauru. Orientador: Prof. Assoc. João Paulo Papa Coorientador: Prof. Assoc. Antonio Carlos Se- mentille BAURU Novembro de 2019 Vicente Coelho Lobo Neto Reconhecimento de sinais do alfabeto da Libras usando Visão Computacional Trabalho de Conclusão de Curso do Curso de Bacharelado em Ciência da Computação da Uni- versidade Estadual Paulista “Júlio de Mesquita Filho”, Faculdade de Ciências, Campus Bauru. Banca Examinadora Prof. Assoc. Antonio Carlos Sementille Coorientador Universidade Estadual Paulista "Júlio de Mesquita Filho" Faculdade de Ciências Departamento de Computação Profa. Dra. Simone das Graças Domingues Prado Universidade Estadual Paulista "Júlio de Mesquita Filho" Faculdade de Ciências Departamento de Computação Prof. Dr. Kelton Augusto Pontara da Costa Universidade Estadual Paulista "Júlio de Mesquita Filho" Faculdade de Ciências Departamento de Computação Bauru, 18 de novembro de 2019. Agradecimentos Agradeço, primeiramente, à minha mãe, Edna, a meu pai, Silvio e irmã, Nichole, não apenas pelo suporte emocional e financeiro, mas principalmente por todo o amor. Agradeço também a Daniele Fernandes e Daiane Tadeu pela ajuda na construção do conjunto de dados. A esta última devo também agradecer pelo companheirismo e amizade neste ano. Contrariando expectativas, não nos matamos. Agradeço também aos meus orientadores e demais professores e funcionários da Unesp. Tanto pelos ensinamentos acadêmicos, como também por vários outros ensinamentos para a vida. Não é possível deixar de agradecer também aos diversos amigos que encontrei durante essa trajetória. Os caminhos de muitos se separaram do meu nesse meio tempo, mas sempre levarei todos com muito carinho no meu lado esquerdo do peito. Por último, mas certamente não menos importante, agradeço à Unesp. Universidade Pública na qual entrei por cotas e, depois de uma árdua jornada, agora estou saindo mais velho, mais maduro e com muito mais histórias. A experiência que vivi na Universidade é algo que me modificou de inúmeras formas e tenho muito orgulho disso. Em tempos de desmonte, meu desejo é que a Unesp possa continuar a existir e a ser pública por muito mais anos. “Em tempos normais, nenhum indivíduo são pode concordar com a ideia de que os homens são iguais.” (Aldous Huxley) Resumo Naturalmente pautado pela coletividade, o ser humano é dependente de relações sociais. Nesse sentido, a comunicação é uma das ferramentas mais importantes para a criação de laços com outras pessoas. Apesar disso, ela pode representar um grande desafio para deficientes auditivos, quando desejam comunicar-se com falantes. A Libras, Língua Brasileira de Sinais, é a língua utilizada pelos deficientes auditivos no Brasil. Embora um dos idiomas oficiais do país, um grupo muito restrito de pessoas a conhece, o que dificulta o acesso aos deficientes auditivos a muitas coisas, como serviços públicos. Visando caminhar rumo à inclusão dessas pessoas, este trabalho apresenta um protótipo de tradutor de Libras para Português que contempla 20 letras do alfabeto. O mesmo utiliza ferramentas de Visão Computacional como técnicas de Processamento de Imagem e Aprendizado de Máquina para desenvolver um classificador capaz de identificar qual a letra sinalizada analisando uma imagem capturada por uma câmera RGB. O classificador desenvolvido obteve aproximadamente 88% de acurácia e 0.45 de loss na avaliação do conjunto de validação, no qual foram aplicadas técnicas de aumento de dados. Palavras-chave: Libras, inclusão, deficiência auditiva, processamento de imagens, aprendizado de máquina, redes neurais convolucionais. Abstract Naturally guided by the collectivity, the humans are dependent on social relations. Considering this, communication is one of the most important tools for bonding with others. Nevertheless, it can pose a major challenge for the hearing impaired when they wish to communicate with speakers. Libras, the Brazilian Sign Language, is the language used by the hearing impaired in Brazil. Although one of the country’s official languages, a very small group of people know it, which makes it difficult for deaf people to access many things, such as public services. Aiming to walk towards the inclusion of these people, this work presents a prototype translator from Libras to Portuguese that includes 20 letters of the alphabet. It uses Computer Vision tools such as Image Processing and Machine Learning techniques to develop a classifier that can identify which letter is signaled by analyzing an image captured by a RGB camera. The developed classifier obtained approximately 88% of accuracy and 0.45 of loss in the validation set evaluation, in which data augmentation techniques were applied. Keywords: Libras, inclusion, hearing impairment, image processing, machine learning, convo- lutional neural networks. Lista de figuras Figura 1 – Alfabeto dos sinais da Língua Brasileira de Sinais . . . . . . . . . . . . . . 15 Figura 2 – Exemplo do funcionamento de filtros convolucionais . . . . . . . . . . . . 21 Figura 3 – Resultado da aplicação de filtros convolucionais em uma imagem . . . . . 21 Figura 4 – Exemplo de pooling máximo . . . . . . . . . . . . . . . . . . . . . . . . . 22 Figura 5 – Esquema de enquadramentos para captura dos sinais . . . . . . . . . . . . 25 Figura 6 – Exemplos de imagens nos enquadramentos definidos . . . . . . . . . . . . 25 Figura 7 – Exemplo de sinal rotacionado para a (a) esquerda, (b) frente e (c) direita. . 26 Figura 8 – Nós utilizados no pré-processamento feito com o Blender. . . . . . . . . . 27 Figura 9 – Etapas do tratamento das imagens . . . . . . . . . . . . . . . . . . . . . 27 Figura 10 – Sequência utilizada no desenvolvimento do classificador . . . . . . . . . . . 28 Figura 11 – Exemplo de (a) imagem do conjunto de dados e (b), (c), (d), (e) imagens derivadas geradas artificialmente. . . . . . . . . . . . . . . . . . . . . . . 30 Figura 12 – Exemplo de (a) imagem em tons de cinza e (b) resultado da detecção de borda. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 Figura 13 – Representação do modelo construído . . . . . . . . . . . . . . . . . . . . 31 Figura 14 – Evolução da acurácia e loss durante treinamento . . . . . . . . . . . . . . 33 Figura 15 – Matriz de confusão resultante . . . . . . . . . . . . . . . . . . . . . . . . 34 Figura 16 – Comparação entre sinal da letra (a) F e (b) T . . . . . . . . . . . . . . . 34 Figura 17 – Algoritmo para determinação de limitantes . . . . . . . . . . . . . . . . . 37 Figura 18 – Calibração do sistema: captura da (a) palma e (b) costa da mão . . . . . . 38 Figura 19 – Exemplo de resultado da primeira parte do algoritmo . . . . . . . . . . . . 38 Figura 20 – Exemplo de resultado da segunda parte do algoritmo . . . . . . . . . . . . 38 Figura 21 – Algoritmo para determinação da região de interesse . . . . . . . . . . . . . 39 Figura 22 – Sistema em uso para reconhecimento das letras (a) A, (b) C, (c) F e (d) T 41 Figura 23 – Página inicial da interface proposta . . . . . . . . . . . . . . . . . . . . . 43 Figura 24 – Calibração do Sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Figura 25 – Ferramenta de reconhecimento . . . . . . . . . . . . . . . . . . . . . . . . 44 Figura 26 – Ferramenta de escrita . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Lista de quadros Quadro 1 – Comparativo de estrutura gramatical entre Libras e Português . . . . . . . 13 Lista de abreviaturas e siglas 2D Duas dimensões 3D Três dimensões 3DCNN Rede Neural Convolucional 3D CNN Rede Neural Convolucional HSV Hue-Saturation-Value IBGE Instituto Brasileiro de Geografia e Estatística Libras Língua Brasileira de Sinais LSTM Rede de Memória de Longo Prazo ORB Oriented FAST and Rotated BRIEF RGB Red-Green-Blue ROI Região de Interesse SIFT Scale Invariant Feature Transform SPA Single-Page Application SSD Single-Shot Detector Sumário 1 INTRODUÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 1.1 Trabalhos Correlatos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2 FUNDAMENTAÇÃO TEÓRICA . . . . . . . . . . . . . . . . . . . . 17 2.1 Reconhecimento de Padrões . . . . . . . . . . . . . . . . . . . . . . . 17 2.2 Aprendizado de Máquina . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.2.1 Tipos de Aprendizado de Máquina . . . . . . . . . . . . . . . . . . . . . . 18 2.2.2 Conjuntos de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.2.3 Categorização das Tarefas . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.2.4 Medidas de Avaliação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.3 Redes Neurais Artificiais . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.3.1 Redes Diretas (Feedforward) . . . . . . . . . . . . . . . . . . . . . . . . . 20 2.4 Aprendizado Profundo . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 2.4.1 Redes Convolucionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 2.4.1.1 Pooling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.5 Processamento de Imagem . . . . . . . . . . . . . . . . . . . . . . . . 22 2.5.1 Detecção de Borda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.5.1.1 Algoritmo de Canny . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3 CONJUNTO DE DADOS . . . . . . . . . . . . . . . . . . . . . . . . 24 3.1 Captura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.2 Tratamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.2.1 Remoção do plano de fundo . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.2.2 Região de Interesse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 4 DESENVOLVIMENTO . . . . . . . . . . . . . . . . . . . . . . . . . 28 4.1 Pré-processamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 4.1.1 Carregamento das Imagens . . . . . . . . . . . . . . . . . . . . . . . . . . 29 4.1.2 Aumento do conjunto de dados . . . . . . . . . . . . . . . . . . . . . . . 29 4.1.3 Conversão para tons de cinza . . . . . . . . . . . . . . . . . . . . . . . . . 30 4.1.4 Detecção de borda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 4.2 Aprendizado de Máquina . . . . . . . . . . . . . . . . . . . . . . . . . 31 4.2.1 Conv2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 4.2.2 MaxPooling2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 4.2.3 Dropout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 4.2.4 Flatten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 4.2.5 Dense . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 4.3 Avaliação dos Resultados do Treinamento . . . . . . . . . . . . . . . 32 5 UTILIZAÇÃO DO MODELO . . . . . . . . . . . . . . . . . . . . . . 35 5.1 Caixa Delimitadora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 5.2 Segmentação da Imagem . . . . . . . . . . . . . . . . . . . . . . . . . 35 5.2.1 Determinação da cor da pele . . . . . . . . . . . . . . . . . . . . . . . . . 36 5.2.2 Região de Interesse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 6 INTERFACE DESENVOLVIDA . . . . . . . . . . . . . . . . . . . . . 42 6.1 Conceito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 6.2 Página Inicial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 6.3 Calibração . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 6.4 Reconhecimento de Letra . . . . . . . . . . . . . . . . . . . . . . . . . 44 6.5 Ferramenta de Escrita . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 7 CONCLUSÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 REFERÊNCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 1 Introdução O ser humano tende naturalmente a viver em coletividade, existindo a necessidade da criação de vínculos entre as pessoas para que o sujeito possa ser constituído e sentir-se pleno. Um importante meio para isso é através da comunicação que, por sua vez, é feita através das interações sociais usando algum tipo de linguagem. “A linguagem é responsável pela regulação da atividade psíquica humana, pois é ela que permeia a estruturação dos processos cognitivos. Assim, é assumida como constitutiva do sujeito, pois possibilita interações fundamentais para a construção do conhecimento” (VYGOTSKY, 2001). Geralmente, a primeira forma de comunicar-se que vem à mente é através da língua oral. Um bebê, por exemplo, já desde as primeiras horas de vida é exposto à língua ouvindo a mãe e começa a ter sua comunicação estimulada. Quando chega o tempo, começa a arriscar tentar pronunciar algumas palavras. Depois disso, a cada dia essa habilidade vai desenvolvendo-se mais através das relações sociais. A questão é: e quando há algum problema nesse processo? Pessoas que possuem algum tipo de deficiência auditiva são seriamente prejudicadas nisso, dado que o problema na audição - sentido de grande relevância para a comunicação na língua oral - dificulta a interação com os grupos sociais nos quais essas pessoas estão inseridas. O Censo de 2010, realizado pelo Instituto Brasileiro de Geografia e Estatística - IBGE, mostrou que 9,7 milhões de pessoas apresentam deficiência auditiva. “Desses, 2,1 milhões apresentam deficiência auditiva severa” (BRASIL, 2011). Cabe notar que cerca de um milhão são jovens de até 19 anos. É, desse modo, um contingente muito grande de pessoas que acaba sendo invisibilizado por sua dificuldade de comunicação. Segundo Lacerda (2006), houve a difusão da defesa de uma política educacional de inclusão das pessoas com necessidades especiais no mundo todo a partir da década de 1990. No Brasil, a Língua Brasileira de Sinais (Libras) foi estabelecida como língua oficial das pessoas surdas em 2002, através da Lei no 10.436. No Artigo 2o, ela determina que: “Deve ser garantido, por parte do poder público em geral e empresas concessionárias de serviços públicos, formas institucionalizadas de apoiar o uso e difusão da Língua Brasileira de Sinais - Libras como meio de comunicação objetiva e de utilização corrente das comunidades surdas do Brasil” (BRASIL, 2002). Apesar disso, a acessibilidade para os deficientes auditivos ainda é difícil, dado que o número de pessoas que conhecem Libras é pequeno, assim como a quantidade reduzida de intérpretes; considerando a demanda. Aulas, palestras, consultas médicas, atendimento de 13 qualquer serviço público, pedir informações ou uma simples conversa casual são apenas alguns dos diversos cenários que podem se tornar grandes desafios para deficientes auditivos. Um agravante é o fato de que a Libras, sendo uma língua, possui suas regras gramaticais próprias, que são diferentes da língua portuguesa. Isso foi mostrado por Lodi; Bortolotti e Cavalmoreti (2014) que apresentaram a fábula da “Galinha dos Ovos de Ouro” para estudantes deficientes auditivos. O texto foi enunciado em Libras e em português e, em seguida, foi solicitado que os alunos reproduzissem o enunciado em português. Parte dos resultados obtidos está demonstrada no Quadro 1. Quadro 1 – Comparativo de estrutura gramatical entre Libras e Português Português Um pobre lenhador vivia com a mulher os filhos em sua roça longe de tudo Plantava milho e feijão e criava meia dúzia de galinhas (...) Libras HOMEM POBRE LENHADOR VIVER MULHER FILHOS ROÇA ISOLADO PLANTAR MILHO FEIJÃO CRIAR GALINHAS (...) Fonte – Lodi; Bortolotti e Cavalmoreti (2014) Dessa forma, o Português é uma segunda língua para os deficientes auditivos e seu aprendizado é complicado. Por conta disso, muitos não compreendem o Português, dificultando ainda mais a comunicação. Na busca pela melhora desse cenário, algumas ferramentas foram desenvolvidas. Hand- Talk1, Rybená2 e VLibras3 são sistemas que oferecem tradução de Português para Libras. Dependendo da opção, é possível digitar um texto ou até mesmo selecionar de uma página da internet e, em seguida, um intérprete virtual sinalizará o texto. Apesar de representarem um importante avanço, as soluções mencionadas contemplam apenas uma via na comunicação, que é da tradução de Português para Libras. Ou seja, embora permitam a transmissão de uma mensagem, não é possível receber uma resposta em Libras e traduzir para o Português. Vê-se que, mesmo com as soluções apresentadas, não há a possibilidade de se ter um diálogo, dado que pessoas que não conhecem a Libras não conseguirão compreender alguma possível resposta que o deficiente auditivo pode vir a sinalizar. Isso representa uma falha séria no processo comunicativo. Assim, é preciso pensar em estratégias para combater isso. Um meio é a utilização de sistemas de Visão Computacional. Segundo Huang (1996, tradução nossa), “a visão computacional visa construir sistemas autônomos que possam executar algumas das tarefas que o sistema visual humano pode executar (e até superá-lo em muitos casos)”. Ela extrai informações do mundo real para atividades como o reconhecimento de pessoas, objetos, movimento ou mesmo reconhecimento de face e pose corporal. 1 2 3 https://www.handtalk.me/ http://portal.rybena.com.br/site-rybena/ http://www.vlibras.gov.br/ 14 Assim, uma forma de desenvolver um tradutor de Libras para Português poderia ser através da utilização de uma câmera simples para a captura dos sinais e fazer o reconhecimento através de visão computacional aliada a redes neurais profundas. Entretanto, essa tarefa apresenta certa complexidade, dado que possui diversos pontos problemáticos. Alguns exemplos são: a) Conjunto de Dados: A Libras possui milhares de sinais e, apesar de já existir há alguns anos, não foi encontrado nenhum conjunto de dados organizado contendo todos os sinais. Dessa forma, é necessário estruturar e construir um conjunto de dados para o treinamento das redes neurais artificiais. Além disso, este conjunto demanda grande quantidade de dados; b) Diferentes tons de pele e iluminações: Mesmo considerando a existência de um bom conjunto de dados, existem tons de pele muito variados. Ademais, as diversas possibilidades de iluminação também aumentam a dificuldade; c) Posição das mãos e interação com o corpo: Além da posição das mãos, que já não é uma tarefa trivial, é necessário reconhecer também cada uma das partes do corpo para identificar com quais delas as mãos estão interagindo. Dadas todas essas dificuldades que permeiam a criação de um tradutor de Libras para Português, foi avaliado que seria inviável o desenvolvimento desse sistema completo no período disponível para o Trabalho de Conclusão de Curso. Assim, foi pensado em um protótipo utilizando os sinais do alfabeto da Libras, mostrados na Figura 1. Para isso, foram tomadas imagens RGB como entrada; realizado pré-processamento para segmentação de pele através do espaço de cor HSV; remoção de plano de fundo e detecção de contorno através do algoritmo de Canny para posterior classificação usando uma Rede Neural Convolucional (CNN). Não foram utilizadas características extraídas manualmente, pois, embora testadas, não apresentaram adições significativas nos resultados. 1.1 Trabalhos Correlatos Em Shahriar et al. (2018), os autores focaram no desenvolvimento de uma boa forma de extrair a pele em uma imagem, o que foi feito utilizando o espaço de cor YCbCr. Além disso, buscava-se separar apenas quatro classes, as letras A e V, palma da mão e rosto. A acurácia obtida foi de 94%. A classificação foi feita utilizando Transfer Learning através da rede AlexNet já pré-treinada. Outro trabalho que utiliza redes pré-treinadas é o de Garcia e Viesca (2016). A rede utilizada foi a GoogLeNet treinada usando o conjunto de dados 2012 ILSVRC. Neste trabalho, foram utilizadas todas as letras paradas do alfabeto para a classificação, com o diferencial de que o resultado obtido pelo classificador passa por uma rede de processamento de texto. A 15 Figura 1 – Alfabeto dos sinais da Língua Brasileira de Sinais Fonte – Biblioteca Virtual (2019) acurácia considerando apenas a classificação de imagem foi, após vários testes, entre 65% e 72%. Passando pela rede de processamento de texto, os resultados obtidos melhoraram para aproximadamente 90% de acurácia. Em Taskiran; Killioglu; Kahraman (2018) os autores treinaram a própria CNN. Ela classifica não apenas as letras do alfabeto, como também os números, utilizando outras técnicas de pré-processamento das imagens, como encontrar o formato da mão usando Convex Hull. Foi obtida acurácia de aproximadamente 98%, mas o artigo não detalha como foi construído o conjunto de validação. Por fim, foi utilizado como base para o desenvolvimento deste trabalho o artigo de Prateek et al. (2018). Nele também é feito o treinamento da própria CNN, mas o pré- processamento das imagens inclui a detecção de borda usando o algoritmo de Canny e adição de características extraídas manualmente através do algoritmo Scale-Invariant Feature Transform 16 (SIFT). A acurácia obtida também foi de aproximadamente 98%, mas, assim como no trabalho anterior, poucas informações são fornecidas sobre o conjunto de validação. O restante do trabalho está organizado como segue. Primeiramente, no Capítulo 2 são introduzidos alguns conceitos fundamentais que norteiam este trabalho. Em seguida, o Capítulo 3 detalha como foi feita a captura e tratamento das imagens utilizadas no conjunto de dados. Já o Capítulo 4 aprofunda-se no processo do desenvolvimento do classificador construído e as ferramentas utilizadas. O Capítulo 5 demonstra quais os passos necessários para utilizar o classificador. O Capítulo 6 apresenta a interface desenvolvida para a utilização do sistema. Por fim, o Capítulo 7 apresenta as conclusões do autor sobre o trabalho desenvolvido. 2 Fundamentação Teórica Pode-se considerar como foco deste trabalho a resolução de um problema de reconheci- mento de padrões que, para tal, utiliza aprendizado de máquina com redes neurais artificiais aliadas a técnicas de processamento de imagem. Antes de prosseguir, cabe definir brevemente alguns conceitos. 2.1 Reconhecimento de Padrões A observação de padrões sempre acompanhou os seres humanos durante seu desen- volvimento. Através da observação dos padrões de cheia do Rio Nilo, os antigos egípcios conseguiram desenvolver sua agricultura e sobreviver nas regiões desérticas do nordeste da África. Do mesmo modo, foi analisando os padrões de prole do cruzamento de diferentes tipos de ervilhas que o austríaco Gregor Mendel criou as leis fundamentais da genética. Na Computação, o reconhecimento de padrões é baseado na análise de dados. Estes, por sua vez, podem ser puramente numéricos; sinais codificados; imagens ou até mesmo textos. “O campo do reconhecimento de padrões se preocupa com a descoberta automática de regularidades nos dados por meio do uso de algoritmos de computador e com o uso dessas regularidades para executar ações como classificar os dados em diferentes categorias” (BISHOP, 2006, tradução nossa). As aplicações para o reconhecimento de padrões são bastante diversas, fazendo com que seja utilizado nas mais diversas áreas do conhecimento. Alguns exemplos que podem ser mencionados são a detecção de e-mails indesejados; análise de sinais em exames médicos para identificar doenças ou a busca de padrões de objetos em imagens, como será feito neste trabalho. 2.2 Aprendizado de Máquina Uma das formas de realizar o reconhecimento de padrões, é fazendo uso do aprendizado de máquina. Ele consiste na utilização de métodos estatísticos através de algoritmos para que um sistema computacional seja possível de prever dados e/ou tomar decisões sem que seja necessário explicitamente programá-lo para isso (KOZA et al., 1996). 18 2.2.1 Tipos de Aprendizado de Máquina As principais formas de aprendizado são o supervisionado, não supervisionado, semi- supervisionado e o aprendizado por reforço. ∙ Supervisionado: É o método utilizado neste trabalho. Cada instância dos dados de entrada fornecidos ao computador conterá uma ou mais etiquetas associadas. Estas etiquetas devem ser definidas por especialistas. Dessa forma, o objetivo do sistema a ser desenvolvido é, ao receber uma instância de dados diferente das que foram fornecidas como entrada, ser capaz de definir qual a etiqueta que deve ser associada a este novo dado; ∙ Não Supervisionado: Os dados da entrada não possuirão nenhum tipo de etiqueta associada. Assim, cabe ao sistema identificar as relações entre os dados, geralmente agrupando os que possuam características semelhantes; ∙ Semi-Supervisionado: Pode ser visto como um híbrido das duas formas mencionadas anteriormente. Geralmente apenas uma pequena quantidade dos dados de entrada possuirá alguma etiqueta, como no aprendizado supervisionado, enquanto a maioria não possuirá nenhuma informação associada, como no aprendizado não supervisionado; ∙ Aprendizado por Reforço: Este método diferencia-se dos outros pelo fato de que nele o sistema continuará aprendendo ao receber feedbacks através de suas interações com usuário e/ou ambiente. Conforme essas interações vão ocorrendo, o sistema vai ajustando-se automaticamente para melhorar seus próximos resultados. 2.2.2 Conjuntos de Dados Independentemente do método escolhido, é necessário, primeiramente, possuir dados de entrada. Estes dados geralmente são divididos em dois conjuntos: treino e teste. Os dados do conjunto de treino serão utilizados para a criação de um sistema com- putacional que consiga, de maneira aproximada, descrever de alguma forma esse conjunto. Este processo é chamado de treinamento. Em seguida, a qualidade deste sistema é avaliada utilizando o conjunto de testes. Em alguns casos, pode-se existir um terceiro conjunto, o de validação. Ele é utilizado como auxiliar no processo de treinamento. 2.2.3 Categorização das Tarefas As tarefas associadas ao Aprendizado de Máquina podem ser divididas em diversas categorias. Dentre elas, cabe citar a regressão e a classificação. A regressão visa o desenvolvimento de uma equação capaz de descrever a variação de uma variável dependente através da variação de uma ou mais variáveis independentes 19 (PETERNELLI, 2003). Desse modo, é esperado que um sistema de regressão apresente como saída valores numéricos. O sistema desenvolvido para realizar regressões é chamado de regressor. Já na classificação, o objetivo do sistema é categorizar os dados em duas ou mais classes diferentes, dependendo de como foi construído o conjunto de treino. Assim, ao receber um novo dado, é esperado que o sistema consiga dizer a qual classe deste dado, mesmo que ele não tenha sido visto durante o treinamento. O sistema desenvolvido para realizar essas classificações é chamado de classificador. É a categoria do problema deste trabalho. É importante mencionar que essas categorias são geralmente associadas ao aprendizado supervisionado. Existem outras categorias que se encaixam melhor a outros tipos de aprendizado de máquina, como clustering e redução dimensional. 2.2.4 Medidas de Avaliação O aprendizado de máquina não visa encontrar soluções exatas para os problemas que se propõe a resolver. Seu objetivo é encontrar aproximações que apresentem resultados satisfatórios baseados em algum tipo de medida. A medida de avaliação que foi utilizada neste trabalho é a acurácia. Ela calcula qual a distância entre o valor predito pelo classificador e o valor real presente nos conjuntos de treino e teste. A acurácia pode ser vista como sendo a medida da exatidão dos resultados fornecidos pelo classificador. Outras formas de avaliação que podem ser citadas são a precisão, revocação, ou ainda medidas derivadas, como a 𝐹1. 2.3 Redes Neurais Artificiais Dentre as diversas maneiras de realizar aprendizado de máquina, uma que se destaca é a que utiliza redes neurais artificiais. Inspiradas no funcionamento do cérebro, essas redes são compostas por neurônios. Estes, por sua vez, representam modelos matemáticos que aplicam algum tipo de função sobre os dados que recebem em sua entrada e fornecem uma saída para os próximos neurônios. Essas redes geralmente possuem três tipos de neurônios: entrada, saída e neurônios internos. Os dois primeiros, como seus nomes sugerem, são os responsáveis, respectivamente, pela entrada e saída de dados na rede. Já os neurônios internos, também conhecidos como ocultos, são os responsáveis por realizar o processamento dos dados de entrada para extração de características que irão para a saída. 20 2.3.1 Redes Diretas (Feedforward) Este tipo de rede neural artificial é o mais simples. Essas redes apresentam diversos neurônios densamente conectados entre si, formando um grafo. Este grafo não pode conter ciclos, ou seja, não há realimentação entre os neurônios internos. Um exemplo deste tipo de rede são as redes Perceptron e suas variações. 2.4 Aprendizado Profundo O aprendizado profundo é um ramo do aprendizado de máquina que utiliza modelos hierárquicos para criar as abstrações contidas nos sistemas computacionais desenvolvidos. Pode-se entender o aprendizado profundo como o empilhamento de diversas camadas mais simples para formar um sistema final mais robusto. Isso geralmente leva a uma melhor representação dos dados. Por conta disso, nos últimos anos, técnicas de aprendizado profundo têm recebido grande destaque, principalmente devido a seus excelentes resultados em diversas aplicações (LECUN; Y.BENGIO; HINTON, 2015). Como efeito colateral, elas normalmente exigem uma grande quantidade de dados para fins de treinamento, uma vez que são modelos bastante complexos. Por conta disso, sob a falta de dados, estas técnicas podem sofrer com sobre-ajuste (overfitting), o que pode causar uma convergência prematura. Sobre-ajuste é quando o sistema aprende somente como representar os dados do conjunto de treino, levando, assim, a uma pobre generalização de dados não vistos durante o treinamento. 2.4.1 Redes Convolucionais As redes convolucionais representam um dos tipos de modelos que podem ser utilizados para compor uma arquitetura de aprendizado profundo. Tendo como entrada, geralmente, imagens, essas redes apresentam neurônios que realizam, a operação de convolução. Conforme Ludwig (2007), a convolução é um processo de filtragem feito tomando-se o valor central resultante da multiplicação de partes da imagem por outras matrizes menores. Estas últimas sendo os filtros, também conhecidos como kernels. Os filtros são matrizes de pesos geradas aleatoriamente que, durante o processo de treinamento, têm seus pesos ajustados. Pode-se entender a convolução como o processo de mover esses filtros sobre a imagem, conforme mostrado na Figura 2. Através da convolução, são extraídas características das imagens de modo a descrevê- las em diversas outras imagens mais simples, como mostrado na Figura 3. Ela exemplifica a passagem de uma imagem por duas camadas convolucionais, a primeira com seis filtros de dimensão 7x7x3 e a segunda contendo apenas um filtro de 5x5x6. 21 Figura 2 – Exemplo do funcionamento de filtros convolucionais Fonte – Adventures in Machine Learning (2019) Figura 3 – Resultado da aplicação de filtros convolucionais em uma imagem Fonte – Aghdam e Heravi (2017) 2.4.1.1 Pooling Após a passagem por camadas convolucionais, é comum que seja aplicado algum tipo de pooling nas imagens resultantes. Ele funciona de maneira similar aos filtros convolucionais vistos anteriormente na subseção 2.4.1, mas, ao invés de multiplicar pesos aos pixels da imagem, estes filtros realizam algum tipo de operação estatística na vizinhança: usualmente encontrar o valor máximo ou a média. Na Figura 4 é possível ver um exemplo da aplicação de um pooling máximo. Ou seja para cada vizinhança que o filtro percorrer, apenas o valor máximo será extraído. Dependendo do tamanho da imagem e do filtro, pode ser necessário adicionar bordas extras à imagem, representadas como os pixels azuis da Figura 4. A aplicação de pooling ajuda a reduzir a quantidade de dados gerados através das camadas convolucionais, fazendo com que o modelo seja mais robusto e menos sensível a variações de escala e rotação. 22 Figura 4 – Exemplo de pooling máximo Fonte – Adventures in Machine Learning (2019) 2.5 Processamento de Imagem Derivada da área de processamento de sinais, o processamento de imagens, como seu nome sugere, tem como foco as imagens. É uma área de estudo bastante grande que contempla diversos tipos de operações que podem ser categorizadas como sendo de baixo, intermediário ou alto nível (JUNIOR, 2018). ∙ Baixo nível: Contempla as operações primitivas que podem ser realizadas em imagens. Alguns exemplos são a redução de ruídos e aumento do contraste. Essas operações têm como entrada uma imagem e fornecem como saída também uma imagem; ∙ Nível intermediário: Essas operações, por sua vez, incluem a segmentação, análise e descrição da imagem. Alguns exemplos: detecção de borda, detecção de contornos e criação de histogramas. Essas operações tomam como entrada uma imagem e fornecem atributos como saída; ∙ Alto nível: Por fim, as operações de alto nível são as que buscam dar como saída algum sentido às imagens que recebem como entrada. Contemplam, por exemplo, as operações de detecção e localização de objetos. 2.5.1 Detecção de Borda Como mencionado anteriormente na seção 2.5, uma das operações existentes na área de processamento de imagem é a da detecção de borda. Ela consiste na identificação de variações bruscas na intensidade luminosa de uma imagem através da análise de gradientes. Com isso, é possível detectar uma mudança do objeto principal para o plano de fundo, por exemplo, o que caracteriza uma borda. 23 2.5.1.1 Algoritmo de Canny Há diversas técnicas disponíveis para realizar essa tarefa, como métodos de Gradiente, filtro de Sobel e o algoritmo de Canny. Este último, por sua vez, é o que foi utilizado neste trabalho. Desenvolvido por John F. Canny, ele é divido em quatro estágios principais, que serão descritos a seguir. A versão do algoritmo utilizada é a presente na biblioteca OpenCV e descrita na documentação da ferramenta (OPENCV, 2019). 1. Redução de Ruído: Primeiramente, é aplicado um filtro Gaussiano bidimensional (usualmente de dimensão 5x5) para suavizar a imagem de entrada. Isso é útil para remover quaisquer ruídos que possam estar presentes na imagem, dado que a detecção de borda é bastante suscetível a ruídos; 2. Diferenciação: Em seguida, para cada pixel da imagem, são determinadas a magnitude dos gradientes nas direções horizontal (𝐺𝑥) e vertical (𝐺𝑦). Tendo esses valores, é possível encontrar a magnitude gradiente de borda 𝐺 e sua direção 𝜃 usando as Equações 2.1 e 2.2; 𝐺 = √︁ 𝐺2 𝑥 + 𝐺2 𝑦 (2.1) 𝜃 = tan−1 (︂ 𝐺𝑦 𝐺𝑥 )︂ (2.2) 3. Supressão de pontos não máximos: Tendo 𝐺 e 𝜃, a imagem é submetida a uma verificação completa para remover os pixels que podem não constituir a borda, ou seja, que são indesejados. Isso é feito analisando, para cada pixel, se o mesmo é um máximo local em sua vizinhança na direção do gradiente; 4. Limiarização (Thresholding): Por fim, é aplicado um método de limiarização chamado histerese para definir quais linhas realmente representam uma borda. Nele, são tomados um limitante superior e inferior. Quaisquer linhas acima do limitante superior, são consideradas como borda e mantidas na imagem. De maneira complementar, quaisquer linhas abaixo do limitante inferior são descartadas. As linhas presentes dentro do intervalo dos dois limitantes são consideradas como borda se estiverem conectadas a alguma linha que esteja acima do limitante superior. 3 Conjunto de Dados Considerando o exposto na seção 2.4 a respeito do sobre-ajuste, a construção de um conjunto de dados apropriado é muito importante para a obtenção de um bom sistema. Desse modo, o autor optou por fazer manualmente a geração dos dados através da captura com uma câmera e posterior tratamento digital. Os sinais do alfabeto foram classificados em dois grupos: os parados e os com movimento. O grupo dos com movimento contempla as letras H, J, K, X, Y, Z. Todas as outras letras possuem sinais parados. Essa divisão é importante pelo fato de que os sinais parados podem ser representados apenas com imagens, mas os com movimento demandam outras estratégias, como o uso de vídeos. Este trabalho, particularmente, foi focado nas 20 letras paradas. Isso justifica-se pelo fato de que, através das letras disponíveis, já é possível formar uma grande quantidade de palavras ao mesmo tempo que simplifica o problema a ser resolvido, por não precisar tratar dos vídeos. 3.1 Captura Primeiramente, foram capturadas imagens dos 20 sinais parados do alfabeto, em diversas posições e enquadramentos. Visando facilitar a remoção do plano de fundo, foi utilizado um fundo completamente verde, técnica conhecida como Chroma Key. A captura das imagens foi feita usando uma câmera Nikon Coolpix P900, no modo de disparo contínuo. A resolução foi a máxima disponível (16M), na proporção 1:1, resultando em imagens quadradas de tamanho 3456x3456 pixels. Foram definidos cinco diferentes enquadramentos para gerar maior variabilidade de imagens, conforme Figura 5. Dessa forma, todos os sinais foram fotografados estando posicionado em cada um dos enquadramentos definidos, gerando imagens como as mostradas na Figura 6. Além disso, para cada enquadramento, foi feita não apenas uma foto com a mão vista de frente, como também ela estando inclinada levemente para a esquerda e para a direita, como ilustrado na Figura 7. Com isso, considerando que foi utilizado o disparo contínuo, foram geradas aproximadamente 100 imagens para cada sinal do conjunto dos parados, totalizando 2274 imagens iniciais. 25 Figura 5 – Esquema de enquadramentos para captura dos sinais a e b cd Fonte – Elaborada pelo autor Figura 6 – Exemplos de imagens nos enquadramentos definidos (a) (b) (c) (d) (e) Fonte – Elaboradas pelo autor 26 Figura 7 – Exemplo de sinal rotacionado para a (a) esquerda, (b) frente e (c) direita. (a) (b) (c) Fonte – Elaboradas pelo autor 3.2 Tratamento Finalizada a captura das imagens, estas foram tratadas digitalmente visando a remoção do plano de fundo para posterior anotação e corte da região de interesse. 3.2.1 Remoção do plano de fundo Nesta primeira etapa, foi utilizado o software Blender 1 versão 2.79. Ele é gratuito, de código aberto, está disponível para Windows, macOS e Linux e realiza tarefas tanto em duas (2D) quanto em três dimensões (3D) para modelagem, animação, texturização, composição, renderização, e edição de imagens e vídeos. Para este trabalho, foi utilizado o modo de composição. O mesmo demanda a criação de um grafo contendo todas as operações que deverão ser realizadas, sequencialmente, na imagem. Os nós utilizados estão descritos na Figura 8. 3.2.2 Região de Interesse A posição das mãos e braços é de extrema importância na compreensão de um sinal em Libras. A mesma configuração de mão pode ter significados diferentes dependendo de onde as mãos estão posicionadas. Apesar disso, para este trabalho, a informação da posição dos braços não é relevante na identificação da letra individual. Tendo isso em mente, foi realizado o corte apenas das mãos nas imagens. Isso facilita para o classificador, pois são informações a menos para processar. Em seguida, foi utilizada a máscara de transparência criada com o Blender na etapa anterior e tornado o plano de fundo inteiramente preto. Por fim, as imagens foram reduzidas para o tamanho padronizado de 1 https://www.blender.org/ 27 Figura 8 – Nós utilizados no pré-processamento feito com o Blender. 1. Input Nó de entrada. Carrega as imagens do disco. 2. Transform Foi usado para rotacionar as imagens em 90º, dado que elas foram tiradas com a câmera deitada.  3. Scale Utilizado para reduzir as imagens para o tamanho de 700x700 pixels. 4. Keying É o responsável por identificar uma cor (no caso, a verde) e a tornar transparente. 5. Viewer Exibe uma prévia da imagem final na tela, antes da renderização. 6. Composite Nó de saída. É ele que renderiza a imagem final e a armazena no disco. Fonte – Elaborada pelo autor 100x100 pixels. Exemplos de imagens obtidas em cada etapa desse processo estão mostradas na Figura 9. Figura 9 – Etapas do tratamento das imagens 1. Cortar 2. Mascarar 3. Reduzir Fonte – Elaborada pelo autor 4 Desenvolvimento Para realizar a classificação das letras, foram utilizadas técnicas de processamento de imagem e aprendizado de máquina profundo. Para tal, foi utilizada a linguagem Python, que possui diversas bibliotecas úteis já implementadas. Dentre estas, foram utilizadas a OpenCV, que trata de visão computacional e processamento de imagens; e a Keras, biblioteca para redes neurais artificiais. Ambas possuem código aberto e são amplamente utilizadas. O desenvolvimento do classificador foi realizado seguindo a sequência de etapas ilustrada na Figura 10, sendo dividida em uma parte de pré-processamento e outra de aprendizado de máquina. Esta organização foi baseada no trabalho de Prateek et al. (2018), com algumas adaptações. Assim como no trabalho mencionado, as imagens do conjunto de dados foram convertidas para tons de cinza e foi realizada detecção de borda. Apesar disso, Prateek et al. (2018) adicionaram características extraídas manualmente através do algoritmo Scale Invariant Feature Transform (SIFT). Apesar de testada, a utilização deste e outros descritores como o Oriented FAST and Rotated BRIEF (ORB) não apresentou contribuições significativas nos resultados finais neste trabalho, quando comparada à versão sem o uso destes descritores. Figura 10 – Sequência utilizada no desenvolvimento do classificador Aprendizado de Máquina 1. Carregamento das imagens 2. Aumento do conjunto de dados 3. Conversão para tons de cinza 4. Detecção de borda 5. Treinamento da rede neural 6. Avaliação dos resultados Pré-processamento Fonte – Elaborada pelo autor 4.1 Pré-processamento O pré-processamento foi realizado usando principalmente a ferramenta ImageDataGe- nerator disponível na Keras. Ela cobre a maior parte das necessidades desta etapa. 29 4.1.1 Carregamento das Imagens Um dos métodos desta ferramenta é o flow_from_directory. Ele faz o carregamento de imagens do disco em lotes, o que otimiza o uso de memória durante o treinamento da rede neural artificial, pois não é preciso manter todas as imagens do conjunto de dados carregadas na memória durante todo o tempo. 4.1.2 Aumento do conjunto de dados A capacidade de generalização de um modelo de aprendizado profundo está diretamente relacionado à qualidade dos dados utilizados. Se esses dados não apresentarem muita variação, o classificador pode apresentar sobre-ajuste, isto é, apesar de possuir bons resultados na avaliação do conjunto de treinamento, o modelo não apresenta bons resultados quando testado com dados aos quais ele não foi exposto no treinamento. Por conta disso, quando se dispõe de uma pequena quantidade de dados, como é o caso deste trabalho, realizar o aumento do conjunto de dados pode auxiliar no desenvolvimento de um bom classificador. A classe ImageDataGenerator também apresenta ferramentas para realizar esse aumento. Dentre as diversas opções disponíveis, foram utilizadas as seguintes. Cabe notar que diferentes opções podem ser aplicadas concomitantemente. Uma lista de todas as opções pode ser encontrada na documentação da ferramenta1. ∙ rotation_range = 15: Realiza rotações aleatórias na imagem de até no máximo o valor fornecido, em graus. Neste caso, as rotações serão de no máximo 15∘; ∙ width_shift_range = 0.1: Realiza deslocamentos aleatórios na imagem no sentido da largura. Neste caso, os deslocamentos serão de no máximo 10%; ∙ height_shift_range = 0.1: Realiza deslocamentos aleatórios na imagem no sentido do comprimento. Assim como no item anterior, os deslocamentos serão de no máximo 10%; ∙ zoom_range = 0.1: Realiza ampliações aleatórios na imagem. As ampliações foram configuradas para ser de no máximo 10%; ∙ horizontal_flip = True: Aleatoriamente espelha a imagem no eixo horizontal. As imagens geradas são ligeiramente diferentes entre si, como pode ser visto na Figura 11. Apesar disso, essas pequenas diferenças já ajudam bastante no aumento da generalização do modelo que será aprendido. 1 https://keras.io/preprocessing/image/ 30 Figura 11 – Exemplo de (a) imagem do conjunto de dados e (b), (c), (d), (e) imagens derivadas geradas artificialmente. (a) (b) (c) (d) (e) Fonte – Elaboradas pelo autor 4.1.3 Conversão para tons de cinza As imagens geradas devem, em seguida, ser convertidas para tons de cinza. Isso dá-se por dois motivos. Primeiramente, pelo fato de que não é necessário manter os 3 canais de cores, pois o classificador aprenderá melhor se a imagem possuir apenas um canal. Mais importante que isso, a próxima etapa, detecção de borda, exige que a imagem seja de apenas um canal. A classe ImageDataGenerator também facilita nesta etapa, dado que só é necessário configurar a opção color_mode como ’grayscale’. 4.1.4 Detecção de borda A última etapa do pré-processamento é a detecção de borda. Essa detecção tem como objetivo reduzir uma imagem a uma versão binarizada que possui apenas as partes importantes, o que também contribui para a qualidade do classificador a ser treinado. A técnica utilizada neste trabalho foi o algoritmo de Canny, descrito na subseção 2.5.1.1. Um exemplo de resultado de sua aplicação pode ser visto na Figura 12. Figura 12 – Exemplo de (a) imagem em tons de cinza e (b) resultado da detecção de borda. (a) (b) Fonte – Elaboradas pelo autor 31 Este algoritmo está implementado na biblioteca OpenCV e recebe três parâmetros: a imagem, limite inferior e limite superior. Os limites definem quais arestas continuarão na imagem final. Neste trabalho, foram utilizados os valores de 100 e 200 para os limites inferior e superior, respectivamente. Mais detalhes de sua utilização podem ser encontrados nos tutoriais da ferramenta2. 4.2 Aprendizado de Máquina Terminado o pré-processamento, as imagens estão prontas para iniciar a etapa de aprendizado de máquina. Para tal, foi construída uma arquitetura profunda utilizando as ferramentas da Keras. Foram utilizadas as camadas Conv2D, MaxPooling2D, Dropout, Flatten e Dense. Uma representação do modelo final pode ser vista na Figura 13. Figura 13 – Representação do modelo construído Conv2D Conv2D MaxPooling2D Dropout Conv2D Conv2D MaxPooling2D Dropout Conv2D Conv2D MaxPooling2D Dropout Conv2D Conv2D MaxPooling2D Dropout Flatten Dense Dropout Dense Fonte – Elaborada pelo autor 4.2.1 Conv2D As duas primeiras camadas do modelo, Conv2D, são Convolucionais e trabalharão sobre dados 2D, neste caso, as imagens. O funcionamento de redes convolucionais foi descrito na subseção 2.4.1. 2 https://docs.opencv.org/trunk/da/d22/tutorial_py_canny.html 32 4.2.2 MaxPooling2D A camada a seguir, MaxPooling2D representa a realização de um pooling máximo nas imagens. O conceito de pooling foi definido na subseção 2.4.1.1. 4.2.3 Dropout Esta camada é responsável por diminuir o tamanho da rede neural artificial ao eliminar aleatoriamente algumas conexões entre os neurônios. Isso serve como uma regularização e também ajuda reduzir o sobre-ajuste. Esta camada não possui parâmetros a serem treinados, atuando apenas como auxiliar no desenvolvimento da rede neural artificial. 4.2.4 Flatten Assim como a anterior, a camada Flatten também não possui parâmetros a serem treinados. Sua função é, como o nome sugere, achatar os dados. Isto é, ela torna dados multidimensionais em unidimensionais. Essa etapa é importante pelo fato de que a próxima camada demanda dados unidimensionais. 4.2.5 Dense A camada final, Dense, representa uma camada padrão de uma rede neural direta completamente conectada. Essa estrutura é utilizada em redes neurais artificiais mais simples, como mencionado na subseção 2.3.1. Essa camada, por sua vez, será a responsável por pegar os dados obtidos das camadas anteriores e realizar a predição final da classe correspondente à imagem de entrada. 4.3 Avaliação dos Resultados do Treinamento O treinamento foi realizado utilizando um servidor contendo dois processadores Intel Xeon E5-2603 v3 operando a 1.60GHz e 32GB de memória RAM. A versão instalada da biblioteca Keras foi a 2.2.5 tendo como backend o Tensorflow 1.14.0. Já a versão da OpenCV utilizada foi a 4.1.1.26. Terminado o treinamento, o classificador obteve aproximadamente 88% de acurácia e 0.45 de loss na avaliação do conjunto de validação. A evolução do treinamento pode ser vista na Figura 14. Como pode ser visto nas imagens, o treinamento todo foi realizado em 140 épocas, isto é, foram necessárias 140 passagens por todo o conjunto de dados. Apesar disso, é possível observar que em apenas 60 épocas já se tinha atingido valores próximos de 80% para a acurácia. A partir deste ponto, a melhora dos valores ocorreu de maneira bastante lenta; o que já era 33 Figura 14 – Evolução da acurácia e loss durante treinamento 0 20 40 60 80 100 120 140 época 0.0 0.2 0.4 0.6 0.8 1.0 a cu rá ci a validação treino 0 20 40 60 80 100 120 140 época 0 1 2 3 lo ss validação treino Fonte – Elaborada pelo autor esperado, dado ser algo comum em Aprendizado de Máquina. Por fim, a diferença entre a evolução dos valores no treino e validação sugere que o classificador não está sofrendo de sobre-ajuste. A partir dessa avaliação, foi elaborada uma matriz de confusão. Conforme Souza (2019), matriz de confusão "é uma tabela que mostra as frequências de classificação para cada classe do modelo". Dessa forma, é possível identificar quais classes do modelo estão se sobrepondo. A matriz final pode ser vista na Figura 15. Analisando a matriz de confusão, é possível identificar que o erro mais comum do classificador ocorre na diferenciação das letras ’F’ e ’T’. Isso é algo natural, dada a similaridade entre as letras, mostradas nas Figuras 1, 16, 22c e 22d; estando essas últimas duas na página 41. A posição das mãos é praticamente a mesma: dedo indicador deitado e demais dedos em pé, com a diferença na posição do polegar em relação ao indicador. 34 Figura 15 – Matriz de confusão resultante A B C D E F G I L M N O P Q R S T U V W A B C D E F G I L M N O P Q R S T U V W 92% 0% 0% 0% 0% 0% 4% 0% 0% 0% 0% 0% 0% 0% 4% 0% 0% 0% 0% 0% 0% 95% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 5% 0% 0% 0% 0% 0% 0% 0% 86% 0% 0% 0% 0% 0% 0% 0% 0% 0% 7% 0% 7% 0% 0% 0% 0% 0% 0% 0% 8% 85% 0% 0% 0% 0% 8% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 100% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 4% 0% 0% 0% 0% 93% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 4% 0% 0% 0% 0% 0% 0% 0% 0% 0% 100% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 7% 0% 0% 7% 0% 0% 0% 86% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 100% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 5% 0% 0% 75% 15% 0% 0% 5% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 3% 92% 0% 0% 0% 0% 5% 0% 0% 0% 0% 0% 8% 0% 0% 0% 0% 0% 0% 0% 0% 0% 92% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 100% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 10% 0% 0% 0% 10% 0% 0% 0% 81% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 10% 0% 0% 0% 0% 0% 0% 0% 80% 0% 0% 10% 0% 0% 0% 0% 0% 0% 6% 0% 0% 0% 0% 0% 0% 0% 0% 0% 6% 88% 0% 0% 0% 0% 0% 5% 0% 0% 0% 23% 0% 0% 0% 0% 0% 0% 0% 0% 5% 0% 64% 0% 0% 5% 0% 0% 0% 0% 0% 0% 17% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 75% 8% 0% 0% 0% 0% 0% 0% 0% 7% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 80% 13% 0% 0% 0% 0% 0% 5% 0% 0% 5% 0% 0% 0% 0% 0% 0% 0% 5% 0% 0% 84% 0 20 40 60 80 100 Fonte – Elaborada pelo autor Figura 16 – Comparação entre sinal da letra (a) F e (b) T (a) (b) Fonte – Elaboradas pelo autor 5 Utilização do Modelo Apesar de já possuir o modelo treinado, dado o pré-processamento efetuado nas imagens do conjunto de dados, não é possível pegar uma imagem qualquer e tentar realizar a predição da letra a que se refere. Assim, é necessário realizar algum tipo de pré-processamento nas imagens que serão utilizadas na predição. 5.1 Caixa Delimitadora A primeira coisa a se fazer, é definir as coordenadas de uma caixa delimitadora onde deverá ser posicionada a mão antes de ter sua letra reconhecida. O objetivo dessa caixa é restringir a imagem apenas ao objeto de interesse. “Na detecção de objetos, geralmente usamos uma caixa delimitadora para descrever o local do alvo. A caixa delimitadora é uma caixa retangular que pode ser determinada pelas coordenadas dos eixos 𝑥 e 𝑦 no canto superior esquerdo e as coordenadas dos eixos 𝑥 e 𝑦 no canto inferior direito do retângulo” (DIVE INTO DEEP LEARNING, 2019, tradução nossa). Existem algumas técnicas de aprendizado profundo que conseguem determinar essas coordenadas automaticamente, como as redes Single Shot Detector (SSD). Embora testada para este trabalho, por o conjunto de dados não ser muito grande, esta técnica não apresentou resultados satisfatórios. Dessa forma, foram definidas manualmente as coordenadas de uma caixa delimitadora. 5.2 Segmentação da Imagem Como pode ser visto na Figura 11, as imagens utilizadas para fazer o treinamento do classificador tiveram seu plano de fundo removido. É necessário fazer um processo similar com as imagens de teste. Na construção do conjunto de dados, conforme mencionado na Seção 3.1, foi utilizado um fundo verde. Dessa forma, sua remoção era baseada em identificar os tons de verde e mascará- los. Entretanto, para as imagens de teste, não necessariamente o fundo será completamente verde. Dessa forma, é necessário encontrar outra forma de encontrar a pele da imagem para remover o plano de fundo. Um caminho lógico para fazer isso é, ao invés de tentar identificar os tons de verde, buscar as cores referentes ao tom de pele na imagem. O problema deste processo é determinar quais os valores de cor a se procurar, dado que a cor da pele em uma imagem pode variar muito; 36 não apenas pelo tom de pele particular de cada pessoa, como também pelas diferenças de luminosidade. Dessa forma, é preciso que se determine qual a cor a ser buscada na identificação da pele antes de cada utilização do sistema, atuando como uma calibração. 5.2.1 Determinação da cor da pele Embora possa parecer simples em um primeiro momento, a determinação da cor da pele do usuário contém diversos pontos a serem considerados. O primeiro deles é que é impossível determinar uma única cor para representar toda a pele. Diversos tons se sobrepõe nas mãos. Normalmente é possível observar que as cores das extremidades da palma da mão geralmente são mais escuras que as do centro. Por conta disso, é necessário definir não uma cor específica, e sim, limitantes de cor. Isto é, definir um limitante inferior e superior nos quais qualquer cor dentro do intervalo formado por estes limitantes será considerada como pele. Um outro ponto a ser considerado é que geralmente as cores da palma da mão são diferentes das da costa. Desse modo, é necessário considerar esses intervalos também. Visando englobar todas essas restrições, foi desenvolvido um algoritmo para realizar a determinação dos limitantes. O algoritmo completo pode ser visto na Figura 17. Ele está dividido em duas partes principais. Na primeira, são determinados os maiores intervalos consecutivos de cor em cada canal das duas imagens, da palma e da costa da mão. Com isso, é possível determinar qual o intervalo de cor dominante para cada canal das imagens. Primeiramente, são capturadas as imagens da palma e costa da mão. Para tomar essas fotos, é definida uma caixa delimitadora bem pequena, na qual o usuário deverá posicionar exatamente a parte desejada da mão, como vê-se na Figura 18. Em seguida, essa imagem é ligeiramente desfocada, visando diminuir possíveis ruídos. Logo depois, as imagens devem ser convertidas para o espaço de cor HSV. Do inglês, hue - matiz, saturation - saturação e value - valor. A forma como esse espaço de cor representa as imagens é mais adequada para a definição destes limitantes. Sabendo-se que os canais contém valores de 0 a 255 deve-se, primeiramente, encontrar o histograma de cada canal. Em seguida, verifica-se qual o maior intervalo do histograma no qual todos os elementos dentre desse intervalo possuem pixels que contém esses valores. Como mostrado na Figura 19, ao final dessa etapa, obtém-se um vetor com dois elementos, ambos possuindo três tuplas, cada uma referente a um canal. Tendo todas as tuplas, é necessário combiná-las para formar os limitantes inferior e superior finais. Essa é a segunda parte do algoritmo. Isso foi feito através da adição do menor valor de elementos correspondentes ao vetor de limitante inferior e adição do maior valor ao limitante superior, conforme ilustrado na Figura 20. 37 Figura 17 – Algoritmo para determinação de limitantes Início Limitantes = [ ]    Capturar palma da mão Desfocar imagem Converter para HSV Gerar histograma de  cada canal      Para cada histograma, determinar o maior intervalo de tons consecutivos Tomar o início do intervalo como limitante inferior e o final como superior Adicionar tuplas ao vetor  de limitantes Não Sim Costa da mão já foi capturada?    Capturar costa  da mão Limitante inferior = [ ] Limitante superior = [ ]      Para cada canal, analisar as tuplas resultantes da imagem da palma e da costa      Adicionar o valor mínimo entre    elementos correspondentes ao vetor limitante inferior      Adicionar o valor máximo entre    elementos correspondentes ao vetor limitante superior Fim Parte 1 Parte 2 Fonte – Elaborada pelo autor 38 Figura 18 – Calibração do sistema: captura da (a) palma e (b) costa da mão (a) (b) Fonte – Elaboradas pelo autor Figura 19 – Exemplo de resultado da primeira parte do algoritmo Palma H S V (168, 185) (31, 121) (94, 255) Costa H S V (0, 18) (52, 200) (93, 222) Limitantes = [ [(168, 185), (31, 121), (94, 255)], [(0, 18), (52, 200), (93, 222)] ] Fonte – Elaborada pelo autor Figura 20 – Exemplo de resultado da segunda parte do algoritmo Limitantes = [ [(168, 185), (31, 121), (94, 255)], [(0, 18), (52, 200), (93, 222)] ] H: (168,185), (0, 18) Menor Maior S: (31,121), (52, 200) Menor Maior V: (94,255), (93, 222) Menor Maior Superior: [185, 200, 255]Inferior: [0, 31, 93] Fonte – Elaborada pelo autor 39 5.2.2 Região de Interesse Tendo os valores dos limitantes, o próximo passo é determinar a região de interesse da imagem. Isto é, definir uma máscara que conterá os pixels referentes à mão, remover o plano de fundo, cortar e redimensionar a imagem. Para isso, foi desenvolvido o algoritmo da Figura 21. Figura 21 – Algoritmo para determinação da região de interesse Início Imagem Limitante inferior Limitante superior Desfocar imagem Converter para HSV Criar máscara com os pixels que estão dentro dos limitantes     Erodir, dilatar e desfocar a máscara Encontrar contornos da máscara Pegar maior contorno e preenchê-lo Determinar caixa delimitadora da máscara obtida        Cortar imagem e máscara usando as dimensões da caixa delimitadora Redimensionar imagem e máscara Fim Mascarar a imagem Aplicar detecção de borda de Canny Fonte – Elaborada pelo autor Primeiramente, a imagem deve ser desfocada e convertida para HSV, como na etapa anterior. Em seguida, é criada uma máscara com os pixels que estão dentro dos limitantes definidos anteriormente. 40 Apesar de já ser uma boa aproximação, esta máscara pode conter alguns ruídos, dado que foi criada unicamente considerando as cores. Geralmente a máscara apresentará alguns buracos em certos pontos da mão. Dessa forma, algumas operações podem ser aplicadas a ela para diminuição de ruídos. Uma dessas operações é também aplicar um desfoque à máscara. Outras técnicas são as operações morfológicas. Para este trabalho, foram utilizadas a erosão e dilatação. “Operações morfológicas são um conjunto de operações que processam imagens com base em formas. Eles aplicam um elemento estruturador a uma imagem de entrada e geram uma imagem de saída. As operações morfológicas mais básicas são duas: Erosão e Dilatação” (GEEKSFORGEEKS, 2018, tradução nossa). A erosão reduz a área do objeto, o que diminui os detalhes da imagem. Já a dilatação tem o efeito contrário, expande a área da imagem, acentuando os detalhes. A forma morfológica utilizada para realizar essas operações foi uma circunferência. Em seguida, deve-se encontrar os contornos da imagem. Tendo os contornos, o próximo passo é pegar o contorno que cubra a maior área. Dado que a imagem já foi pré-mascarada, o maior contorno corresponderá à linha externa da mão. Por fim, preenche-se completamente o interior deste contorno. Esta sequência de passos reduz em grande parte a quantidade de ruídos presentes na máscara. Desse modo, ela já pode ser aplicada na imagem. Depois disso, o plano de fundo já terá sido removido da imagem. Um método bastante útil da biblioteca OpenCV é o que, dada uma máscara, ele retorna uma caixa delimitadora dos objetos presentes. Assim, é possível identificar a posição exata da mão e centralizá-la, eliminando quaisquer eventuais bordas pretas que a imagem poderia conter. Após determinar a caixa delimitadora, a imagem e a máscara serão cortadas usando as coordenadas da caixa. Obtém-se, assim, uma imagem já mascarada e com a mão preenchendo quase que completamente a imagem. Por fim, imagem e máscara são redimensionadas para 100x100 pixels, tamanho das imagens do conjunto de dados. O último passo é a aplicação do algoritmo de detecção de borda de Canny. Nesse ponto, a imagem já pode ser fornecida ao classificador para predição da classe. Após a passagem por todos esses passos, foi desenvolvido o classificador mostrado na Figura 22. Nela, é possível ver em destaque a imagem da câmera com a indicação da letra reconhecida. A seguir, é possível ver a imagem da região de interesse (ROI) de duas formas: à esquerda, apenas com a pele segmentada e, à direita, essa mesma imagem após a aplicação do algoritmo de Canny. Ou seja, esta última imagem é a que será fornecida ao classificador. Por fim, vê-se na janela do terminal qual a letra reconhecida no momento. 41 Figura 22 – Sistema em uso para reconhecimento das letras (a) A, (b) C, (c) F e (d) T (a) (b) (c) (d) Fonte – Elaboradas pelo autor 6 Interface Desenvolvida De modo a facilitar a utilização do sistema, foi desenvolvida também uma interface com o usuário. Ela consiste em uma aplicação web de uma página. Do inglês, Single-Page Application ou apenas SPA. 6.1 Conceito A aplicação foi desenvolvida tendo em mente a ideia de diferenças e que, ao juntar formas, cores e pessoas diferentes, se criam coisas boas. Desse modo, a identidade visual inclui pessoas diferentes, sejam elas brancas, negras ou ainda de cores não convencionais como amarelo ou cinza. Além disso, há pessoas com deficiências, sendo representadas por pessoas com óculos, membros faltando ou utilizando cadeira de rodas. Para compor o design, foram adicionadas também diversas formas irregulares em padrões que se encaixam com harmonia. Essas formas normalmente não estão contidas em apenas uma página, tendo continuidade na página seguinte. A paleta de cores das formas, botões e links é baseada em tons azuis, os quais são os que possuem menor distorção dentre as pessoas com algum tipo de deficiência na visualização de cores, o daltonismo. Os desenhos das pessoas não seguem essa paleta. Além disso, todas as páginas possuem um cabeçalho com links para navegação pela aplicação. 6.2 Página Inicial A página inicial é bastante simples. Ela contém uma breve frase sobre do que se trata a aplicação e apresenta dois botões para acessar as principais funções propostas: reconhecimento de letra e a ferramenta de escrita. A tela desenvolvida pode ser vista na Figura 23. 6.3 Calibração Como mencionado na subseção 5.2.1, antes de utilizar o sistema, é necessário realizar a calibração do mesmo capturando as imagens do centro da frente e da costa da mão para que seja possível realizar a segmentação de pele. Na interface desenvolvida, a calibração é mostrada na Figura 24. 43 Figura 23 – Página inicial da interface proposta Fonte – Elaborada pelo autor Figura 24 – Calibração do Sistema Fonte – Elaborada pelo autor 44 6.4 Reconhecimento de Letra A segunda página apresenta a ferramenta de reconhecimento de letra. Do lado esquerdo, representada por um quadrado cinza, será exibida a imagem da webcam do usuário para que este possa se posicionar para começar a sinalizar. A letra reconhecida será exibida do lado direito, representada na Figura 25 pela letra ’G’. Figura 25 – Ferramenta de reconhecimento Fonte – Elaborada pelo autor 6.5 Ferramenta de Escrita A última página da interface é uma ferramenta proposta para que possa escrever utilizando o sistema desenvolvido. Assim como na página anterior, há um quadrado cinza representando a webcam. Logo abaixo há a letra que está sendo reconhecida neste momento. Por fim, do lado direito há uma caixa de texto com as palavras já formadas. Esta página está ilustrada na Figura 26. O funcionamento seria feito da seguinte forma: o usuário faz um sinal de uma letra na webcam e deve permanecer com o mesmo sinal tempo suficiente para preencher o contorno circular da área que mostra a letra reconhecida. Passado esse tempo, a letra seria considerada correta e adicionada à caixa de texto do lado direito. 45 Figura 26 – Ferramenta de escrita Fonte – Elaborada pelo autor 7 Conclusão Com base no trabalho desenvolvido, vê-se que o sistema atende de maneira bastante satisfatória ao objetivo inicial de reconhecer as letras paradas do alfabeto da Libras. Durante o processo, foram abordados diversos tópicos que não estão presentes na grade de matérias eletivas do curso, como Processamento de Imagens e Aprendizado de Máquina. Contribuindo, desse modo, para a formação pessoal do autor. É fato que, em comparação com os impressionantes resultados obtidos nos trabalhos de Prateek et al. (2018) e Taskiran; Killioglu; Kahraman (2018), o sistema desenvolvido apresentou resultados inferiores no treinamento; já que as acurácias obtidas nestes trabalhos correlatos foram superiores a 90%, enquanto a deste trabalho é de 88%. Apesar disso, a principal contribuição deste trabalho fica por conta do enfoque da Língua Brasileira de Sinais, utilizada pelos deficientes auditivos no Brasil. Sendo, então, um tema de importante relevância social. Além disso, por conta da calibração inicial, a detecção de pele, em comparação com os outros trabalhos, é bem menos suscetível a problemas com diferentes tonalidades de pele. Em adição, a técnica de captura de imagens da frente e costa da mão para definição dos limitantes de cor não foi vista em nenhum outro trabalho. Cabe notar que o classificador treinado realizou diversas predições erradas quando considerado o conjunto de validação, conforme mostrado na matriz de confusão da Figura 15. Um outro ponto de melhora são as formas de disponibilização do sistema. Pelo exposto vê-se que, em trabalhos futuros, seria interessante buscar métodos para melhorar a separação das letras similares que fazem o classificador se confundir. Uma opção seria a utilização de classificadores em cascata. Isto é, fazer um classificador inicial que consideraria as letras parecidas como sendo a mesma classe e, quando uma imagem for identificada com essa classe, ela ser passada por um segundo classificador treinado especificamente para diferenciar essas letras. Outra importante adição seria a das letras restantes do alfabeto. Dado que elas possuem movimento, seria necessário alterar a estrutura do classificador e, possivelmente, utilizar redes neurais artificiais diferentes. O tipo de dado de entrada para esse novo classificador poderia ser em formato de vídeos, que seriam classificados utilizando Redes Neurais Convolucionais 3D (3DCNN) ou Redes de Memória de Longo Prazo (LSTM). Por fim, para difundir a utilização do sistema seria necessário melhorar sua disponibili- dade. Assim, aperfeiçoamentos da interface desenvolvida e a possível criação de uma aplicação móvel são indispensáveis para aumentar a comodidade de uso e alcançar mais usuários. 47 Para finalizar este trabalho, é importante mencionar que a inclusão de todas as pessoas, independentemente de suas diferenças e necessidades especiais, é dever de todos. Esse pensa- mento deve se mostrar ainda mais forte quando dá-se conta do fato de que a Universidade Pública deve servir ao público. Desse modo, dar a devida atenção a esses assuntos é de extrema importância para que se possa trilhar um caminho em busca de uma sociedade mais justa, inclusiva e igualitária. Referências ADVENTURES IN MACHINE LEARNING. Convolutional Neural Networks Tutorial in TensorFlow. 2019. Disponível em: . Acesso em: 20 out. 2019. AGHDAM, H.; HERAVI, E. Guide to Convolutional Neural Networks: A Practical Application to Traffic-Sign Detection and Classification. [S.l.: s.n.], 2017. ISBN 978-3-319-57549-0. BIBLIOTECA VIRTUAL. Cursos de Libras. 2019. Disponível em: . Acesso em: 13 mar. 2019. BISHOP, C. M. Pattern Recognition and Machine Learning (Information Science and Statistics). Berlin, Heidelberg: Springer-Verlag, 2006. ISBN 0-387-31073-8. BRASIL. Lei no 10.436, de 24 de abril de 2002. Dispõe sobre a Língua Brasileira de Sinais - Libras e dá outras providências. 2002. Disponível em: . Acesso em: 11 mar. 2019. BRASIL. Apesar de avanços, surdos ainda enfrentam barreiras de acessibi- lidade. 2011. Disponível em: . Acesso em: 13 ago. 2019. DIVE INTO DEEP LEARNING. 12.3. Object Detection and Bounding Boxes. 2019. Disponível em: . Acesso em: 21 out. 2019. GARCIA, B.; VIESCA, S. A. Real-time american sign language recognition with convolutional neural networks. 2016. GEEKSFORGEEKS. Erosion and Dilation of images using OpenCV in python. 2018. Disponível em: . Acesso em: 21 out. 2019. HUANG, T. Computer vision: Evolution and promise. 19th CERN School of Computing, p. 21–25, 1996. JUNIOR, J. C. S. J. Processamento de Imagens: fundamentos. Pontifícia Universidade Católica do Rio Grande do Sul, 2018. Disponível em: . Acesso em: 23 nov. 2019. KOZA, J. R.; BENNETT, F. H.; ANDRE, D.; KEANE, M. A. Automated design of both the topology and sizing of analog electrical circuits using genetic programming. In: GERO, J. S.; SUDWEEKS, F. (Ed.). Artificial Intelligence in Design ’96. Dordrecht: Springer Netherlands, 1996. p. 151–170. ISBN 978-94-009-0279-4. LACERDA, C. B. F. d. A inclusão escolar de alunos surdos: o que dizem alunos, professores e intérpretes sobre esta experiência. Cadernos CEDES, v. 26, n. 69, p. 163–184, 2006. ISSN 0101-3262. https://adventuresinmachinelearning.com/convolutional-neural-networks-tutorial-tensorflow/ https://adventuresinmachinelearning.com/convolutional-neural-networks-tutorial-tensorflow/ http://www.bibliotecavirtual.sp.gov.br/temas/pessoa-com-deficiencia/cursos-de-libras.php http://www.bibliotecavirtual.sp.gov.br/temas/pessoa-com-deficiencia/cursos-de-libras.php http://www.planalto.gov.br/ccivil_03/leis/2002/l10436.htm http://www.planalto.gov.br/ccivil_03/leis/2002/l10436.htm http://www.portalfns.saude.gov.br/slideshow/2251-dia-nacional-do-surdo-promove-luta-pela-inclusao-dos-surdos-na-sociedade http://www.portalfns.saude.gov.br/slideshow/2251-dia-nacional-do-surdo-promove-luta-pela-inclusao-dos-surdos-na-sociedade https://d2l.ai/chapter_computer-vision/bounding-box.html https://www.geeksforgeeks.org/erosion-dilation-images-using-opencv-python/ https://www.inf.pucrs.br/~smusse/Simulacao/PDFs/aula_02_Fundamentos_PI.pdf https://www.inf.pucrs.br/~smusse/Simulacao/PDFs/aula_02_Fundamentos_PI.pdf 49 LECUN, Y.; Y.BENGIO; HINTON, G. E. Deep learning. Nature, Nature Publishing Group, a division of Macmillan Publishers Limited. All Rights Reserved., v. 521, n. 7553, p. 436–444, 2015. LODI, A. C. B.; BORTOLOTTI, E. C.; CAVALMORETI, M. J. A. Z. Letramentos de surdos: práticas sociais de linguagem entre duas línguas/culturas. Bakhtiniana: Revista de Estudos do Discurso, 12 2014. Disponível em: . Acesso em: 13 ago. 2019. LUDWIG, J. Image Convolution. Portland State University, 2007. Disponível em: . Acesso em: 20 out. 2019. OPENCV. Canny Edge Detection. 2019. Disponível em: . Acesso em: 23 nov. 2019. PETERNELLI, L. A. Regressão linear e correlação. Universidade Federal de Viçosa, 2003. Disponível em: . Acesso em: 23 nov. 2019. PRATEEK, S.; JAGADEESH, J.; SIDDARTH, R.; SMITHA, Y.; HIREMATH, P. G. S.; PENDARI, N. T. Dynamic tool for american sign language finger spelling interpreter. In: 2018 International Conference on Advances in Computing, Communication Control and Networking (ICACCCN). [S.l.: s.n.], 2018. p. 596–600. SHAHRIAR, S.; SIDDIQUEE, A.; ISLAM, T.; GHOSH, A.; CHAKRABORTY, R.; KHAN, A. I.; SHAHNAZ, C.; FATTAH, S. A. Real-time american sign language recognition using skin segmentation and image category classification with convolutional neural network and deep learning. In: TENCON 2018 - 2018 IEEE Region 10 Conference. [S.l.: s.n.], 2018. p. 1168–1171. SOUZA, E. G. de. Entendendo o que é Matriz de Confusão com Python. Data Hackers, 2019. Disponível em: . Acesso em: 21 out. 2019. TASKIRAN, M.; KILLIOGLU, M.; KAHRAMAN, N. A real-time system for recognition of american sign language by using deep learning. In: 2018 41st International Conference on Telecommunications and Signal Processing (TSP). [S.l.: s.n.], 2018. p. 1–5. VYGOTSKY, L. S. A construção do pensamento e da linguagem. 1a. ed. São Paulo: WMF Martins Fontes, 2001. http://www.scielo.br/scielo.php?script=sci_arttext&pid=S2176-45732014000200009&nrm=iso http://www.scielo.br/scielo.php?script=sci_arttext&pid=S2176-45732014000200009&nrm=iso http://web.pdx.edu/~jduh/courses/Archive/geog481w07/Students/Ludwig_ImageConvolution.pdf http://web.pdx.edu/~jduh/courses/Archive/geog481w07/Students/Ludwig_ImageConvolution.pdf https://docs.opencv.org/trunk/da/d22/tutorial_py_canny.html https://docs.opencv.org/trunk/da/d22/tutorial_py_canny.html http://www.dpi.ufv.br/~peternelli/inf162.www.16032004/materiais/CAPITULO9.pdf http://www.dpi.ufv.br/~peternelli/inf162.www.16032004/materiais/CAPITULO9.pdf https://medium.com/data-hackers/entendendo-o-que-�-matriz-de-confus~ao-com-python-114e683ec509 https://medium.com/data-hackers/entendendo-o-que-�-matriz-de-confus~ao-com-python-114e683ec509 Folha de rosto Folha de aprovação Agradecimentos Epígrafe Resumo Abstract Lista de figuras Lista de quadros Lista de abreviaturas e siglas Sumário Introdução Trabalhos Correlatos Fundamentação Teórica Reconhecimento de Padrões Aprendizado de Máquina Tipos de Aprendizado de Máquina Conjuntos de Dados Categorização das Tarefas Medidas de Avaliação Redes Neurais Artificiais Redes Diretas (Feedforward) Aprendizado Profundo Redes Convolucionais Pooling Processamento de Imagem Detecção de Borda Algoritmo de Canny Conjunto de Dados Captura Tratamento Remoção do plano de fundo Região de Interesse Desenvolvimento Pré-processamento Carregamento das Imagens Aumento do conjunto de dados Conversão para tons de cinza Detecção de borda Aprendizado de Máquina Conv2D MaxPooling2D Dropout Flatten Dense Avaliação dos Resultados do Treinamento Utilização do Modelo Caixa Delimitadora Segmentação da Imagem Determinação da cor da pele Região de Interesse Interface Desenvolvida Conceito Página Inicial Calibração Reconhecimento de Letra Ferramenta de Escrita Conclusão Referências