Estimativa da Resposta Glicêmica em Refeições para
Diabéticos Utilizando Visão Computacional
Julio Henrique Bitencourt, Marcus Hert da Corégio
Departamento de Ciência da Computação - Universidade do Sul de Santa Catarina (UNISUL)
Caixa Postal 370 – 88.704-900 – Tubarão – SC – Brasil {julio.bitencourt, marcus.coregio}@unisul.br
Abstract. This paper describes a computational model to estimate nutrients present in meals to diabetic people, through digital images. Techniques of digital image processing along with computational vision will be applied to treatment and standardization of acquired images, associated with machine learning techniques to recognition and classification of meal foods. The results taken by the model will be confronted against data present in nutritional tables, defining its inference. After the results validation we got 81,49% precision in food recognizing and a relative mean error of 12,56% on volume estimation.
Resumo. Este artigo descreve um modelo computacional para realizar estimativa de nutrientes presentes em refeições para pessoas diabéticas através de imagens digitais. Foram aplicadas técnicas de processamento digital de imagens juntamente com visão computacional para tratamento e padronização das imagens adquiridas, associadas a técnicas de aprendizado de máquina para reconhecimento e classificação dos alimentos da refeição. Os resultados obtidos pelo modelo foram confrontados com dados presentes em tabelas nutricionais, definindo sua inferência. Após a validação dos resultados foi obtido 81,49% de acerto no reconhecimento dos alimentos e erro médio relativo de 12,56% na estimativa de volume.
1. Introdução
A diabetes mellitus, ou apenas diabetes, é uma doença crônica metabólica caracterizada pelo aumento da glicose no sangue (ou glicemia). Ocorre por consequência de o pâncreas não conseguir produzir insulina suficiente ou o corpo não aproveitar eficientemente o nível de insulina produzido. A insulina por sua vez, é um hormônio que permite a entrada nas células, do açúcar que está no sangue para ser utilizado como fonte de energia [Sociedade Brasileira de Diabetes, 2015].
Em pesquisa realizada pela Organização Mundial de Saúde (2016), a prevalência de diabetes mundialmente para a população adulta saltou de 4,7% para 8,5% no período entre 1980 e 2014, chegando a atingir 422 milhões de pessoas. No Brasil, a incidência de diabéticos no último relatório realizado pelo Ministério da Saúde em parceria com o IBGE de 2015 era de 9 milhões de brasileiros [Portal Brasil, 2015], correspondendo a 6,2% da população adulta.
A diabetes pode ser caracterizada no geral entre dois tipos, o tipo 1 (um), onde o paciente necessita de injeções de insulina para a sobrevivência pois o corpo não produz, ou o tipo 2 (dois), quando é necessário ter o controle, uma vez que o corpo embora produza, não consiga fazer uso próprio da insulina, sendo o último tipo o mais comum [Sociedade Brasileira de Diabetes, 2016].
O tratamento geralmente é realizado em conjunto, através de uma combinação de medicações orais e injeções de insulina (obrigatório para casos do tipo 1), atividades físicas e o planejamento alimentar [Sociedade Brasileira de Diabetes, 2016]. No geral o tratamento adotado tem foco no controle da alimentação, tendo em vista que isso permite ao paciente uma nova reeducação e estilo de vida, afinal, a maioria dos pacientes com tipo 2 apresentam sobrepeso ou obesidade, comprovando que uma dieta equilibrada influencia diretamente no controle da diabetes ou até mesmo evita a obtenção da mesma [Sociedade Brasileira de Diabetes, 2015].
Segundo a Associação Brasileira de Diabetes 100% dos carboidratos ingeridos são transformados em glicose, sendo esse o nutriente com maior impacto no aumento da diabetes, seguido pelas proteínas com um valor entre 30 e 60%, e por final a gordura com somente 10% [Sociedade Brasileira de Diabetes, 2016]. A resposta glicêmica de um alimento no organismo está ligada a dois fatores. O primeiro é conhecido como índice glicêmico, que é uma medida que quantifica o tempo de absorção da glicose no sangue comparando com um alimento de referência (glicose ou pão branco), refletindo a qualidade do carboidrato. O segundo é denominado carga glicêmica, sendo uma medida para a quantidade e qualidade do carboidrato, é gerada através do produto do índice glicêmico pela quantidade de carboidrato e o resultado dividido por 100 (cem) [Cândido; Pereira; Alfenas, 2013].
Esse controle alimentar e identificação dos nutrientes que são ingeridos é muito moroso, forçando a pessoa a saber a quantidade dos alimentos e comparar com tabelas nutricionais, onde muita das vezes a mesma não possui acesso ou conhecimento desse tipo de recurso.
Para contribuir com a solução deste problema é proposto neste trabalho uma abordagem de reconhecimento automático dos alimentos através de imagens, estimando seus componentes nutricionais através de técnicas de Visão Computacional e Aprendizado de Máquina.
Desta forma, será obtido a resposta da pergunta que origina o desenvolvimento deste trabalho, sendo ela, como facilitar a identificação dos nutrientes de uma refeição, através de Visão Computacional, para o controle da quantidade necessária de ingestão, mantendo a diabetes equilibrada.
O artigo está estruturado da seguinte forma: a segunda seção apresenta os trabalhos existentes similares ao modelo proposto. A terceira seção refere-se à contextualização teórica sobre descritores de imagem, Bag of Features, Máquina de Vetores de Suporte (SVM), Transformada de Hough e segmentação Mean-Shift. A quarta seção descreve as ferramentas utilizadas no desenvolvimento da solução e o método computacional. A quinta seção apresenta os resultados obtidos com o sistema desenvolvido, bem como as discussões relacionadas à estes resultados. Por fim a sexta seção apresenta as conclusões relacionadas ao desenvolvimento do sistema e ideias para
trabalhos futuros.
2. Trabalhos correlatos
Zhang et al. (2015), apresentaram o desenvolvimento de um sistema para dispositivos móveis capaz de reconhecer alimentos e estimar os conteúdos calóricos e nutricionais dos mesmos sem intervenção do usuário, necessitando somente que seja tirada uma foto do prato. Através da imagem obtida o sistema detecta as regiões salientes, recorta as imagens e remove o fundo. Utilizando técnicas de segmentação hierárquica para separar a imagem em regiões, são extraídas as áreas de interesse de diferentes locais e escalas, classificando em diferentes tipos de alimentos usando um classificador baseado em Máquina de Vetores de Suporte (SVM).
Para estimar os nutrientes, o sistema identifica o tamanho da porção através da contagem dos pixels em cada segmento de alimento. Uma vez que o tamanho da porção seja determinado, o sistema pode obter os dados nutricionais através de alguma tabela nutricional existente.
Os autores avaliaram a performance do modelo com um conjunto de dados contendo 2000 imagens de 15 classes de alimentos pré-definidas, tendo de 100 a 400 exemplares de cada alimento no seu conjunto de dados e atingindo, em média, 85% de acurácia nos testes realizados.
Myers et al. (2015), utilizaram técnicas de geolocalização provenientes do smartphone do usuário para propor o sistema de reconhecimento e estimativa de nutrientes, baseado em restaurantes previamente cadastrados, onde existe o conhecimento do cardápio.
Para este trabalho, na etapa de reconhecimento dos alimentos, foi utilizado uma rede neural convolucional já treinada, retreinando apenas a última camada da rede de acordo com as novas imagens obtidas. Já para segmentar os diferentes tipos de alimentos de uma refeição, utilizou-se o auxílio do trabalho de Chen et al. (2017), onde foi apresentado o DeepLab, que realiza uma segmentação semântica através de Aprendizagem Profunda. Com a obtenção da máscara de segmentação, utilizou-se da mesma para realizar uma reconstrução 3D baseada na representação de Voxel, obtendo assim, a estimativa de volume de cada alimento.
Além desses, Kawano e Yanai (2013) desenvolveram um sistema para estimativa de nutrientes em tempo real, com a ajuda do próprio usuário desenhando quadrados na tela para a identificação e auxílio na segmentação dos alimentos. Após efetuar o desenho, a segmentação é realizada utilizando GrabCut [Rother; Kolmogorov; Blake, 2012], extraído o histograma de cores e a bag-of-features [Ohara; Draper, 2011] baseada em Speeded Up Robust Features (SURF) [Bay; Tuytelaars; Van Gool, 2006], finalmente culminando na classificação entre uma das 50 categorias com uma Máquina de Suporte de Vetores (SVM).
Nos experimentos, foi obtido 81,55% de taxa de acerto para as 5 principais categorias de alimentos quando as delimitações foram feitas corretamente.
Pode-se citar ainda o trabalho de Alves (2017), onde foi realizado um levantamento e análise dos trabalhos já existentes sobre o tema e técnicas utilizadas.
3. Contextualização
3.1. Descritores de Imagem
A percepção visual dos objetos é muito subjetiva, dessa maneira não há uma única e melhor representação de uma determinada característica visual.
Descritores de imagem [Guyon; Elisseef, 2017] são representações numéricas de características (ou pontos chaves) de uma imagem, extraídos através de um algoritmo de extração de características, podendo ser divididas como sendo de domínio geral ou domínio específico. O primeiro inclui características de cor, textura e forma, e o último é dependente da aplicação, podendo ser utilizado para descobrir objetos já conhecidos em uma imagem.
O algoritmo SIFT (Scale-Invariant Feature Transform), proposto por Lowe (2004) realiza extração de pontos chaves (Figura 1), tendo como principal característica a invariância à transformações na imagem, como a escala, rotação e iluminação. Outro algoritmo muito utilizado para esta finalidade proposto por Bay, H., Tuytelaars, T. e Van Gool, L., (2006) é chamado de SURF (Speeded-up Robust Features). Sendo uma versão descrita como mais rápida que o SIFT, pois altera alguns métodos utilizados por versões de aproximação com pouca perda na precisão.
Figura 1. Exemplo de extração e comparação de características de duas imagens. Cada ponto representa uma característica.
Fonte: Autores. 3.2. Bag of Features
Bag of Features (BoF) é um método utilizado para categorização de objetos inspirado na Bag of Words (BoW) [Zhang; Jin; Zhou, 2010], que é muito utilizado para classificação de textos. O primeiro passo da BoW é transformar os textos de uma base de dados em palavras, para dividir os documentos em componentes menores. Da mesma maneira acontece com as imagens, onde também podem ser divididas em regiões menores. Porém isso já é feito pelo algoritmo de extração de características, então podemos apenas inserir essas regiões de interesse na BoF.
O processo consiste em pegar cada ponto chave inseridos e agrupá-los em várias “palavras visuais”, ou seja, associar cada ponto chave a algum elemento da imagem. Para isso, um algoritmo de clusterização (K-means [Alsabti; Ranka; Singh, 1997], por exemplo) é utilizado para gerar as palavras visuais.
Dessa forma conseguimos ter um agrupamento de características que representam o mesmo elemento na imagem. Uma vez que é feito isso para todas as imagens, temos as regiões que representam o mesmo local da imagem separadas de outras regiões diferentes, facilitando assim a comparação de imagens.
3.3. Máquina de Vetores de Suporte (SVM)
Proposto por Boser, Guyon e Vapnik (1992) as máquinas de vetores de suporte (SVM) são sistemas de aprendizagem de máquina que usam espaços de hipóteses de funções lineares na alta dimensionalidade característica do espaço. Sua aprendizagem é supervisionada e pode ser utilizado tanto para classificação quanto para regressão. Neste algoritmo, cada dado é inserido em um plano n-dimensional (onde n é o número de características) com o valor de cada característica sendo o valor da coordenada no plano. Então é encontrado o hiperplano que consegue separar as duas classes (Figura 2).
Figura 2. Duas classes separadas por um hiperplano no SVM. Fonte: Autores.
O hiperplano pode ser considerado como uma linha que separa e classifica os dados. Quanto mais longe um ponto está do hiperplano maior a confiança de que ele pertence a determinada classe.
3.4. Transformada de Hough
A Transformada de Hough, proposta em sua forma original por Hough (1962) e aprimorada posteriormente por Duda e Hart (1972), trata-se de um procedimento computacional para a detecção de formas geométricas em uma imagem digital, desde que a mesma possa ser representada matematicamente.
Para utilização da técnica, é necessário previamente que a imagem a ser processada tenha sido tratada através de um algoritmo de detecção de bordas, como o algoritmo Canny (1986).
Podemos ter como exemplo a detecção de um círculo, sabemos que o mesmo pode ser representado matematicamente de forma polar:
cosθ x0 = x − r sinθ y0 = y − r Onde: ● x e = Coordenadas x e y quaisquery ● x0 = O valor no eixo x do centro ● y0 = O valor no eixo y do centro
● r = O raio do círculo ● θ = O ângulo do raio
Como a representação de um círculo se dá por três variáveis ( x0, y0 r e ) o parâmetro espacial a ser construído é tridimensional. A partir dessa representação matemática polar, em que é incluso o ângulo na fórmula para representação de um ponto do círculo, para cada pixel pertencente as bordas detectadas na imagem, o algoritmo irá criar um círculo no parâmetro espacial (Figura 3), onde cada valor desse círculo irá votar no seu espaço determinado. Com o parâmetro espacial construído, será encontrado a máxima, valor com maior votos dentro do espaço. Essa coordenada indicará o centro de um possível círculo na imagem.
Figura 3. Em (a) uma imagem contendo um círculo com o filtro de Canny aplicado, já em (b) uma representação do parâmetro espacial da imagem, formando a máxima no centro do círculo
detectado. Fonte: Autores.
3.5. Segmentação Mean-Shift
Segundo Gonzalez e Woods (2007), segmentação é um processo de divisão da imagem em diferentes regiões de interesse, baseado em alguma característica por similaridade, sendo esse nível de detalhe da região dependente do tipo de problema a ser resolvido. A mesma pode ser dividida em categorias como, baseada em threshold, baseada em bordas, baseada em região, através de técnicas de clusterização ou matching.
O mean shift [Comaniciu; Meer, 2002] é um algoritmo não-paramétrico de clusterização, que possui como uma das aplicações a segmentação de imagens digitais. Diferentemente do K-means [Alsabti; Ranka; Singh, 1997], que também é um algoritmo de clusterização, possui como vantagens a não necessidade de determinar um valor 'k' (número de clusters) para o agrupamento dos clusters e a facilidade de possuir apenas um parâmetro para ser definido em sua execução, a largura de banda, porém, no geral acaba sendo mais lento.
O algoritmo funciona alterando interativamente os pontos no espaço em direção do centróide do cluster mais próximo, sendo essa direção definida pela coordenada em que há maior concentração de pontos (densidade). Portanto, a cada iteração, os pontos são atraídos para os centróides, até que haja uma convergência, definindo os clusters existentes. A determinação da quantidade de clusters é realizada automaticamente e totalmente dependente dos dados a serem trabalhados.
Para a definição da densidade dos pontos é utilizado um kernel, geralmente o kernel gaussiano, junto com uma largura de banda definida parametricamente para o mesmo.
4. Materiais e Métodos 4.1 Ferramentas
Para realizar o desenvolvimento do modelo foi utilizada como linguagem de programação Python, versão 3.5.4, com o auxílio da IDE PyCharm. Assim como para a manipulação das imagens foi utilizado o OpenCV, em sua versão 3.2.0. Além disso, para a aplicação de aprendizagem de máquina foi feito uso da biblioteca scikit-learn, que contém a implementação de diversos algoritmos sendo open-source e livre para uso acadêmico e comercial.
As imagens utilizadas para o treinamento do modelo foram extraídas de 2 fontes diferentes, do dataset Food-101 [Bossard; Guillaumin; Van Gool, 2014] que contém 101 categorias de alimentos com 1000 imagens cada e do UECFOOD100 [Matsuda; Hoashi; Yanai, 2012] que é um dataset focado em comidas asiáticas, com 100 categorias de quantidades variadas, possuindo no total aproximadamente 14000 imagens.
Por fim, como fonte de dados dos nutrientes de cada alimento foi utilizada a tabela TACO [TACO, 2011] em sua quarta versão, para extração da quantidade de carboidratos por grama dos alimentos, e por não existir uma base de dados nacional com informações de índice glicêmico, foi utilizado a tabela internacional de composição de alimentos [Foster-powell; Holt; Brand-miller, 2002].
4.2 Método computacional
4.2.1 Base de dados
Tendo em vista que não há uma base de dados pública com alimentos brasileiros, e que as internacionais existentes possuem muitos alimentos diferentes de nossa cultura, além de conter imagens aleatórias que não condizem com a classificação, foi selecionado 5 classes de alimentos como categorias, para compor uma nova base de imagens a ser utilizada, através da realização de uma mineração entre as imagens das fontes citadas, incluindo o uso de recorte e redimensionamento caso necessário, para dar ênfase a área do alimento (Figura 4).
Figura 4. Em (a) uma imagem de refeição originada do dataset UECFOOD100. Em (b) a extração da parte utilizada no treinamento do classificador para o arroz.
Fonte: Autores.
Os alimentos selecionados para o presente trabalho são: o arroz, o macarrão, a carne, a asa de galinha e a batata frita (Figura 5). Cada alimento possui 400 imagens, compondo uma base de 2000 imagens distintas.
Figura 5. Exemplos de imagens do dataset construído. Em (a) o arroz, em (b) o macarrão, em (c) a asa de galinha, em (d) a carne e em (e) a batata frita.
Fonte: Autores.
4.2.2 Treinamento do classificador
Para que o SVM possa realizar as classificações dos alimentos, é necessário que o mesmo seja treinado, formando assim o hiperplano que separa cada classe de outra. O treinamento é o processo de obter conteúdo que é conhecido por pertencer a classes específicas e criar um classificador com base nesse conteúdo.
Para o treinamento, como as imagens do dataset possuem os mais diversos formatos, não havendo um padrão na representação dos alimentos, não foi realizado uma segmentação prévia dos mesmos. Foi utilizado 70% da quantidade de imagens de cada alimento, totalizando 1400 imagens de treino. Cada imagem passou por um pré-processamento para que todas estejam padronizadas:
1. Redimensionamento para 200 pixels de largura por 200 pixels de altura; 2. Conversão da imagem para tons de cinza
3. Extração das características;
4. Adição das características na Bag of Features.
O passo 1 é necessário para que seja reduzido o tempo de processamento computacional, pois os algoritmos trabalham pixel a pixel, dessa maneira reduzimos a quantidade deles, perdendo pouco da qualidade das informações na imagem.
Como a cor das imagens aumenta a complexidade do modelo, pois elas são divididas em 3 canais: vermelho, verde e azul (RGB), se faz necessário o passo 2. Nele a imagem é convertida para tons de cinza, tornando-se uma imagem também denominada 8 bit ou monocromática, pois guarda a intensidade do branco ao preto em um único canal [Gonzalez; Woods, 2007]. As cores também podem ser desconsideradas pois há alimentos que se parecem muito na cor, como a batata frita e o macarrão, dessa forma levar em conta apenas essa característica pode acarretar em erros não desejados.
No passo 3 é feita a extração das características, foi utilizado dois algoritmos, SIFT e SURF, para efeito de comparação da performance.
Por fim, no passo 4, todas as características extraídas da imagem são adicionadas à Bag of Features para que, posteriormente, sejam processadas e agrupadas de acordo com sua similaridade.
Após os passos anteriores, é feita a clusterização da Bag of Features utilizando K-means [Alsabti; Ranka; Singh, 1997] para separar as características em 500 palavras visuais (clusters), e em seguida acrescentadas no SVM juntamente com a informação da classe correspondente para que o algoritmo possa realizar a aprendizagem.
O SVM utiliza uma função linear para separar as classes contidas no seu plano, isto é, todo hiperplano é uma “reta” (Figura 6a). Tendo em vista que as características extraídas dos alimentos na maioria das vezes não são linearmente separáveis, foi utilizada uma função de base radial [Schaback, 2007] para criação do hiperplano (Figura 6b).
Figura 6. Em (a) representação dos hiperplanos com funções lineares. Em (b) representação dos hiperplanos utilizando função de base radial.
Fonte: Autores.
As classes são mais facilmente identificáveis com a função de base radial, pois ela permite um formato mais apropriado do hiperplano com relação aos vetores de suporte de determinada classe.
4.2.3 Identificação do prato
Uma vez que a primeira parte, do classificador, está finalizada, é necessário que para cada imagem de entrada a ser classificada, sejam eliminados o máximo de informações que não auxiliam o processo de identificação dos alimentos, mantendo apenas o necessário para posterior classificação e estimativa de volume. Com isso, a primeira etapa baseada nas imagens para validação deste modelo, é a identificação do prato ao qual os alimentos estão presentes.
Sabemos que nas imagens de validação deste trabalho o formato dos pratos são circulares, portanto, foi aplicado a técnica de Transformada de Hough para identificação da circunferência que representa a área do prato na imagem.
Para aplicar o Hough, a imagem foi primeiramente transformada para tons de cinza, e após isso, aplicado o operador Canny para a detecção das bordas na imagem.
Ao analisar os resultados, foi identificado que as mesmas possuíam pontos muito nítidos de reflexo da luz, que causavam a má detecção de bordas, que posteriormente dificultavam a boa performance do Hough, portanto, antes de transformar a imagem em 8 bit, foi aplicado o filtro de mediana [Gonzalez; Woods, 2007], para suavização e remoção desses ruídos (Figuras 7 e 8).
Figura 7. Em (a) a imagem original e sua representação após aplicar o Canny. Já em (b) a imagem com o filtro de mediana aplicado e a melhora no resultado do Canny.
Fonte: Autores.
O algoritmo de Hough, tem por suas características ser muito dependente dos parâmetros a serem usados na detecção do círculo, e por sua vez, esses parâmetros são muito variáveis de imagem para imagem, o que acaba dificultando a otimização do resultado. Portanto, como se tem um tamanho do raio do círculo conhecido, e o mesmo se parece em todas as imagens, foi executado um algoritmo de força bruta para detectar quais parâmetros se comportam de melhor forma. Obtendo como resultados:
● Valor mínimo raio: 100 ● Valor máximo raio: 110
● Número de votos necessários dentro do espaço para definir que é um círculo: 50 ● Razão inversa do array acumulador: 2
● Distância mínima entre o centro dos círculos detectados: 100
Figura 8. Em (a) a imagem original, em (b) o filtro de mediana aplicado, em (c) a imagem em 8 bit, em (d) o algoritmo de Canny, em (e) o círculo encontrado.
Fonte: Autores.
Com o círculo detectado, é então realizado a remoção da área exterior e recorte apenas da área de interesse (Figura 9).
Figura 9. Em (a) o círculo detectado, em (b) a área externa da imagem removida. Fonte: Autores.
4.2.4 Identificação dos alimentos Segmentação
Uma vez que apenas a área do prato está identificada, é possível dar início a segmentação, para isso, foi utilizado o algoritmo mean shift com o kernel gaussiano e a distância de banda de 30, identificada através de testes na performance do mesmo (Figura 10).
Figura 10. Em (a) a segmentação dos alimentos, em (b) os alimentos extraídos individualmente. Fonte: Autores.
Identificação SVM
O reconhecimento dos alimentos por parte do SVM é relativamente simples. Como os hiperplanos que separam as classes já estão formados, basta inserir um novo vetor de suporte e calcular a margem dele em relação aos hiperplanos que o separa das outras classes (Figura 11).
Figura 11. Em (a) previsão dos novos vetores de suporte (círculos roxos). As flechas representam as margens. Em (b) os novos vetores já associados a classe dos círculos vermelhos.
4.2.5 Estimativa do volume
Para a estimativa do volume, é necessário que a imagem possua um objeto conhecido previamente pelo modelo. Na implementação do presente trabalho foi escolhido o dedo indicador para ser este objeto, assim como adotada uma medida padrão para o dedo, sendo 6 centímetros de comprimento por 1,7 centímetros de largura.
Com isso, podemos identificar esse objeto na imagem através de extração de características e a homografia [Dubrofsky, 2007] do mesmo, obtendo as dimensões dele (Figura 12).
Figura 12. Objeto conhecido encontrado na imagem com suas dimensões. Fonte: Autores.
Uma vez que a imagem é segmentada, ou seja, os alimentos são separados em imagens diferentes, conseguimos obter a quantidade de pixels que cada um ocupa (Figura 13).
Figura 13. Alimento extraído do prato. Fonte: Autores.
Consideramos todos os alimentos como sendo dispostos em um formato circular para o cálculo, então realizamos uma operação algébrica para calcular a altura e largura em pixels do mesmo:
, w
h =
√
(√P/2)² * π Onde:● h = altura em pixels do segmento ● w = largura em pixels do segmento
● π = 3,14
A altura e largura estão em pixels, então é necessário que elas sejam convertidas para centímetros utilizando a seguinte fórmula, que é uma regra de três básica:
x =
dd
D dd*
Onde:
● dd = dimensão em pixels do objeto conhecido ● Dd = dimensão em centímetros do objeto conhecido ● d = dimensão em pixels do segmento
● x = dimensão em centímetros do segmento
O resultado é a transformação das dimensões dos pixels para centímetros, assim, o próximo passo é o cálculo do volume, para isso foi utilizado como profundidade do prato um valor padrão de 2 centímetros e a fórmula de cálculo de volume de um paralelepípedo:
V = h * w * a Onde:
● h = comprimento em centímetros ● w = largura em centímetros
● a = altura em centímetros (valor padrão 2) ● V = volume
4.2.6 Estimativa da massa
As tabelas de informações nutricionais de alimentos fornecem os dados de acordo com a porção em gramas, portanto se faz necessário saber a massa dos alimentos em cada prato, a qual se dá pela seguinte fórmula.
assa densidade olume
m = * v
O valor da densidade utilizado para cada alimento foi: ● arroz = 1,13 g/cm³
● batata frita = 0,5 g/cm³ ● macarrão = 1,15 g/cm³ ● carne = 0,75 g/cm³
● asa de galinha = 1,74 g/cm³
Tais valores foram obtidos de acordo com a área que ocupavam no prato e a massa de cada um que foi pesada em uma balança de precisão no momento da captura. Tendo isso basta calcularmos o volume dos mesmos e utilizar a fórmula para descobrir a densidade (Figura 14).
Figura 14. Imagens utilizadas para cálculo da densidade de cada alimento. Fonte: Autores.
5. Resultados e discussões
Os resultados do reconhecimento dos alimentos foram obtidos realizando a validação com 30% do tamanho da base de dados, 120 imagens de cada alimento. Para cada um dos algoritmos de extração das características, SIFT e SURF. Com essa quantidade foi possível obter 75,6% de precisão geral para o SURF e 76,83% para o SIFT.
Como a base de dados é relativamente pequena, e os algoritmos que extraem características são invariantes a rotação, foram geradas cópias das 2000 imagens originais, com 90º e 180º de rotação (Figura 15), formando assim uma maior quantidade de dados (1200 imagens por alimento). Como consequência, houve um aumento da precisão (após novo treinamento/teste - 70%/30%) de 5,45% para o SURF e 4,66% para o SIFT (Tabela 1), sendo este último o resultado de maior precisão. Embora em todos os testes realizados o SURF apresentou uma velocidade muito superior na extração das características. No gráfico 1 podemos comparar a quantidade de acertos entre o SIFT e SURF para cada classe de alimento.
Figura 15. Exemplo das imagens geradas por rotação. Em (a) imagem original. Em (b) cópia da imagem original rotacionada 90º para esquerda. Em (c) cópia da imagem original rotacionada 180º
para esquerda. Fonte: Autores.
Gráfico 1. Comparação de previsões corretas entre SIFT e SURF para cada classe. Fonte: Autores.
Tabela 1. Matriz de confusão com a maior precisão de cada classe na base de dados com 1200
imagens por classe, sendo 360 para testes, utilizando o algoritmo SIFT. Fonte: Autores.
Podemos notar que as classes com menor porcentagem são a galinha que houve 58 casos classificados como carne, e também a carne que teve 61 casos classificados como galinha. Em análise as imagens, foi possível deduzir que isso ocorre devido a semelhança de formato e intensidade de cor entre os mesmos, ocasionando o erro na hora da classificação. Por outro lado o arroz e batata frita, por serem bem distintivos visualmente, apresentaram a maior porcentagem de acerto em todos os testes.
Para a validação do cálculo de estimativa de volume e massa foram obtidas 19 imagens dos alimentos dispostos em um prato, sendo que cada alimento foi identificado o seu peso em gramas através da medição em uma balança de alta precisão. Os resultados obtidos se aproximaram do cálculo real (Tabela 2). Nos exemplos onde o resultado deu uma diferença maior, foi analisada a imagem e notado que as mesmas possuem ruídos que atrapalham na segmentação, considerando a área do alimento maior ou menor, como é o caso do arroz nas imagens 7 e 8 da tabela 2.
Tabela 2. Resultado das estimativas de volume para as imagens utilizadas na validação do cálculo de volume.
Fonte: Autores.
Através de uma média aritmética simples geral, a diferença do valor médio estimado 53,17g para o real 50,25g foi pequena, de apenas 2,92g. Para entender melhor a aproximação entre os resultados estimados e reais das massas dos alimentos, também foi extraído o chamado Erro Relativo (ER) [Campos, 2003] para cada resultado, obtendo assim o Erro Relativo Médio (ERM) para cada alimento, e finalmente como resultado final o ERM geral de 12,56%, significando que como um todo o cálculo de estimativa dos alimentos possui 87,44% de sucesso.
Nos gráficos 2 e 3 podemos ver a diferença entre os valores de massa estimados e reais representados em um gráfico de linha para as duas classes que tiveram a maior (17,43%) e menor (7,16%) taxa de erro relativo, que são a galinha e a carne, respectivamente.
Fonte: Autores.
Gráfico 3. Diferença entre os valores de massa estimados e reais da carne. Fonte: Autores.
Por fim, a figura 19 representa duas refeições com o processo de extração dos dados de nutrientes concluídos, sendo eles a massa em gramas, o Índice Glicêmico (IG), a Carga Glicêmica (CG) e a quantidade de carboidratos (CHO).
Figura 16. Imagens com os seus dados nutricionais extraídos. Fonte: Autores.
6. Conclusões
Neste trabalho foi apresentado um modelo capaz de reconhecer alimentos e estimar os nutrientes dos mesmos. Ele se mostrou bastante preciso mesmo com uma base de dados relativamente pequena, obtendo em torno de 81,49% de precisão em suas previsões.
Em relação a estimativa de volume as imagens dos alimentos capturadas em laboratório continham alterações de luz, o que causou um pouco de ruído nas imagens dificultando assim a segmentação dos alimentos. Contudo, para os pratos onde a segmentação ocorreu corretamente, o cálculo foi relativamente preciso, tendo como um todo o erro médio relativo de 12,56%.
O modelo em comparação com os trabalhos correlatos trás uma nova proposta de segmentação, através do algoritmo mean-shift, com o objetivo de não necessitar a definição prévia da quantidade de alimentos existentes (clusters) na imagem da refeição,
onde os resultados foram bons, porém suscetíveis à ruídos proveniente da iluminação, como os reflexos da luz, que acabam alterando as características da imagem.
Também foi proposto uma rotação das imagens pertencentes ao dataset, uma vez que os detectores de características são invariáveis a rotação, ocasionando o aumento de dados e consequente melhora na acurácia do reconhecimento. Já o cálculo de volumes, se comparado com o trabalho de Myers et al. (2015), foi proposto uma solução mais simples através da estimativa baseada em um objeto conhecido, sem a necessidade de reconstrução em 3D dos alimentos ou a obtenção de fotos em diversos ângulos para extração de maiores informações, e embora limitado, os resultados foram significativos.
Para trabalhos futuros pretende-se criar uma base de dados de alimentos locais, que façam parte da cultura brasileira, bem como uma quantidade maior de imagens. Além disso, trabalhar na melhora da segmentação da imagem, como aplicação de filtros para remoção de focos de luz e outros agentes, para que possa ser trabalhado com todos tipos de imagens, conseguindo a identificação dos alimentos em quaisquer recipientes ou ambientes, não apenas de laboratório. Para o cálculo de volume, aprimorar as técnicas deixando o resultado mais preciso, levando em consideração os diferentes formatos dos alimentos.
Referências
ALSABTI, Khaled; RANKA, Sanjay; SINGH, Vineet. An Efficient K-Means
Clustering Algorithm. 1997. Disponível em:
<https://www.cs.utexas.edu/~kuipers/readings/Alsabti-hpdm-98.pdf>. Acesso em: 08 nov. 2017.
ALVES, Maria Carolina Magalhães. Modelo de estimativa de valores nutricionais, calóricos e glicêmicos por meio de reconhecimento de alimentos em imagens
digitais. 2017. Disponível em:
<http://www.fumec.br/revistas/sigc/article/view/5040/2697>. Acesso em: 01 nov. 2017. BAY, Herbert; TUYTELAARS, Tinne; VAN GOOL, Luc. SURF: Speeded Up Robust Features. 2006. Disponível em: <http://www.vision.ee.ethz.ch/~surf/eccv06.pdf>. Acesso em: 03 jul. 2017.
BOSER, Bernhard e; GUYON, Isabelle M; VAPNIK, Vladimir N. A Training Algorithm for Optimal Margin Classifiers. 1992. Disponível em: <http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.103.1189&rep=rep1&type= pdf>. Acesso em: 07 nov. 2017.
BOSSARD, Lukas; GUILLAUMIN, Matthieu; VAN GOOL, Luc. Food-101 – Mining Discriminative Components with Random Forests. 2014. Disponível em:
<http://www.vision.ee.ethz.ch/~lbossard/bossard_eccv14_food-101.pdf>. Acesso em: 03 jul. 2017.
CAMPOS, Nuno Ayres de. INTRODUÇÃO À ANÁLISE DE DADOS NAS MEDIDAS DE GRANDEZAS FÍSICAS. 2003. Disponível em: <http://www.fis.uc.pt/data/20032004/apontamentos/apnt_115_11.pdf>. Acesso em: 14 nov. 2017.
Gonçalves. 2013. Uso do índice glicêmico na educação nutricional. Revista de Nutrição, Viçosa, v. 1, n. 26, p.89-96, fev. 2013. Disponível em: <http://www.scielo.br/pdf/rn/v26n1/09.pdf>. Acesso em: 29 mar. 2017.
CANNY, John. A Computational Approach to Edge Detection. 1986. Disponível em: <http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.420.3300&rep=rep1&type= pdf>. Acesso em: 08 nov. 2017.
CHEN, Liang-chieh et al. DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs . 2017. Disponível em: <https://arxiv.org/pdf/1606.00915.pdf>. Acesso em: 01 nov. 2017. COMANICIU, Dorin; MEER, Peter. Mean Shift: A Robust Approach toward Feature Space Analysis. 2002. Disponível em:
<http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.76.8968&rep=rep1&type=p df>. Acesso em: 08 nov. 2017.
DUBROFSKY, Elan. Homography Estimation. 2007. Disponível em: <http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.186.5926&rep=rep1&type= pdf>. Acesso em: 11 nov. 2017.
DUDA, Richard O.; HART, Peter E.. USE OF THE HOUGH TRANSFORMATION TO DETECT LINES AND CURVES IN PICTURES . 1972. Disponível em: <http://www.dtic.mil/dtic/tr/fulltext/u2/a457992.pdf>. Acesso em: 08 nov. 2017.
FOSTER-POWELL, Kaye; HOLT, Susanna Ha; BRAND-MILLER, Janette C. International table of glycemic index and glycemic load values: 2002 . 2002.
Disponível em:
<http://abran.org.br/wp/wp-content/uploads/2012/10/Am-J-Clin-Nutr-2002-Foster-Pow ell-5-56.pdf>. Acesso em: 12 nov. 2017.
GONZALEZ, Rafael C.; WOODS, Richard E.. Digital Image Processing. 3. ed. Tennessee: Pearson, 2007. 954 p.
GUYON, Isabelle; ELISSEEF, André. An Introduction to Feature Extraction.
Disponível em:
<http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.85.1752&rep=rep1&type=p df>. Acesso em: 26 out. 2017.
KAWANO, Yoshiyuki; YANAI, Keiji. Real-time Mobile Food Recognition System.
2013. Disponível em:
<https://pdfs.semanticscholar.org/92f4/2503f0e6cf98bf8b97a139002e66f4476849.pdf>. Acesso em: 02 nov. 2017.
LOWE, David G.. Object Recognition from Local Scale-Invariant Features. 1999. Disponível em: <http://www.cs.ubc.ca/~lowe/papers/iccv99.pdf>. Acesso em: 10 out. 2017.
MATSUDA, Yuji; HOASHI, Hajime; YANAI, Keiji. RECOGNITION OF MULTIPLE-FOOD IMAGES BY DETECTING CANDIDATE REGIONS . 2012. Disponível em: <http://foodcam.mobi/dataset100.html>. Acesso em: 01 ago. 2017. MYERS, Austin et al. Im2Calories: towards an automated mobile vision food diary.
2015. Disponível em: <https://www.cs.ubc.ca/~murphyk/Papers/im2calories_iccv15.pdf>.
O'HARA, Stephen; DRAPER, Bruce A.. INTRODUCTION TO THE BAG OF FEATURES PARADIGM FOR IMAGE CLASSIFICATION AND RETRIEVAL. 2011. Disponível em: <https://arxiv.org/pdf/1101.3354.pdf>. Acesso em: 03 jul. 2017. OMS, Organização Mundial da Saúde (2016). GLOBAL REPORT ON DIABETES. Disponível
em:<http://apps.who.int/iris/bitstream/10665/204871/1/9789241565257_eng.pdf?ua=1> . Acesso em: 25 mar. 2017.
Paul V. C. Hough. Method and means for recognizing complex patterns. US nº 3069654 A, 25 mar. 1960, 18 dez. 1962. Disponível em: <https://www.google.com/patents/US3069654?hl=pt-BR>. Acesso em: 12 nov. 2017. Portal Brasil (2015). Diabetes atinge 9 milhões de brasileiros. Disponível em <http://www.brasil.gov.br/saude/2015/07/diabetes-atinge-9-milhoes-de-brasileiros>. Acesso em: 26 mar. 2017.
ROTHER, Carsten; KOLMOGOROV, Vladimir; BLAKE, Andrew. “GrabCut” — Interactive Foreground Extraction using Iterated Graph Cuts. 2012. Disponível em: <https://cvg.ethz.ch/teaching/cvl/2012/grabcut-siggraph04.pdf>. Acesso em: 03 jul. 2017.
SCHABACK, R.. A Practical Guide to Radial Basis Functions. 2007. Disponível em: <http://num.math.uni-goettingen.de/schaback/teaching/sc.pdf>. Acesso em: 10 nov. 2017.
Sociedade Brasileira de Diabetes (2015). Diretrizes da Sociedade Brasileira de Diabetes. Rio de Janeiro: Ac Farmacêutica, 2016. 327 p. Disponível em: <http://www.diabetes.org.br/profissionais/images/pdf/DIRETRIZES-SBD-2015-2016.p df>. Acesso em: 27 mar. 2017.
Sociedade Brasileira de Diabetes (2016). Manual de Contagem de Carboidratos para
Pessoas com Diabetes. Disponível
em:<http://www.diabetes.org.br/publico/images/manual-de-contagem-de-carboidrato20 16.pdf>. Acesso em: 25 mar. 2017.
UNIVERSIDADE ESTADUAL DE CAMPINAS. Tabela Brasileira de Composição
de Alimentos. TACO 2011. Disponível em:
<http://www.cfn.org.br/wp-content/uploads/2017/03/taco_4_edicao_ampliada_e_revisa da.pdf>. Acesso em: 02 nov. 2017.
ZHANG, Weiyu et al. Snap-n-Eat: Food Recognition and Nutrition Estimation on a
Smartphone. 2015. Disponível em:
<https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4604540/>. Acesso em: 20 jun. 2017. ZHANG, Yin; JIN, Rong; ZHOU, Zhi-hua. Understanding Bag-of-Words Model: A Statistical Framework. 2010. Disponível em:
<http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.453.5924&rep=rep1&type= pdf>. Acesso em: 06 nov. 2017.