Buscar

tcc 1 14

Prévia do material em texto

Sistema de Classificação de Emoções em Imagem e Texto
José Carlos de Vasconcelos Teixeira Salgueiro1, Josué Aparecido Mendes Novais1 e Kléber de Oliveira Andrade2
1Engenharia de Computação, jcvtsalgueiro@gmail.com,
1Engenharia de Computação, josue.m.novais@gmail.com,
2Doutorado em Engenharia Mecânica pela USP e professor do UNISAL, kleber.andrade@sj.unisal.br
	Projeto de Fim de Curso – Engenharia de Computação, 2018-1	15
Resumo – Este projeto tem como objetivo estudar e analisar os conceitos teóricos de Computação Afetiva e sua aplicação nas interações entre o ser humano e os sistemas computacionais. Para este efeito, foram estudados conceitos de aprendizagem emocional humana e questões relacionadas com o processo cognitivo emocional, englobando o processo de aprendizagem de emoções básicas (primárias) e sociais (secundárias). Foram também abordados tópicos de Inteligência Artificial, aprendizado de máquina, Deep Learning, processamento de linguagem natural e reconhecimento de expressões no âmbito da aprendizagem de emoções. Como aplicação dos conceitos estudados, foi construído um sistema capaz de interpretar emoções utilizando dois meios de expressividade bastante utilizados na interação homem-máquina: o reconhecimento visual e a entrada de texto. 
Palavras-chave: Computação Afetiva, Inteligência Artificial, Aprendizado de Máquina, Redes Neurais, Processo Cognitivo
Abstract – This project intends to study and analyze the theoretical concepts of Affective Computing and its application in the interactions between mankind and computational systems. For that purpose, the concepts of human emotional learning and issues related to the emotional cognitive process were studied, encompassing the process of learning basic (primary) and social (secondary) emotions. Topics regarding Artificial Intelligence, Machine Learning, Deep Learning, Natural Language Processing and Expression Recognition were also addressed in the context of emotion learning. As an application of these concepts, a system capable of interpreting emotions through two commonly used Human-Machine interaction channels – visual recognition and text input - was created. 
Keywords: Affective Computing, Artificial Intelligence, Machine Learning, Neural Networks, Cognitive Process
Introdução
A Gartner (2017) prevê que mais de 20 bilhões de dispositivos estarão conectados à internet em 2020. O aparecimento e desenvolvimento da Internet das Coisas (IoT), juntamente com o aumento da popularidade da própria internet como canal de comunicação e entretenimento, e a crescente interação e dependência do ser humano relativamente à tecnologia, formaram uma nova realidade em que o ambiente virtual ganha relevância. A nova geração da humanidade, denominada “Geração V”, dispende uma parcela considerável do seu tempo de vida interagindo com tecnologia de informação e internet, em atividades que vão desde jogos e entretenimento até negócios em ambientes virtuais. Esta nova realidade tem levado as empresas a adotarem novas estratégias de apelo ao público-alvo; o cliente deixa de ser uma pessoa física e conhecida para ser um “avatar”, anônimo e totalmente desconhecido (FGV ONLINE, 2018). 
Neste cenário, a interação homem-máquina ganha um espaço relevante: mesmo em ambiente virtual, a qualidade no atendimento ao cliente não pode ser desprezada, e se torna importante criar um ambiente de empatia com os clientes em uma realidade normalmente desprovida de interação humana.	
No contexto supracitado, o conceito de Computação Afetiva desenvolvido por Picard (1997) ganha destaque. Segundo Picard (1997, p.1, tradução nossa): 
[...]os computadores [...] não devem apenas fornecer um melhor desempenho na assistência aos seres humanos, mas também aumentar a capacidade dos computadores de tomar decisões.” 
É nessa observação que assenta o propósito deste trabalho. Pretende-se estudar a compreensão e mensuração das emoções humanas, e construir um sistema computacional que visa prever corretamente um determinado estado emotivo. O ser humano manifesta suas emoções de várias formas e uma avaliação correta de um estado emotivo leva em conta vários parâmetros, como contexto de situação, e fatores fisiológicos (p.ex. batimento cardíaco). No entanto, é sabido que o homem é capaz de avaliar o estado emocional de seu semelhante com precisão aceitável, utilizando apenas meios de comunicação visual (olhando para a expressão do rosto de alguém) e comunicação verbal (ouvindo ou lendo um discurso emotivo). Esses meios de comunicação são bastante utilizados nas Interações homem-máquina, e como tal, podem ser aplicados na interpretação de estados emotivos por um computador.
Ao compreender a forma como o ser humano interpreta visualmente e verbalmente emoções, é possível construir um sistema capaz de as interpretar de forma semelhante. A aplicação desse sistema pode contribuir para tornar a interação homem-máquina mais agradável e pessoal, servindo de ferramenta-base para aplicações que constituem a realidade da geração atual.
Algumas áreas onde os conceitos supracitados podem ser aplicados incluem: a) jogos de computador; b) análises de estado emotivo de clientes para determinados ramos de negócios; c) IoT, mais propriamente no conceito de carro autônomo e carro conectado, para determinar e analisar o estado emotivo dos condutores; entre outros.
Espera-se que os conceitos assimilados sirvam ainda como alavanca para futuros estudos e desenvolvimento na área da Computação Afetiva.
Referencial teórico
Computação Afetiva.
Picard (1997, p.1, tradução nossa), percursora do estudo moderno sobre computação afetiva, definiu a mesma como “computação que se relaciona a, tem origem em, ou influencia emoções”. Definindo sucintamente, trata-se de um campo da Inteligência Artificial que procura estudar e desenvolver sistemas computacionais capazes de reconhecer, interpretar e simular emoções humanas. O estudo da Computação Afetiva procura compreender a origem e bases das emoções e transformá-las em modelos computacionais, e seu estudo engloba não somente Computação, mas também conceitos de Neurofisiologia, Psicologia e Biologia. 
O objetivo não deve ser confundido com a ideia de “dar alma” ou “consciência” às máquinas; procura-se, antes, aperfeiçoar a interação homem-máquina por forma a criar sistemas que possam interpretar o estado emocional de um utilizador e decidir qual a melhor resposta a fornecer com base nessa interpretação. 
Numa era em que a relação entre o ser humano e a tecnologia é cada vez mais profunda e íntima, a Computação Afetiva ganha cada vez mais relevância na criação de sistemas que propiciem uma interação mais “humana”, agradável e pessoal aos utilizadores (MARR, 2016). 
Conceitos neurofisiológicos das emoções
A nível fisiológico, podemos atribuir três componentes fundamentais para a formação de emoções (ERDEM & KARAISMAILOGLU, 2011):
Sensação física: Contituída por agentes do sistema nervoso autônomo que compõem a excitação fisiológica.
Expressão (expressividade) emocional: Gestos, posturas e expressões faciais que refletem as emoções e sentimentos do ser vivo.
Experiência subjetiva: consiste na sensação e percepção pessoal que o organismo vivo tem ao experienciar uma emoção.
Anatomicamente, o processamento e aprendizagem de emoções resultam de inúmeras interações coordenadas entre vários mecanismos neurais corticais e sub-corticais de várias estruturas anatômicas. Dada a complexidade deste sistema, torna-se impossível separá-lo em componentes distintos. 
Não obstante, alguns desses componentes, tais como o lobo frontal e o sistema límbico (que é composto pelo hipotálamo e amígdala), têm sido estudados em áreas de neurologia, neurofisiologia e neurocirurgia devido à relevância provada que demonstram no processo de desenvolvimento emocional. O hipotálamo, por exemplo, é uma estrutura central que tem influência nos comportamentos endócrinos, vegetativos e emocionais do corpo humano e age como intermediário na comunicaçãoentre várias estruturas do sistema nervoso (ERDEM & KARAISMAILOGLU, 2011). Outras regiões do cérebro de importância relevante no processamento de emoções são: 
o sistema límbico, que desempenha um papel fulcral no controle do comportamento emocional (ERDEM & KARAISMAILOGLU, 2011).; 
o lobo frontal, que regula reações emocionais espontâneas como as expressões faciais, e que regula o senso de regra e responsabilidades sociais, integrando os processos emocionais com os cognitivos (ESPERIDIÃO-ANTONIO et al., 2007).
A complexidade anatômica do sistema de processamento de emoções do ser humano não é o único obstáculo na modelação de sistemas computacionais emocionalmente inteligentes. O próprio leque de emoções processadas e experenciadas pelo homem é extremamente vasto, complexo, depende de uma quantidade extensa de parâmetros, alguns dos quais são imperceptíveis por mera observação. Isso torna extremamente difícil de diferenciar todos os estados emocionais que o ser humano é capaz de processar. Para esse fim, a neurociência divide as emoções em dois grandes grupos (ERDEM & KARAISMAILOGLU, 2011):
as emoções básicas (primárias), que são inatas ao ser humano e estão diretamente relacionadas com o sistema límbico. Plutchik (1980, apud PICARD, 1997, p.6) atribui 6 (seis) emoções a esta categoria: felicidade, tristeza, raiva, medo, repulsa e surpresa.
As emoções sociais (secundárias), que são adquiridas através de experiências e interações sociais com o meio ambiente e seus agentes ao longo do tempo. São emoções que amadurecem com o crescimento e maturidade social do organismo, e são de extrema importância para a tomada de decisões sociais. Remorso e vergonha são dois bons exemplos desta categoria.
Outro aspecto a levar em conta é a relação entre o estado emocional e as reações fisiológicas que dele resultam. Por exemplo, um estado emotivo de “medo” pode criar uma alteração no timbre de voz e uma alteração no ritmo cardíaco. Estas reações estão presentes mesmo quando a emoção é imperceptível por análise visual inicial (caso da “poker face”). Não existe ainda consenso sobre esta relação emoção-reação fisiológica, e a mesma se torna difícil de caracterizar. Por exemplo, há quem defenda que não é possível associar emoções cognitivas como o amor a uma resposta fisiológica, como o aumento do ritmo cardíaco. Também se observa que a resposta fisiológica para o mesmo estado emocional pode variar de pessoa para pessoa. Não obstante, muitos autores aceitam esta relação e a consideram nas suas definições e trabalhos sobre emoção (PICARD, 1997). 
Quantificação e Dimensionamento de Emoções.
Segundo Picard (1997, p.1, tradução nossa) “As emoções têm um estigma na ciência; são vistas como inerentemente não-científicas.”. Para modelar em computador algo estritamente qualitativo como as emoções, é necessário obter uma forma de as classificar quantitativamente. As abordagens desenvolvidas para esse fim incluem a classificação qualitativa de expressões fisiológicas, tais como expressões faciais e ritmo cardíaco, e modelos dimensionais.
O método de classificação qualitativa de emoções em expressões faciais baseia-se fortemente no Sistema de Codificação de Ação Facial (Facial Action Coding System ou FACS) desenvolvido por Paul Ekman (1978, apud PICARD, 1997). Este sistema associa o posicionamento dos músculos da face e resultantes expressões faciais às emoções correspondentes. O FACS tem sido muito utilizado para modelagem computacional de personagens virtuais demonstrando diferentes emoções. A Figura 1 ilustra uma classificação básica de expressões faciais segundo o sistema de Ekman.
Figura 1 – Expressões faciais e emoções correspondentes.
Fonte: (DÖVELING, 2011)
A partir de imagens contendo expressões faciais é possível identificar descritores e delinear padrões (vetores de descritores) capazes de caracterizar cada expressão (GONZALEZ & WOODS, 2010). Esta abordagem foi utilizada em vários trabalhos de reconhecimento de emoções. Soyel e Demirel (2008) utilizaram os conceitos de Ekman e retiraram, de um conjunto de imagens 3D, onze pontos estratégicos dos lábios, olhos e sobrancelhas para construir um padrão descritivo das emoções, que seria depois analisado por uma rede neural. Esses pontos estratégicos são denominados de pontos de referência ou, em inglês, landmarks.
Reilly, Ghent e McDonald (2008) utilizaram as coordenadas espaciais dos landmarks faciais e intensidade dos píxeis que os compõem para construir dois modelos para o dataset que utilizariam para seu trabalho: o Facial Expression Shape Model (FESM) e o Facial Expression Texture Model (FETM). 
Van Gent (2016), por sua vez, utilizou um conjunto de 68 landmarks faciais para construir um modelo classificativo de emoções utilizando Máquinas de Vetor de Suporte (SVM).
Apesar de divergirem na estrutura de cada modelo, os trabalhos supracitados apresentam uma metodologia bastante semelhante entre si. A primeira etapa consiste em identificar a(s) face(s) em cada imagem; em seguida, são identificados os descritores de cada face e é formado o padrão de identificação da emoção. Este padrão é analisado por um classificador pré-treinado, que lhe atribui uma emoção com um determinado grau de precisão. O classificador é normalmente criado por técnicas de aprendizado de máquina, que podem variar entre Máquinas de Vetor de Suporte, Classificadores Naive-Bayes, ou Redes Neurais.
O método de classificação dimensional das emoções partiu dos estudos de Osgood (1957, apud GÖKÇAY, 2011) sobre a redundância do espaço semântico. Ao classificar as dimensões semânticas da linguagem, Osgood verificou que várias entradas verbais e expressões poderiam ser representadas pelo mesmo conjunto limitado de adjetivos. A partir desta observação, delineou uma metodologia de classificação de várias entradas verbais em geral, com base em um conjunto limitado de adjetivos limitados por extremos contraditórios, tais como “forte-fraco”, “ativo-passivo”, etc. O resultado é uma caracterização n-dimensional das entradas verbais, em que cada par de adjetivos contraditórios representa uma dimensão semântica. 
Nesta abordagem, cada dimensão recebe a mesma escala de medida. Uma entrada verbal pode ser avaliada classificando-a em cada uma destas dimensões. A continuação desta metodologia mostrou que algumas destas dimensões podem ser agrupadas; cada grupo de dimensões correlacionadas pode ser substituído por uma única dimensão ortogonal constituída por uma média ponderada das dimensões que a originaram. O resultado é um espaço multidimensional novo, com menos dimensões que o original (GÖKÇAY & YILDIRIM, 2011).
A metodologia supracitada pode ser aplicada diretamente para se obter uma descrição quantitativa das emoções. A partir do conjunto de dimensões (pares de adjetivos) do espaço semântico, cria-se um conjunto de eixos ortogonais, obtendo-se como resultado um espaço n-dimensional com eixos orientados para esta classificação. Cada um destes eixos é designado de eixo emocional. Cada ponto de dados nessa dimensão representa a instanciação de uma emoção em particular. Essas emoções podem ainda ser agrupadas dando origem a categorias de emoções, visíveis através de aglomerados de pontos no espaço n-dimensional considerado (GÖKÇAY, 2011).
Na tentativa de restringir o número de eixos emocionais necessários e facilitar assim a representação computacional das emoções, foram realizados vários estudos e propostos alguns modelos; o modelo circumplexo (RUSSEL, 1980, apud GÖKÇAY, 2011; GONÇALVES, 2016), representa as emoções em um espaço bidimensional, utilizando como eixos emocionais a “valência” e a “excitação”. Os dados distribuídos neste modelo adquirem uma forma anelar, com centro na origem. O modelo “Positive Activation – Negative Activation” (PANA) admite duas dimensões extra para medição do afeto positivo e negativo. Estas dimensões se correlacionam com as dimensões do modelo circumplexo e são representados graficamente nesse modelo como eixos ortogonais inclinados em 45º.Figura 2 – Representação de eixos emocionais: modelo circumplexo (valência e excitação) e modelo PANA (afeto positivo e afeto negativo).
Fonte: (GÖKÇAY, 2011).
Existem vários outros modelos com propostas de caracterização multidimensional das emoções, sendo que ainda existem divergências sobre a adoção de um modelo universal até a data (2018). No entanto, a grande maioria inclui a valência e excitação na sua gama de eixos. 
Tendo em conta as facilidades que um sistema bidimensional apresenta no tratamento de dados comparando com sistemas multidimensionais, modelos como o circumplexo podem ser uma boa escolha na modulação computacional de emoções. 
O conceito de polaridade dimensional de emoções tem sido utilizado em trabalhos de Processamento de Linguagem Natural para classificação de emoções em texto, atividade denominada como Sentiment Analysis.
Classificadores Naive-Bayes
Os classificadores Naive-Bayes são um conjunto de algoritmos de classificação baseados no Teorema de Bayes (1), que descreve a probabilidade de um evento A dado um outro evento B. 
 (1)
O termo Naive (ingênuo) advém da premissa de que existe uma independência quase total entre os atributos que definem os dados analisados. Apresenta como vantagens: a) tem uma implementação simples; b) apresenta um desempenho eficiente e rápido, mesmo com poucos dados de aprendizado disponíveis; e c) não é influenciável por adição de atributos irrelevantes. No entanto, pela sua natureza não é tão recomendado quando os atributos que definem o conjunto de dados de aprendizado apresentam dependência significativa entre si (ROSA, 2011). 
Existem três implementações populares do algoritmo de Naive-Bayes: a) Gaussiana; b) Multinominal; e c) Bernoulli. A escolha da função mais adequada a utilizar depende da natureza do problema. 
Redes Neurais Artificiais
Sucintamente, Redes Neurais podem ser descritas como estruturas de processamento compostas por uma ou mais unidades interconectadas, capazes de realizar operações de aprendizado de máquina. Cada unidade individual é designada de neurônio. A sua estrutura é baseada no sistema nervoso humano. 
A rede neural constituída por um único neurônio é denominada de Rede Neural Perceptron. Tal como os Classificadores Naive-Bayes, a Rede Neural Perceptron é um classificador linear, que necessita que os dados sejam linearmente separáveis. A atratividade do conceito de rede neural está na capacidade de associação de vários destes neurônios por forma a resolver problemas de classificação mais complexos de forma eficiente. 	
A Figura 3 ilustra uma dessas associações. Nesta rede, os neurônios são agrupados em camadas. Cada neurônio na camada inicial recebe o mesmo conjunto de dados de entrada. A saída de cada camada alimenta a entrada de cada neurônio da camada seguinte. A primeira camada que recebe os dados originais é designada de “Camada de Entrada” (Input Layer). A última camada, que retorna o resultado de todo o processamento da rede neural, é designada de “Camada de Saída” (Output Layer). As camadas intermediárias recebem o nome de “Camadas Escondidas” (Hidden Layers). Por se assemelharem à agregação de várias redes Perceptron interligadas, este tipo de rede é normalmente designado de “Rede Neural Perceptron Multicamada” (Multilayer Perceptron ou MLP). 
Figura 3 – Rede Neural MLP com 4 neurônios na camada de entrada, duas camadas escondidas de largura diferente e dois neurônios na camada de saida.
Fonte: Acervo do autor.
A rede neural produz um valor de saída que é a previsão do modelo baseada nos dados de entrada. Esse valor constitui uma aproximação do valor real/desejado e é simbolizado por para o distinguir do valor certo, simbolizado por y. 
Para medir a precisão do valor previsto pela rede neural, utiliza-se o conceito de Função de Perda , que compara o valor previsto com o valor esperado. Simbolizando como o vetor contendo todos os pesos sinápticos da rede, e fNN como uma função que descreve toda a rede neural, pode-se reescrever a Função de Perda em relação a estes componentes, tal como descrito em (2).
 (2)
O gradiente da função de perda, representado por , pode também ser computado, e é útil para medir a convergência do treinamento. 
O treinamento consiste no ajuste gradual dos pesos sinápticos dos vários neurônios que compõem a rede. Este ajuste ocorre para cada vetor do conjunto de dados de entrada. Para esta rede, essa atualização é efetuada de acordo com (3) (KETKAR, 2017). 
 (3)
	. A uma passagem de todos os valores de entrada de um conjunto de treinamento pela rede neural dá-se o nome de época ou epoch.
	A Função de Perda varia de acordo com o problema a ser avaliado. Para problemas de classificação com várias classes, é normalmente utilizada a função de Entropia Cruzada geral, (4).
 (4)
	Outra função a ter em conta na caracterização das redes neurais é a Função de Ativação aplicada à camada de saída. Em problemas multiclasse, como o da classificação categórica de emoções, utiliza-se normalmente a função softmax para ativação, que devolve a distribuição probabilística de cada uma das classes. A função softmax para um neurônio de saída i encontra-se descrita em (5).
 (5)
Outra função que merece destaque por ser utilizada neste trabalho é denominada de Unidades Lineares Retificadas (Rectified Linear Units ou ReLU). As ReLU são caracterizadas pela função definida em (6).
 (6)
	Esta função é utilizada muitas vezes nas camadas escondidas (KETKAR, 2017).
	Um último conceito a merecer atenção nesta temática é o de matriz de confusão. Trata-se de uma técnica muito utilizada em problemas de classificação para avaliar a precisão da rede neural (e de outros métodos de aprendizado, tais como Naive-Bayes e Máquinas de Vetor de Suporte) para cada classe individual. Basicamente, este método consiste em efetuar uma previsão de um conjunto de dados – por exemplo, o conjunto de teste do dataset – e utilizar uma matriz para comparar os resultados da previsão desse conjunto com os resultados reais. Os valores da diagonal dessa matriz correspondem aos valores que foram previstos corretamente. Quanto menos valores existirem fora da diagonal da matriz, mais exato será o modelo preditivo.
Metodologia
A pesquisa utilizada neste projeto assumiu inicialmente um caráter exploratório, com o intuito de adquirir conhecimento sobre a área e métodos de exploração do problema. É apresentada uma revisão bibliográfica que abrange desde os principais conceitos referentes à Inteligência Artificial e ao Aprendizado de Máquina até os conceitos específicos de Deep Learning e Computação Afetiva. Esta revisão foi realizada recorrendo aos bancos de dados do Portal CAPES e SciELO, bem como Bibliotecas de Universidades Federais e Estaduais, dissertações, teses, livros, revistas nacionais e internacionais, páginas web, para a coleta de informações, procurando obter um repertório de técnicas, abordagens e conceitos atuais relevantes para o projeto, além de adquirir conhecimento sobre as vertentes em desenvolvimento na área. 
Foi também dispendido algum tempo de pesquisa exploratória para aprofundamento da linguagem de programação Python (KETKAR, 2017; RICHERT & COELHO, 2013; RASCHKA, 2015), para desenvolvimento do sistema proposto. 
 Finalmente, foram também abordados conceitos de psicologia relacionados com a aprendizagem de emoções do ser humano, com o intuito de compreender o tema e obter uma prova de conceito que visa se aproximar do modelo humano.
Após a coleta e análise de dados e aquisição de conhecimento, a pesquisa assumiu uma vertente qualitativa e aplicada, com a criação de uma prova de conceito que consiste em um sistema computacional capaz de interpretar emoções humanas visualmente (através de imagensde rosto) e verbalmente (através de entrada de texto).
Materiais e Método
A linguagem Python foi escolhida como base para elaboração do sistema proposto, devido à sua facilidade de aprendizagem, versatilidade e quantidade de recursos disponíveis para desenvolvimento nos temas supracitados. Para este projeto, foi utilizada a versão 3.6.5, a mais atual até o momento. Esta versão foi disponibilizada junto com a distribuição Anaconda 5.2, também a mais atual até o momento. Dentro desta linguagem, os módulos numpy, pandas, sci-kit learn, matplotlib, opencv, dlib, tensorflow e keras merecem particular destaque pelo seu uso intensivo no desenvolvimento do código fonte. 
Numa primeira fase, foi utilizado o IDE Spyder, disponível com a distribuição Anaconda, como ambiente de trabalho principal para codificação dos modelos de aprendizado de máquina. A criação do aplicativo Web foi efetuada com auxílio da Framework Django e utilizando recursos do Bootstrap. Para este desenvolvimento, o Spyder foi preterido em função do IDE PyCharm. 
Para construir o conjunto de treinamento para reconhecimento de emoções em imagens foram utilizados 3 datasets preparados para esse fim:
Extended Cohn-Kanade Dataset (LUCEY et al., 2000): Trata-se de um banco de dados contendo 648 imagens de 123 indivíduos. Cada imagem é classificada com uma de oito expressões emocionais: Neutra, Raiva, Nojo, Medo, Felicidade, Tristeza, Surpresa e Desprezo.
Facial Expression Recognition Challenge – FER2013 (KAGGLE, 2013): Consiste em um conjunto de 32.298 imagens (28.709 para treinamento e 3.589 para teste), de tamanho 48x48 pixeis, em que cada imagem é classificada com uma de 7 expressões emocionais: Raiva, Nojo, Medo, Felicidade, Tristeza, Surpresa, Neutra. 
AffectNet Database (MOLLAHOSSEINI, HASANI, MAHOOR, 2017): É um dos datasets mais completos encontrados até ao momento, contendo 954.306 imagens classificadas em 11 categorias, classificadas de 0 a 10: 0-Neutra, 1-Raiva, 2-Felicidade, 3-Tristeza, 4-Surpresa, 5-Medo, 6-Nojo, 7-Desprezo, 8-Nenhuma, 9-Incerta, 10-Sem Face. Dessas imagens, 414.799 são anotadas manualmente, e as restantes 539.607 são classificadas com auxílio da Rede Neural do projeto ResNet, treinada com as imagens anotadas manualmente, e com uma precisão média de 65%. Cada imagem contém também uma classificação de níveis de valência e excitação, o que possibilita efetuar uma classificação dimensional das emoções em imagens.
Como primeira abordagem para a classificação de emoções em texto, pensou-se inicialmente em agrupar várias palavras com base no seu contexto semântico e classificar as emoções desses grupos. No entanto, essa abordagem se torna difícil e falível, pois é sabido que existem casos onde um contexto emocional pode ser descrito por palavras normalmente contrárias a esse contexto; por exemplo, a frase “nossa, seria bom não ter aula amanhã” poderia, por esta técnica, ser interpretada como uma frase de “Alegria” pela presença de uma palavra que indica positividade, como o “bom”. Assim, a abordagem adotada foi a de associar frases correntes do dia-a-dia com as emoções a elas associadas. 
Para esse efeito, recorreu-se ao “International Survey on Emotion Antecedents and Reactions” – ISEAR (RAZEK & FRASSON, 2017). Este dataset foi construido a partir de uma experiência em que 1096 participantes com diferentes históricos culturais responderam a um questionário onde lhes foi pedido que descrevessem experiências e reações para seis emoções: Raiva, Nojo, Medo, Tristeza, Vergonha e Culpa. O resultado consiste em 7666 frases com classificação emocional devidamente assinalada. 
Para efeitos de comparação, foi também incorporada no projeto uma ferramenta comercial da IBM. Trata-se de uma API de reconhecimento de emoções do projeto WATSON, de nome IBM Watson Tone Analyser (IBM, 2018). Este API está disponível para utilização gratuita num volume máximo de 1000 chamadas de servidor por mês. 
Todo o projeto foi concebido em um PC com processador Intel Core I7-5500U e 16Gb de RAM.
Desenvolvimento do Projeto
O sistema proposto é semelhante ao conceito de “Agente Inteligente”, termo utilizado para classificar um sistema que escolhe a melhor opção possível dentro de um determinado contexto ou situação. Esses sistemas são essencialmente compostos por um ou mais canais de comunicação que recebem determinados dados ou estímulos do ambiente circundante, normalmente utilizando alguns sensores. Os dados captados são analisados por um cérebro, que não é mais do que um conjunto de modelos treinados que determinam o estado do agente e decidem as ações a serem tomadas.
Os canais de comunicação na prova de conceito criada consistem em uma área de envio de fotos de rosto para interpretação de emoção em imagens, e uma área de entrada de texto para interpretação emocional em discurso. A ação tomada consiste unicamente em devolver ao usuário a sua interpretação das emoções interpretadas sobre a imagem ou texto enviados para análise. No entanto, este output pode ser facilmente extendido e utilizado em mecanismos de tomada de decisão. 
 O sistema desenvolvido encontra-se esquematizado na Figura 4.
Figura 4 – Estrutura do Sistema Projetado.
Fonte: Acervo do Autor.
Classificação de Emoções em Imagens
O reconhecimento de emoções em imagens contendo expressões faciais segue a estrutura apresentada no diagrama da Figura 5.
Figura 5 – Estrutura do mecanismo de reconhecimento de emoções em expressões faciais. 
Fonte: Acervo do autor.
As imagens carregadas no sistema são analisadas utilizando a biblioteca Open Source Computer Vision ou OpenCV (OPENCV, 2018) (BEYELER, 2015). Esta biblioteca, disponível para linguagens de programação como Java, Python e C++, apresenta vários recursos para Processamento Digital de Imagens. 
Para extrair os pontos de referência (landmarks) da imagem carregada, utilizou-se a biblioteca DLib (VAN GENT, 2016). Esta biblioteca inclui um predictor embutido nos seus métodos capaz de reconhecer faces em imagens e extrair delas 68 landmarks, que incluem pontos estratégicos nos olhos, boca, sobrancelhas e estrutura do rosto, tal como ilustrado na Figura 6.
Figura 6 – Landmarks obtidos pela biblioteca DLib.
Fonte: (ROSEBROCK, 2017)
O processo consiste em determinar as coordenadas espaciais de cada landmark¸ formando dois vetores contendo as coordenadas x e y de todos os pontos respetivamente, com o formato [x0, ... ,x67] e [y0, ... ,y67]. Em seguida, determina-se o valor do centro geométrico (xL,yL) dos landmarks através do cálculo da média dos valores de cada vetor, tal como descrito em (7). 
 (7)
Em seguida, calcula-se, para cada landmark, a distância euclidiana entre este e o centro geométrico previamente determinado. O resultado é um vetor contendo 68 distâncias euclidianas, de formato [d0, ... ,d67]. 
Este vetor é em seguida normalizado por forma a que todos os valores de distância euclidiana se encontrem confinados no intervalo [0,1]. O objetivo desta normalização é eliminar o ruído causado pela leitura de imagens de dimensões diferentes, obtendo uma relação que é independente do tamanho da imagem lida. 
Os valores obtidos são seguidamente enviados para o motor de inferência, que é composto por 2 classificadores: um baseado no algoritmo Naive-Bayes Gaussiano e um consituído por uma rede neural MLP.
O classificador MLP de landmarks consiste em uma rede neural MLP cuja estrutura se encontra ilustrada na Figura 7. É constituído por uma camada de entrada de 68 neurônios, duas camadas escondidas de 34 neurônios cada e uma camada de saída de 8 neurônios, que devolvem valores entre zero e um, representando a probabilidade de cada uma das 8 expressões faciais consideradas. A estrutura da Rede Neural foi determinada empiricamente. O modelo foi compilado utilizando Gradiente Estocástico Descendente e com taxa de aprendizado Lr= 0.00001. 
Para evitar problemas de overfitting no treinamento, foramadicionados ao modelo métodos de Batch Normalization e também um Dropout de 50%. A utilização destes dois mecanismos em simultâneo geralmente não é recomendada. No entanto, observações empíricas demonstraram que o treinamento do modelo decorria de forma mais estável desta forma, o que levou a adopção deste modelo. 
Tanto a camada de entrada como as camadas escondidas utilizam bias iniciado com valor arbitrário e ReLU como função de ativação. A camada de saída utiliza a função de ativação Softmax. O modelo foi treinado por 500 épocas, e o treinamento durou aproximadamente 3 horas.
Figura 7 - Estrutura do classificador MLP – Landmarks.
Fonte: Acervo do Autor
Para o treinamento deste modelo, foram aproveitados os datasets Cohn-Kanade, FER2013 e AffectNet. Da AffectNet foram excluídas todas as imagens classificadas com as categorias 8, 9 e 10, bem como todas as imagens para as quais não existe um conjunto completo de landmarks. Os datasets foram aglutinados em um novo conjunto de dados composto de 53217 imagens. Esse conjunto foi dividido em uma proporção 80-20 para treinamento e teste do modelo. A constituição dos conjuntos de treinamento é descrita na Tabela 1.
Tabela 1 – Constituição dos conjuntos de treinamento e teste.
Fonte: Acervo do Autor
Para avaliar a evolução do treinamento do classificador MLP, 20% dos dados de treinamen	to foram reservados para avaliação do mesmo. O processo de avaliação consiste em, após cada época de treinamento, submeter um conjunto de dados de entrada e saída ao modelo resultante do treinamento nessa época e analisar a precisão das previsões resultantes comparando os resultados obtidos com o conjunto de saída real do conjunto de avaliação. Esta técnica permite identificar a presença ou ausência de overfitting no treinamento. 
Para a criação do classificador Naive-Bayes, tentou-se inicialmente efetuar o treinamento com o dataset produzido. Os resultados, no entanto, foram bastante insatisfatórios, tendo sido obtida uma classificação média de 27.4% de precisão. Estes valores podem ser relacionados com a própria natureza do algoritmo; o fato de considerar que cada classe é independente das outras – o que não é necessariamente verdade no caso da classificação das emoções por posição de landmarks - torna este método relativamente ineficiente em grandes conjuntos de dados onde esteja presente bastante ruido.
Assim, decidiu-se preterir o dataset construido e treinar o classificador com o conjunto Cohn-Kanade. Tal como no treinamento do classificador MLP, o conjunto de treinamento foi dividido em uma proporção de 80-20, reservando 518 imagens para treinamento e 130 imagens para avaliação de precisão e construção da matriz de confusão. Devido à simplicidade do algoritmo e do conjunto significativamente reduzido de dados, o treinamento do modelo é bastante rápido (pode ser treinado em menos de 1 segundo), pelo que se decidiu efetuar um ciclo de 100 treinamentos do modelo, a fim de estimar a precisão média obtida. A matriz de confusão é também computada, para análise da precisão do modelo para cada classe individual.
A classificação final é obtida através de uma média ponderada baseada na precisão de cada modelo. Este mecanismo visa minimizar os erros cometidos por cada modelo individualmente, auxiliando na previsão correta da emoção.
Classificação de Emoções em Texto
Para classificação de emoções em texto, utilizou-se o classificador Naive-Bayes da biblioteca Textblob da linguagem Python. Esta biblioteca simplifica a programação de projetos de Processamento de Linguagem Natural, ao incorporar dentro da sua responsabilidade algumas das tarefas típicas destes projetos, como a codificação de valores categóricos em valores numéricos em formatos como o one-hot encoding. O script de treinamento foi baseado no trabalho de Nandi (2017). 
O processo de treinamento encontra-se descrito na Figura 8. 
Figura 8 – Fluxograma de treinamento do classificador de emoções em texto.
Fonte: Acervo do autor.
A fim de obter uma comparação com os sistemas comerciais atualmente em mercado, decidiu-se incorporar no sistema uma API comercial de reconhecimento e classificação de emoções, denominado de Watson Tone Analyzer (IBM, 2018). Este sistema, parte do sistema Watson da empresa IBM, utiliza análise linguística avançada para detecção das emoções e análise de tom de mensagens de texto. O texto a ser analisado pode ser submetido ao Tone Analyzer em formato de texto simples, HTML ou JSON. A IBM fornece as credenciais de acesso e o URL para onde o texto deve ser enviado por HTTP (via POST). Estes dados são utilizados para construir um script de avaliação das emoções por este sistema. Para este trabalho, optou-se por enviar os dados em formato de texto simples. 
A API devolve uma mensagem em formato JSON contendo os resultados da análise. Esses resultados são posteriormente formatados no sistema desenvolvido para apresentar a avaliação ao usuário. 
A descrição do processo de utilização da API do Tone Analyzer encontra-se descrita na Figura 9.
Figura 9 - Utilização da API do Watson Tone Analyzer.
Fonte: (IBM, 2018).
Atualmente, o Watson Tone Analyzer recebe e interpreta corretamente texto em Inglês e Francês. A resposta, com a interpretação desejada, é disponibilizada em vários idiomas, incluindo Português.
Desenvolvimento do sistema web
	A aplicação Web tem como objetivo fornecer uma interface user-friendly sob a qual o usuário possa utilizar o sistema composto pelos modelos treinados. Como o sistema assenta sob a Framework Django, a sua arquitetura assenta em um Model-View-Template (MVT). O sistema é assim composto por 4 “apps”:
TCC: Aplicativo principal, que serve como base para todo o sistema.
HomePage: Página principal estática do ambiente web.
Image: Aplicativo responsável pela interpretação de emoções em imagens.
Text: Aplicativo responsável pela interpretação de emoções em texto.
O front-end do sistema foi desenvolvido utilizando Hypertext Markup Language (HTML) e Cascading Style Sheets (CSS). Recorreu-se também à Framework Bootstrap 4 para auxiliar na criação de um layout com comportamento responsivo. O back-end do sistema foi desenvolvido em Python. 
Resultados e Discussão
Classificação de expressões faciais
	Os resultados do treinamento do modelo de classificação por MLP encontram-se descritos na Figura 10.
Figura 10 – Resultados do treinamento do classificador MLP: a) Variação dos valores da função de perda por época; b) Variação da Precisão do modelo; c) Precisão e função de perda finais.
b)
a)
c)
Fonte: Acervo do autor.
 	A precisão de 88,40% do modelo é satisfatória, superando algumas propostas de modelos incluídas no desafio da KAGGLE (2013), e mesmo o classificador baseado em Máquinas de Vetor de Suporte de Van Gent (2016). O modelo também é bastante mais simples e exige menos computação que vários modelos propostos baseados em Redes Neurais Convolucionais (CNN). Estes valores podem ser explicados pela redução de parâmetros necessários para a classificação das emoções; graças à determinação dos landmarks, um conjunto de 68 distâncias euclidianas é suficiente para uma interpretação satisfatória das emoções de um rosto em uma imagem.
Para o classificador Naive-Bayes Gaussiano, os resultados obtidos foram:
Precisão do último treinamento: 76,92%
Precisão média (100 treinamentos): 73,12%
A matriz de confusão encontra-se ilustrada na Tabela 2.
Tabela 2 – Matriz de confusão do classificador Naive-Bayes.
Fonte: Acervo do autor.
Na análise da matriz de confusão convém destacar que o modelo falhou a sua previsão nas duas imagens classificadas com a emoção “tristeza”, uma percentagem de 100% de insucesso na determinação desta emoção para o conjunto de validação considerado. O número de imagens neste conjunto é bastante reduzido para obter uma afirmação segura, mas é possível desde já inferir que o modelo poderá ter dificuldades na interpretação desta emoção. Outras classificaçõesque aparentam ter algum grau de incerteza correspondem ao “Nojo” (5 respostas certas em 11, correspondente a 45,45% de respostas certas) e à “Raiva” (1 resposta certa em 10 imagens, ou 10% de respostas certas). É possível esperar que o modelo apresente também dificuldades na classificação destas emoções. 
As deficiências supracitadas podem ser justificadas pela heterogeneidade do dataset Cohn-Kanade (LUCEY et al., 2000): das 648 imagens, apens 28 pertencem à classe “Tristeza” – 4,3%, 59 à classe “Nojo”- 9,10%, e 45 à classe “Raiva” – 6,94%. Outro fator a ter em conta é o fato de que algumas emoções apresentam valores de distâncias euclidianas muito próximas. Estes dois fatores combinados podem impactar significativamente um classificador baseado no algoritmo Naive-Bayes, que assume independência total das classes que analisa. 
Não obstante, os valores de precisão e os resultados obtidos para as restantes classes de emoções permitem considerar este classificador como viável para utilização no sistema. 
Classificação de Emoções em Texto
Para o classificador de texto baseado no algoritmo de Naive-Bayes obteve-se uma precisão de 76,21%, valor considerado aceitável dada a quantidade quase infinita de frases e textos que é possível formar a partir de um determinado léxico. A matriz de confusão encontra-se ilustrada na Tabela 3.
Tabela 3 – Matriz de confusão para o classificador de emoção em texto: Naive-Bayes.
Fonte: Acervo do autor.
O mecanismo de classificação criado com base na utilização do Watson Tone Analyzer foi inicialmente testado empiricamente, desenvolvendo-se para o efeito um script escrito na linguagem python que permite ler um bloco de texto, enviá-lo para a API e retornar a avaliação formatada. Dos 20 testes empíricos, a API retornou 100% de resultados corretos. O processo implementado no script foi aproveitado para a criação do sistema final.
Plataforma Final
O layout do sistema desenvolvido encontra-se ilustrado na Figura 11.
Figura 11: – Painéis do sistema Web desenvolvido: a) Página Principal; b) Classificação de emoções em texto; c) Classificação de emoções em imagem.
a)
b)
c)
Fonte: Acervo do Autor
Foram realizados vários testes ao sistema para testar seu desempenho e eficiência. Os testes são maioritariamente empíricos. 
Para testar o mecanismo de classificação de emoções em imagens, recorreu-se à utilização de algumas fotos presentes nos datasets utilizados para o treinamento, e algumas fotos aleatórias recolhidas por pesquisa na Internet. Essas fotos foram enviadas para o sistema de classificação de emoções em imagens, e avaliou-se a precisão do sistema, bem como o tempo de resposta do mesmo.
Os testes ao mecanismo de classificação de texto consistiram em escrever trechos aleatórios de texto em inglês na caixa de entrada do mesmo. Tal como na classificação de emoções em imagens, a precisão do sistema e o seu tempo de resposta foram avaliados.
Relativamente à previsão de emoção em imagens, todas as respostas foram praticamente imediatas. 
Alguns dos testes relativos à interpretação de emoções em imagens encontram-se ilustrados a seguir. A Figura 12 mostra a avaliação para uma emoção de felicidade. Os resultados encontram-se em baixo para cada classificador individual, sendo também apresentada a média ponderada dos classificadores e finalmente, a previsão do sistema, que corresponde à pontuação máxima dessa média ponderada.
 
Figura 12 – Teste de interpretação de emoções em imagens – felicidade.
 
Fonte: Acervo do autor.
	O primeiro fator a salientar é a classificação de 100% da classe “Alegria” pelo classificador Naive-Bayes, em contraste com a previsão relativa do classificador MLP. Esta classificação “absoluta” vai de encontro à natureza do próprio algoritmo que considera que cada classe é independente das outras. Neste teste, uma vez que o classificador acertou sua previsão, a classificação absoluta ajudou a obter uma previsão final correta, corrigindo a previsão efetuada pelo classificador MLP, que classifica a imagem com a emoção “Nojo” (de notar, no entanto, que a classe “Alegria” é a segunda melhor pontuada por este classificador, com um valor muito próximo da primeira – “Nojo”).
Figura 13 – Teste de interpretação de emoções em imagens – surpresa.
Fonte: Acervo do autor.
Na Figura 13, verificamos mais um teste onde a resposta dada pelo sistema – surpresa – é a correta. Neste caso, o classificador Naive-Bayes, com suas previsões “absolutas” quase induziu o sistema em erro; foi a pontuação alta do classificador MLP na classe “Surpresa” que permitiu a resposta correta do sistema. 
Esta situação mostra que o comportamento do classificador Naive-Bayes pode ser um risco; numa expressão menos favorável, um erro deste classificador pode induzir todo o sistema em erro. É o que acontece no teste ilustrado na Figura 14. 
Neste caso, a pontuação do classificador MLP, apesar de apontar um valor correto para a foto, não é suficiente para contrariar o valor “absoluto” errado dado pelo classificador Naive-Bayes, e o sistema acaba sendo induzido em erro. A média ponderada baseada nas precisões dos modelos foi criada com o propósito de minimizar este tipo de problemas; no entanto, este resultado prova que esta medida é insuficiente para eliminar os erros dos classificadores e deve ser revisada.
Figura 14 – Teste de interpretação de emoções em imagens – tristeza.
Fonte: Acervo do autor.
	De salientar ainda que o erro do classificador Naive-Bayes para a classe “tristeza” era já previsto pela análise da matriz de confusão do mesmo. 
	Na classificação de texto foram também efetuados alguns testes para determinação da precisão do sistema. Ao contrário do que ocorreu com a classificação das imagens, a resposta à classificação de texto demora alguns segundos, tornando-o impossível de aplicar em situações onde a resposta deve ocorrer em tempo real. Analisando os classificadores separadamente, verificou-se que o tempo que decorre entre o envio da mensagem via POST à API do Watson Tone Analyzer, e sua consequente resposta, são a principal causa da demora na resposta do sistema, sendo que o classificador Naive-Bayes apresenta a sua resposta em tempo real, praticamente imediato. 
Alguns dos testes efetuados com o classificador de texto do sistema encontram-se ilustrados a seguir. Até ao momento, a classificação pelo Tone Analyzer acertou todas as previsões, sendo os erros encontrados todos resultantes do classificador Naive-Bayes. A Figura 15 mostra uma situação em que ambos classificadores acertam na emoção demonstrada – “Alegria”.
Figura 15 – Teste de interpretação de emoções em texto – Alegria.
Fonte: Acervo do autor.
	A Figura 16 ilustra uma situação onde o Classificador Naive-Bayes falha sua previsão.	
Figura 16 – Teste de interpretação de emoções em texto – raiva.
Fonte: Acervo do autor.
	O erro efetuado pelo classificador Naive-Bayes pode ser explicado pela natureza do ISEAR. Tal como referido anteriormente, ele foi criado a partir de uma experiência onde um grupo de pessoas descreveu situações que lhes causavam uma determinada emoção. Assim sendo, ele não contém dados sobre outros tipos de discurso que não os descritivos de situações. Expressões emotivas como “I want to kill you...” não se inserem no tipo de dados contemplado pelo ISEAR, e como tal, é de esperar que os modelos treinados por este dataset sejam susceptíveis a erros quando presentes com este tipo de mensagens. 
Conclusões
A interpretação visual das emoções em imagens pode ser aperfeiçoada utilizando vários modelos de interpretação baseados em diferentes algoritmos e datasets. O desempenho dos modelos preditivos é suficientemente rápido para poder ser utilizado em tempo real (p.ex, em análise de emoções em streaming de video). 
A interpretação de texto, apesar de não ficar muito aquém das expectativas, necessita de aperfeiçoamento; apesar de fornecer uma resposta rápida, o que o tornaviável para utilização em sistemas de tempo real (p. ex. em chatbots), o classificador de Naive-Bayes não só é relativamente falível devido à sua natureza, como também consome bastantes recursos de memória RAM. Já o Watson Tone Analyzer, apesar de extremamente fiável, tem um tempo de resposta relativamente elevado (na ordem de segundos), o que o torna menos viável para utilização em tempo real.
Os estudos efetuados sobre as emoções humanas permitem concluir que o mecanismo neurofisiológico e cognitivo que as gera e governa é bastante complexo. As emoções não se manifestam apenas exteriormente; existem bastantes parâmetros fisiológicos a elas associadas, e imperceptíveis aos olhos e ouvidos humanos. Também importa observar que existem muito mais classes de emoções – emoções sociais - do que aquelas que são contempladas pela classificação de Ekman. 
A eficiência do ser humano em interpretar as emoções de outra pessoa não depende apenas da percepção visual e auditiva, mas também da vivência e experiência emocional de quem tenta interpretar essas emoções, e ainda da base de conhecimento que o sujeito retêm sobre o objeto (se já conhece a pessoa, se está habituado ao humor e expressões dela). Um sistema que almeja alcançar níveis elevados de precisão na detecção das emoções humanas tem obrigatoriamente de incorporar esses fatores na sua interpretação, e ser capaz de os captar, analisar e interpretar – no fundo, tem de “entender” todos os parâmetros que caracterizam uma emoção. 
Assim, não se pode esperar que um sistema que depende exclusivamente de apenas parte dos parâmetros que caracterizam um estado emocional possa fornecer uma interpretação ao nível da capacidade humana. Para atingir esse nível, o sistema desenvolvido deve ser integrado com outros sistemas; um que seja capaz de simular autopercepção emotiva – entender qual o seu estado emotivo com base em parâmetros que ele lê, e outro que seja capaz de reter conhecimento sobre os estados emotivos dos seres humanos com quem o sistema interage – ou seja, aprender como essas pessoas se comportam nos vários estados emotivos que experimentam. 
Integrando os três sistemas supracitados, é possível obter um sistema final que aprende as reações emotivas dos usuários com quem interage, compara-as com os seus próprios parâmetros emotivos, e consegue inferir assim uma interpretação mais completa e precisa sobre um determinado estado emocional. 
Não obstante, considera-se que o sistema desenvolvido oferece um desempenho satisfatório para a interpretação visual e linguística das emoções, tendo em conta meramente esses parâmetros para análise das mesmas, e pode servir como base integrante em projetos envolvendo Computação Afetiva. Para esse efeito, se enumeram em seguida algumas propostas:
Construção de Datasets de texto em Português com classificação de emoções: A baixa quantidade de dados devidamente formatados para classificar emoções em texto foi uma das grandes dificuldades do projeto. Os poucos datasets disponíveis, embora representem um trabalho notável, são ainda insuficientes para fornecer uma classificação precisa de emoções em texto face à praticamente infinita quantidade de frases que podem ser formadas em um idioma. Além disso, não foram encontrados datasets próprios para classificação de emoção em texto para a língua portuguesa. Os mesmos podem ser, no entanto, desenvolvidos com a tradução dos utilizados neste projeto.
Captação e classificação de comportamentos motivados e respostas límbicas emocionais para aprimoramento da percepção emocional do sistema. Este trabalho poderá ser a base de construção de um sistema de auto-percepção emocional, simulação computacional de emoções e desenvolvimento de personalidades virtuais. 
Aprimoramento dos mecanismos de classificação de emoções em texto e imagem através do teste e introdução de novos modelos de classificação.
Desenvolvimento de um assistente pessoal emocionalmente inteligente, que consiga interagir e tomar ações mediante o estado emocional do usuário.
Construção de personagens de jogos (Non-Playing Characters ou NPCs) com personalidade dinâmica e percepção emocional.
Agradecimentos
À MSc. Sullamy Dayse Gomes Aciole Salgueiro, por todo o apoio disponibilizado e partilha de experiência e conhecimento no âmbito de projetos de pesquisa e desenvolvimento. 
À MSc. Marcella de Oliveira Vicente Novais, pelo apoio disponibilizado e partilha de conhecimentos na área de neurofisiologia e psicologia das emoções.
Ao UNISAL, instituição que possibilitou a obtenção do grau de Bacharel, por oferecer excelentes professores que transmitiram importantes informações enriquecendo nossos conhecimentos, e pelos recursos disponibilizados.
Ao professor MSc. José Alexandre Nalon, pelo apoio no período inicial do projeto.
Ao professor PhD. Kléber de Oliveira Andrade, pela orientação e apoio prestados.
 
Referências Bibliográficas
BEYELER, M. OpenCV with Python Blueprints. Birmingham: Packt Publishing, 2015. 231p.
DÖVELING, K. Bilder von Emotionen - Emotionen durch Bilder. Eine interdisziplinäre Perspektive. Handbuch Visuelle Kommunikationsforschung. 2017. 1-20p. DOI: 10.1007/978-3-658-06738-0_5-1.
ERDEM, A.; KARAISMAILOĞLU, S.; Neurophysiology of Emotions. Chapter 1. 1-24p. In: GÖKÇAY, D.; YILDIRIM, G.; Affective Computing and Interaction: Psychological, Cognitive and Neuroscientific Perspectives. New York: Information Science Reference, 2011. 438p.
ESPERIDIÃO-ANTONIO, V. et al. Neurobiologia das Emoções. Rev. Psiq. Clín 35 (2); 55-65, 2008.
FGV ONLINE; Geração V. Curso EAD de Gestão Estratégica da Tecnologia da Informação. Notas de aula. Fundação Getúlio Vargas, 2018. 
GARTNER, INC. Leading the IoT. 2017. Disponível em: 	<https://www.gartner.com/imagesrv/books/iot/iotEbook_digital.pdf >. Acesso em: 12 nov. 2018.
GÖKÇAY, Didim. Emotional Axes: Psychology, Psychophysiology and Neuroanatomical Correlates. Chapter 3. 56-73p. In: GÖKÇAY, D.; YILDIRIM, G.; Affective Computing and Interaction: Psychological, Cognitive and Neuroscientific Perspectives. New York: Information Science Reference, 2011. 438p.
GONÇALVES, V. P. Uma Abordagem para Indicar o Estado Emocional de Usuários em Tempo de Interação. 2016. Tese (Doutorado em Ciências de Computação e Matemática Computacional) - Instituto de Ciências Matemáticas e de Computação, Universidade de São Paulo, São Carlos, 2016. 119p.
GONZALEZ, R. C.; WOODS, R. E.; Processamento Digital de Imagens. 3ª ed. São Paulo. Pearson Education do Brasil, 2010. 624p.
IBM. About: Tone Analyzer.	 Disponível em:	 <https://console.bluemix.net/docs/services/tone-analyzer/index.html#about>. Acesso em: 21 Out. 2018.
KAGGLE; Challenges in Representation Learning: Facial Expression Recognition Challenge. 2013. Disponível em:		 <https://www.kaggle.com/c/challenges-in-representation-learning-facial-expression-recognition-challenge/data>. Acesso em: 27 Mai. 2018.
KETKAR, N. Deep Learning With Python: A Hands-on Introduction. New York: Apress, 2017. 169p.
LUCEY, P. et al. The Extended Cohn-Kanade Dataset (CK+): A complete dataset for action unit and emotion-specified expression. In: IEEExplore Digital Library. IEEE Computer Society Conference on Computer Vision and Pattern Recognition – Workshops. 2000. DOI: 10.1109/CVPRW.2010.5543262.
MARR, B. What is Affective Computing And How Could Emotional Machines Change Our Lives? Forbes Now. Disponível em:	 <https://www.forbes.com/sites/bernardmarr/2016/05/13/what-is-affective-computing-and-how-could-emotional-machines-change-our-lives/#540820d0e580>. Acesso em: 19 ago. 2018.
MOLLAHOSSEINI, A.; HASANI, B.; MAHOOR, M. AffectNet: A Database for Facial Expression, Valence, and Arousal Computing in the Wild. IEEE Transactions on Affective Computing, 2017. 1-18p.
NANDI, D. Emotion Classification in Machine Learning. 2017. Disponível em:	 <https://medium.com/@debarghyanandi/emotion-classification-in-machine-learning-4183f6c5d07a>. Acesso em: 21 Out. 2018.
OPENCV, OpenCV Library. Disponível em: <https://opencv.org>.Acesso em: 11 Mar. 2018. 
PICARD, R. W. Affective Computing. M.I.T Media Laboratory Perceptual Computing Section Technical Report, nº 321. 16p. Massachusetts Institute of Technology, USA, 1997.
RASCHKA, S. Python Machine Learning. Birmingham: Packt Publishing, 2015. 454p.
RAZEK, M.; FRASSON, C.; Text-Based Intelligent Learning Emotion System. Journal of Intelligent Learning Systems and Applications. 2017. nº 9, 17-26p. DOI: 104236/jilsa.2017.91002.	 <https://www.scirp.org/journal/jilsa/>. Acesso em: 27 Set. 2018. 
REILLY, J.; GHENT, J.; MCDONALD, J.; Modelling, Classification and Synthesis of Facial Expressions. Chapter 7. p. 107-132. In: OR, Jimmy; Affective Computing: Focus on Emotion Expression, Synthesis and Recognition: Vienna: I-Tech Education and Publishing, 2008. 440p.
RICHERT, W.; COELHO, L. B. Building Machine Learning Systems with Python. Birmigham: Packt, 2013. 290p.
ROSA, J. L. G.. Aprendizado Probabilístico. USP, 2011. Disponível em:	 <http://wiki.icmc.usp.br/images/2/20/IA12-2011.pdf>. Acesso em: 20 Ago. 2018.
ROSEBROCK, A. Facial landmarks with dlib, OpenCV, and Python. PyImageSearch, 2017. Disponível em:	 <https://www.pyimagesearch.com/2017/04/03/facial-landmarks-dlib-opencv-python/>. Acesso em: 14 Mar. 2018.
SOYEL, H.; DEMIREL, H.; Facial Expression Recognition using 3D Facial Feature Distances. Chapter 1. p. 1-12. In: OR, Jimmy; Affective Computing: Focus on Emotion Expression, Synthesis and Recognition: Vienna: I-Tech Education and Publishing, 2008. 440p.
VAN GENT, P. (2016). Emotion Recognition Using Facial Landmarks, Python, DLib and OpenCV. A tech blog about fun things with Python and embedded electronics. Disponível em:	 <http://www.paulvangent.com/2016/08/05/emotion-recognition-using-facial-landmarks/>. Acesso em: 16 Mar. 2018.

Continue navegando