PROCESSAMENTO DIGITAL DE IMAGENS APLICADO À DETECÇÃO DE...

49
PROCESSAMENTO DIGITAL DE IMAGENS APLICADO À DETECÇÃO DE FACES PARA O MONITORAMENTO DA POSTURA DE USUÁRIOS DURANTE A UTILIZAÇÃO DE COMPUTADORES Thársus Andrade Proux Projeto de Graduação apresentado ao Curso de Engenharia Eletrônica e de Computação da Escola Politécnica, Universidade Federal do Rio de Janeiro, como parte dos requisitos necessários à obtenção do título de Engenheiro. Orientador: Heraldo Luís Silveira de Almeida Rio de Janeiro Setembro de 2018

Transcript of PROCESSAMENTO DIGITAL DE IMAGENS APLICADO À DETECÇÃO DE...

PROCESSAMENTO DIGITAL DE IMAGENS APLICADO

À DETECÇÃO DE FACES PARA O MONITORAMENTO

DA POSTURA DE USUÁRIOS DURANTE A UTILIZAÇÃO

DE COMPUTADORES

Thársus Andrade Proux

Projeto de Graduação apresentado ao Curso de Engenharia Eletrônica e de Computação da Escola

Politécnica, Universidade Federal do Rio de Janeiro, como parte dos requisitos necessários à obtenção do título de Engenheiro.

Orientador: Heraldo Luís Silveira de Almeida

Rio de Janeiro

Setembro de 2018

ii

PROCESSAMENTO DIGITAL DE IMAGENS APLICADO

À DETECÇÃO DE FACES PARA O MONITORAMENTO

DA POSTURA DE USUÁRIOS DURANTE A UTILIZAÇÃO

DE COMPUTADORES

Thársus Andrade Proux

PROJETO DE GRADUAÇÃO SUBMETIDO AO CORPO DOCENTE DO CURSO DE ENGENHARIA ELETRÔNICA E DE COMPUTAÇÃO DA ESCOLA POLITÉCNICA DA UNIVERSIDADE FEDERAL DO RIO DE JANEIRO COMO

PARTE DOS REQUISITOS NECESSÁRIOS PARA A OBTENÇÃO DO GRAU DE ENGENHEIRO ELETRÔNICO E DE COMPUTAÇÃO

Autor:

_________________________________________________

Thársus Andrade Proux

Orientador:

_________________________________________________

Prof. Heraldo Luís Silveira de Almeida, D. Sc.

Examinador:

_________________________________________________

Prof. Flavio Luis de Mello, D. Sc. Examinador:

_________________________________________________

Prof. Diego Leonel Cadette Dutra, D. Sc.

Rio de Janeiro – RJ, Brasil

Outubro de 2018

iii

Declaração de Autoria e de Direitos Eu, Thársus Andrade Proux CPF 142.250.567-75, autor da monografia Processamento Digital de Imagens Aplicado à Detecção de Faces para o Monitoramento da Postura de

Usuários Durante a Utilização de Computadores, subscrevo para os devidos fins, as seguintes informações:

1. O autor declara que o trabalho apresentado na disciplina de Projeto de Graduação da Escola Politécnica da UFRJ é de sua autoria, sendo original em

forma e conteúdo. 2. Excetuam-se do item 1. eventuais transcrições de texto, figuras, tabelas, conceitos e idéias, que identifiquem claramente a fonte original, explicitando as autorizações obtidas dos respectivos proprietários, quando necessárias.

3. O autor permite que a UFRJ, por um prazo indeterminado, efetue em qualquer mídia de divulgação, a publicação do trabalho acadêmico em sua totalidade, ou em parte. Essa autorização não envolve ônus de qualquer natureza à UFRJ, ou aos seus representantes.

4. O autor pode, excepcionalmente, encaminhar à Comissão de Projeto de Graduação, a não divulgação do material, por um prazo máximo de 01 (um) ano, improrrogável, a contar da data de defesa, desde que o pedido seja justificado, e solicitado antecipadamente, por escrito, à Congregação da Escola Politécnica.

5. O autor declara, ainda, ter a capacidade jurídica para a prática do presente ato, assim como ter conhecimento do teor da presente Declaração, estando ciente das sanções e punições legais, no que tange a cópia parcial, ou total, de obra intelectual, o que se configura como violação do direito autoral previsto no

Código Penal Brasileiro no art.184 e art.299, bem como na Lei 9.610. 6. O autor é o único responsável pelo conteúdo apresentado nos trabalhos acadêmicos publicados, não cabendo à UFRJ, aos seus representantes, ou ao(s) orientador(es), qualquer responsabilização/ indenização nesse sentido.

7. Por ser verdade, firmo a presente declaração.

_________________________________________ Thársus Andrade Proux

iv

UNIVERSIDADE FEDERAL DO RIO DE JANEIRO

Escola Politécnica – Departamento de Eletrônica e de Computação

Centro de Tecnologia, bloco H, sala H-217, Cidade Universitária

Rio de Janeiro – RJ CEP 21949-900

Este exemplar é de propriedade da Universidade Federal do Rio de Janeiro, que

poderá incluí-lo em base de dados, armazenar em computador, microfilmar ou adotar

qualquer forma de arquivamento.

É permitida a menção, reprodução parcial ou integral e a transmissão entre

bibliotecas deste trabalho, sem modificação de seu texto, em qualquer meio que esteja

ou venha a ser fixado, para pesquisa acadêmica, comentários e citações, desde que sem

finalidade comercial e que seja feita a referência bibliográfica completa.

Os conceitos expressos neste trabalho são de responsabilidade do(s) autor(es).

v

AGRADECIMENTO

Gostaria de agradecer imensamente aos meus pais e minha irmã pelo suporte e

incentivo durante todo o período do curso, tornando esta jornada mais fácil de ser

cumprida.

Agradeço também a todos os meus familiares e amigos que estiveram presentes

pelo apoio nos momentos difíceis. Em especial, gostaria de agradecer a Ingrid pelo

inestimável suporte e compreensão.

Por último, agradeço ao meu orientador pelos incentivos e conselhos durante a

realização deste trabalho, aos professores que fizeram parte da minha formação pelos

seus ensinamentos e a esta Universidade pela oportunidade de aprender nesta renomada

instituição.

vi

RESUMO

O presente projeto tem como objetivo a criação de um software capaz de estimar

e notificar posturas inadequadas de uma pessoa sentada de frente para a câmera do

computador em tempo real. A interface gráfica, desenvolvida com o framework Qt, foi

criada pensando em simplicidade e na experiência do usuário. Utilizando as bibliotecas

OpenCV e DLIB para o processamento de imagens, a face do usuário é identificada e, a

partir de um modelo genérico de uma face em três dimensões e considerando o modelo

como uma câmera estenopéica, a translação e rotação da cabeça do usuário são

estimadas. Com uma postura calibrada junto de alguns parâmetros como sensibilidade

da detecção, o algoritmo monitora o usuário e dispara alertas para o caso de identificar

uma postura inadequada. Além da detecção, foi incluída uma área para apresentar

gráficos estatísticos de forma que o usuário possa acompanhar seu progresso na adoção

de uma postura correta.

Palavras-Chave: detecção de face, estimação da postura, ergonomia, visão

computacional.

vi

i

ABSTRACT

The current project has the objective of creating a software capable of estimate

and notify inadequate postures of a person seated in front of the computer camera in

real-time. The graphic interface, developed with the Qt framework, was created thinking

about simplicity and about the user experience. Using OpenCV and DLIB libraries for

image processing, the user’s face is identified and, from a generic three-dimensional

model of a face and considering the model as a pinhole camera, the translation and

rotation are estimated. With the calibrated posture together with some parameter such as

detection sensibility, the algorithm monitors the user and emits alerts for the case where

an inadequate posture is identified. In addition to the detection, an area for statistical

charts was inserted, so that the user can follow its progress in the adoption of a correct

posture.

Key-words: face detection, posture estimation, ergonomics, computer vision.

vi

ii

SIGLAS

UFRJ – Universidade Federal do Rio de Janeiro

OMS – Organização Mundial da Saúde

SESI – Serviço Social da Indústria

NHS – National Health Service

HOG – Histogram of Oriented Gradients

ix

Sumário

1 Introdução 1

1.1 - Tema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

1.2 - Delimitação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

1.3 - Justificativa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

1.4 - Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

1.5 - Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

1.6 - Descrição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2 Fundamentação 5

2.1 - Os males trazidos por ficar sentado durante longos períodos . . 5

2.2 - Formas de prevenir problemas de saúde . . . . . . . . . . . . . . . . 6

2.3 - Introdução a Visão Computacional . . . . . . . . . . . . . . . . . . . . 8

2.4 - Visão Computacional e Detecção de Posturas . . . . . . . . . . . . 9

3 Implementação 12

3.1 - Ferramentas Utilizadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

3.2 - Papel das Bibliotecas Externas . . . . . . . . . . . . . . . . . . . . . . . 14

3.3 - Algoritmo de Detecção OpenCV . . . . . . . . . . . . . . . . . . . . . 15

3.4 - Banco de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

3.5 - Dashboard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

x

4 Resultados 24

4.1 - Início da Execução e Calibragem . . . . . . . . . . . . . . . . . . . . . 24

4.2 - Desempenho na Detecção de Posturas Inadequadas . . . . . . . 27

4.3 - Falhas na Detecção . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

5 Conclusões 34

Bibliografia 35

xi

Lista de Figuras

2.1 – Exemplos de posturas durante o uso de computadores . . . . . . . . . . . . . . 6

2.2 – Exemplos de posturas inadequadas e suas . . . . . . . . . . . . . . . . . . . . . . . . respectivas posturas adequadas

7

2.3 – Robôs capazes de verificar prateleiras . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

2.4 – Pontos detectados pela DLIB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

3.1 – Descrição do mecanismo de signals & slots . . . . . . . . . . . . . . . . . . . . 13

3.2 – Graus de liberdade do rosto . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . 15

3.3 – Modelo de câmera estenopéica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

3.4 – Trecho do código descrevendo os pontos utilizados na calibragem . . . . . 19

3.5 – Trecho do código mostrando a inicialização dos parâmetros da . . . . . . . . . câmera

19

3.6 – Trecho do código mostrando a calibragem . . . . . . . . . . . . . . . . . . . . . . . . 19

3.7 – Arquitetura do projeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

3.8 – Fluxos de detecção . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

3.9 – Trecho do código com os estados da detecção . . . . . . . . . . . . . . . . . . . . . 22

3.10 – Dashboard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

4.1 – Tela inicial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

4.2 – Início da Execução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

4.3 – Primeira tela do assistente de calibragem . . . . . . . . . . . . . . . . . . . . . . . . . 25

4.4 – Segunda tela do assistente de calibragem . . . . . . . . . . . . . . . . . . . . . . . . . 26

4.5 – Acompanhamento da detecção . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

4.6 – Pose inadequada devido à altura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

4.7 – Pose inadequada devido à proximidade com a câmera . . . . . . . . . . . . . . . 28

4.8 – Pose inadequada devido à inclinação entre a face e ombros . . . . . . . . . . . 28

xi

i

4.9 – Pose inadequada devido à distância entre a postura calibrada e a . . . . . . .

corrente

29

4.10 – Consumo de recursos sem a execução do software . . . . . . . . . . . . . 29

4.11 – Consumo de recursos com o início da execução do software . . . . . . . . . 30

4.12 – Consumo de recursos com o início da câmera . . . . . . . . . . . . . . . . . . . . . 30

4.13 – Detalhamento do consumo do processador . . . . . . . . . . . . . . . . . . . . . . . 31

4.14 – Consumo de recursos com o acionamento de um alarme . . . . . . . . . . . . 31

4.15 – Exemplo do erro de detecção devido à utilização de óculos . . . . . . . . . . 32

4.16 – Mesma imagem anterior só que sem óculos . . . . . . . . . . . . . . . . . . . . . . 32

4.17 – Exemplo da falha devido ao alto contraste da imagem . . . . . . . . . . . . . . 33

4.18 – Mesma imagem anterior com uma melhor iluminação na face do . . . . .

usuário

33

1

Capítulo 1

Introdução

1.1 – Tema

O tema do trabalho é o estudo da postura adotada por usuários durante a

utilização de computadores. Neste sentido, o problema a ser resolvido é analisar a

viabilidade em se criar uma interface capaz de estimar e monitorar a postura do usuário,

fornecendo alertas em caso de posturas inadequadas e gráficos estatísticos para o

acompanhamento do progresso do usuário em adquirir boas práticas de ergonomia.

1.2 – Delimitação

O objeto de estudo é a face de pessoas tidas como sadias. As posturas são

estimadas a partir da face do usuário após um processo inicial de calibração, de forma

que o software consiga ter uma posição ideal como referência. Não são contempladas

análises das posições dos braços, pernas e da forma que o usuário senta, pois adicionaria

grande complexidade, apesar de ser crucial para a completa verificação.

1.3 – Justificativa

De acordo com um estudo realizado entre 2000 e 2011 pela Previdência Social

[1], os afastamentos ocasionados por fatores ergonômicos e sobrecarga mental tem

superado os afastamentos ocasionados por fatores traumáticos. O primeiro grupo

contempla 20,76%, enquanto o segundo 19,43% de todos os afastamentos.

Para uma empresa, o afastamento de um funcionário pode causar não somente o

prejuízo ocasionado pela falta de mão de obra e pelos custos de indenizações, como

também a sobrecarga de um ou mais funcionários cobrindo a ausência do primeiro.

2

Segundo a Organização Mundial da Saúde (OMS) [2], 80% das pessoas sofrem

com dores nas costas e a postura adotada durante o expediente bem como o

sedentarismo podem ser a causa desse tipo de problema. A falta de movimento da

região inferior do corpo já afeta negativamente o funcionamento de diversas partes do

nosso organismo, como o coração e o pulmão. Este quadro é ainda piorado caso a

postura adotada enquanto sentado não seja adequada.

Um levantamento feito pelo Serviço Social da Indústria (SESI) [3] entre outubro

de 2015 e fevereiro de 2016 aponta que 71,6% das empresas entrevistadas dizem dar

alta atenção à saúde e segurança dos trabalhadores, e 76,4% acreditam que a tendência é

que o grau de atenção a esse tema aumente nos próximos anos.

Neste contexto, o presente projeto busca a criação de um software com uma

interface simples e de baixo custo que consiga estimar a postura de um usuário sem a

necessidade da aquisição de componentes externos, no máximo uma câmera caso o

usuário não possua um notebook com uma câmera integrada.

Com a estimativa da postura do usuário, é possível emitir alertas com a

finalidade de prevenir posturas inadequadas e, a longo prazo, reeducar a postura do

usuário.

1.4 – Objetivos

O objetivo geral é criar um software capaz de identificar se a postura do usuário

é adequada ou inadequada em tempo real, utilizando apenas uma câmera e fornecendo

dados estatísticos para acompanhamento do histórico. Desta forma, tem-se como

objetivos específicos: (1) desenvolver um algoritmo capaz de estimar a postura do

usuário a partir do processamento de imagem e de funções de bibliotecas especializadas

em manipulação de imagem/vídeo e detecção de faces; (2) integrar o algoritmo a uma

interface gráfica que monitore e notifique o usuário, e; (3) criar um dashboard com

gráficos que não apenas permitam o acompanhamento do progresso do usuário, como

também forneçam informações que possam resultar em ações para melhoria de sua

postura.

3

1.5 – Metodologia

Os frames obtidos pela câmera com o auxílio da biblioteca OpenCV são

processados por funções da biblioteca DLIB, onde a quantidade de rostos de pessoas

presentes no frame é identificada. Para o caso de apenas uma pessoa identificada, o

algoritmo detecta os pontos de referência da face dessa pessoa: contornos do rosto,

boca, nariz, olhos e sobrancelhas.

A partir desses pontos obtidos em relação ao frame, uma imagem em duas

dimensões, é possível calibrar a câmera utilizando um modelo dos mesmos pontos em

três dimensões. Com as informações de um ponto em duas dimensões e em três

dimensões, a função solvePnP da biblioteca OpenCV é capaz de calibrar a câmera,

fornecendo dois vetores, o de rotação e o de translação.

Utilizando algumas transformações matemáticas, é possível obter a posição e a

rotação da face do usuário em relação aos três eixos, informações que serão utilizadas

como critérios para definir se a pessoa identificada no frame está com uma postura

inadequada.

Para ter um valor inicial como referência, é necessária uma interação com o

usuário detalhando como é uma postura adequada para que ele adote essa postura e

calibre o software.

Assim que calibrado, ele é capaz de monitorar o usuário, fornecendo alertas em

caso de posturas inadequadas após um curto período de tempo:

Aumento da proximidade com a câmera: indica que o usuário se curvou

para frente;

Diminuição da sua altura: indica que o usuário adotou uma postura

relaxada, deslizando pela cadeira;

Rotação lateral, tanto para a esquerda quanto para a direita: indica que o

usuário se debruçou para um dos lados, postura comum ao atender o

telefone e apoiá-lo sobre o ombro;

Distância entre os eixos vertical e horizontal: pode indicar que o usuário

está se apoiando para um dos lados da coluna.

Além disso, é fornecido um dashboard com gráficos que auxiliem o usuário a

acompanhar dados que meçam sua performance, demonstrando a capacidade do

4

software de impedir que ele se mantenha com uma postura inadequada por muito

tempo.

1.6 – Descrição

O capítulo 2 contextualiza o leitor a respeito da importância de cuidados com a

postura, apresentando problemas ocasionados pela falta de cuidado, que afetam a saúde

e bem-estar das pessoas além de gerar grandes prejuízos para empresas. O capítulo

também introduz o leitor sobre Visão Computacional e menciona algoritmos de

bibliotecas externas utilizados pelo software. O capítulo 3 apresenta decisões de projeto,

detalhes de implementação e do funcionamento do software, bem como o ferramental

utilizado para o seu desenvolvimento. Os resultados são mostrados no capítulo 4, que

contém os casos de uso com imagens demonstrando o funcionamento do produto. Por

fim, o capítulo 5 é composto pela conclusão, mostrando os objetivos cumpridos e as

limitações encontradas durante o desenvolvimento do projeto.

5

Capítulo 2

Fundamentação

2.1 – Os males trazidos por ficar sentado durante longos períodos

O sedentarismo é um dos maiores problemas da atualidade, visto que o corpo

humano necessita de movimento para a manutenção de todas as suas funções e de seus

órgãos. De acordo com James Levine [6], um endocrinologista americano, o corpo

humano não foi projetado para ficar ocioso e uma rotina que envolva ficar muito tempo

sem se movimentar poderia ser tão maligna quanto manter hábitos alimentares não

saudáveis.

Ele ainda informa que a carência de movimento desacelera o metabolismo,

reduzindo a quantidade de comida que é convertida para energia e resultando em

acúmulo de gordura. A consequência disso é o aumento do risco de várias doenças,

como doenças cardíacas, artrites, obesidade, além das doenças causadas pelo aumento

de peso.

Apesar de todos esses malefícios, a realidade enfrentada por grande parte de

trabalhadores é passar grande parte da jornada de seus trabalhos desempenhando seus

papéis sentados.

Para piorar, se o hábito de ficar várias horas sob uma cadeira é extremamente

maléfico, o hábito de manter posturas inadequadas é ainda mais perigoso, tanto a curto

quanto em longo prazo.

Por falta de cuidado ou de conhecimento, as pessoas que ficam muito tempo

sentadas podem desenvolver alguns vícios posturais, como sentar sobre uma das pernas,

sentar na ponta da cadeira, se inclinar para um lado ou não apoiar as costas

corretamente.

"Essa falta de cuidado com a postura causa dores lombares, degeneração de

discos intervertebrais, problemas circulatórios, artrite na região vertebral, desigualdade

na altura dos ombros, bursite, entre outros problemas". [7]

6

A figura a seguir mostra alguns exemplos de posturas comumente adotadas por

usuários de computadores. A seção 2.4 aborda mais sobre posturas incorretas ao estar

sentado.

Figura 2.1 – Exemplo de posturas durante o uso de computadores. Fonte: freepik.com [8].

2.2 – Formas de prevenir problemas de saúde

Como foi dito na seção anterior, o sedentarismo é um grande vilão para a saúde.

Porém, um dos desafios enfrentados por boa parte da população é conseguir reservar

algum intervalo de tempo das suas rotinas para a prática de atividades físicas, que já

costumam ser tomadas por longos períodos em suas profissões.

De acordo com o que sugere a OMS [9], a duração mínima recomendada de

atividade física por semana para uma pessoa com idade entre dezoito e sessenta e quatro

anos é de duas horas e trinta minutos para atividades de intensidade moderada e de uma

7

hora e quinze minutos para atividades mais intensas. Ou seja, reservar três dias para

fazer exercícios leves na academia durante apenas uma hora já seria o suficiente.

Já para contornar o problema de se manter sentado longos períodos durante o

expediente, é importante adotar algumas medidas de forma a reduzir o impacto dessa

jornada. Algumas recomendações simples seriam levantar a cada hora e caminhar pelo

ambiente de trabalho, além de utilizar uma cadeira que permita ajustar o apoio para as

costas e para os braços.

É ainda necessário cuidar da postura durante qualquer atividade. A figura abaixo

exemplifica três situações diferentes onde a postura da pessoa é inadequada, forçando a

coluna e outras partes do corpo. A parte de baixo da figura mostra qual seria a postura

ideal para a respectiva atividade.

Figura 2.2 – Exemplos de posturas inadequadas e suas respectivas posturas

adequadas. Fonte: freepik.com [10].

8

Existem algumas opções no mercado para o monitoramento da postura

atualmente. A empresa Upright Technologies Ltd. é um exemplo disso, com um

dispositivo eletrônico que é colocado na parte superior das costas e monitora a postura,

gerando alertas e armazenando os dados e os disponibilizando ao usuário em um

aplicativo [11].

Apesar de também ter o objetivo de monitorar posturas, o presente projeto foca

apenas em posturas enquanto o usuário estiver sentado utilizando o computador e visa

não utilizar nenhum dispositivo externo.

2.3 – Introdução a Visão Computacional

Visão Computacional, mais conhecida pelo termo em inglês Computer Vision, é

uma área da Ciência da Computação que tem como objetivo fazer sistemas interagirem

com o meio onde estão inseridos através do processamento de imagens.

Esse campo é estudado há algumas décadas, porém vem ganhando mais espaço

nos últimos anos principalmente devido aos avanços de hardware e de deep learning

unidos ao crescente tamanho dos conjuntos de dados e pelo aumento das aplicações de

Visão Computacional [12].

Um exemplo disso foi uma solução implementada pela empresa Wal-Mart para

controle de estoque das prateleiras de seus mercados [13]. São robôs capazes de

identificar itens a serem repostos nas prateleiras, verificar se os valores das etiquetas de

preços estão corretos além de detectar rótulos errados ou ausentes.

Figura 2.3 – Robôs capazes de verificar prateleiras. Fonte: technologyreview.com [13].

9

Eles contam com sensores para identificar pessoas ou outras obstruções no seu

caminho enquanto percorrem os corredores do mercado, além de utilizar várias câmeras

para analisar as prateleiras, localizadas em uma torre na sua lateral. Os funcionários são

acionados a partir das varreduras dos robôs, já que estes não são fisicamente capazes de

carregar produtos.

Segundo Jeremy King, um diretor da Wal-Mart, os robôs são cinquenta por

cento mais eficientes do que funcionários, podendo ainda verificar as prateleiras com

mais exatidão e três vezes mais rápido.

Um segundo exemplo de como a visão computacional está revolucionando as

indústrias modernas é a corrida para o lançamento do primeiro carro autônomo. Grandes

empresas estão nessa disputa, e uma pequena lista delas é: Waymo (subsidiária da

Alphabet, assim como o Google), Microsoft, Apple, Intel, Tesla e General Motors [14].

A maioria dos carros autônomos possuem diversas câmeras de forma a obter

informação de toda a redondeza do veículo. O Tesla, por exemplo, utiliza um conjunto

de oito câmeras [15].

Apesar de câmeras não serem muito precisas para estimar distância e,

consequentemente, velocidade, elas são essenciais para diversas tarefas, como detecção

e classificação de obstáculos, de placas de trânsito e do estado de semáforos. Carros

autônomos contam ainda com outros sensores para auxiliar nas tarefas de identificar

onde o carro está e como os objetos nas proximidades estão se comportando para poder

realizar previsões de forma a definir um trajeto seguro.

2.4 – Visão Computacional e Detecção de Posturas

O serviço nacional de saúde da Inglaterra, o National Health Service (NHS),

aponta algumas das mais frequentes posturas inadequadas e formas para evita-las [16].

É possível perceber que as posturas inadequadas com a pessoa sentada afetam a posição

ou rotação de seu rosto se comparadas com a postura ideal.

Quando a pessoa sentada desliza seu quadril para frente, afastando a parte

inferior das costas do apoio, mas mantendo a parte superior em contato com o apoio da

cadeira, a altura do rosto diminui, por exemplo. Ao curvar as costas para frente, o rosto

de aproxima da câmera. Ou ainda ao utilizar o telefone apoiado entre o ombro e a

orelha, o rosto modifica a inclinação entre o eixo vertical o horizontal.

10

A visão computacional exerce papel fundamental na detecção dessas posturas no

presente projeto. É sua função identificar a translação e rotação do usuário a todo

instante. Para cumprir esse escopo, algumas bibliotecas de visão computacional foram

analisadas, em especial as bibliotecas OpenCV, DLIB e OpenPose.

OpenCV é uma biblioteca para aplicações no campo de visão computacional e

aprendizado de máquina de código aberto com interface para as linguagens C++,

Python, Java e MATLAB, sendo suportada pelos sistemas operacionais Windows,

Linux, Android e Mac OS [17].

O principal papel da biblioteca no projeto é relacionado ao processamento e

manipulação de imagens. O OpenCV inclusive possui funções para detecção de faces e

membros do corpo, porém elas retornam a região encontrada e não um ponto específico,

como é o caso das outras duas bibliotecas.

A DLIB é uma biblioteca desenvolvida em C++ que contém diversos

algoritmos, com foco em aprendizado de máquina e processamento de imagens. Possui

uma API em Python que permite o uso de seus algoritmos por meio de aplicações feitas

nessa linguagem.

Seu propósito no projeto é analisar os frames obtido através de funções da

biblioteca OpenCV, fornecendo a quantidade de faces encontradas em cada frame e,

para o caso de apenas uma face encontrada, detectar a posição dos pontos de referência

da face, como o seu contorno e os contornos do nariz, olhos, sobrancelhas e boca.

Figura 2.4 – Pontos detectados pela DLIB. Fonte: openface-api.readthedocs.io/en/latest/_images/dlib-landmark-mean.png [18].

11

A biblioteca OpenPose possui escopo semelhante a DLIB, ou seja, atuaria na

análise dos frames. A diferença é que, além do contorno do rosto, essa biblioteca

também é capaz de estimar pontos importantes do corpo humano, como ombros,

cotovelos e outros [19].

12

Capítulo 3

Implementação

3.1 – Ferramentas Utilizadas

O software foi desenvolvido na linguagem C++. Para a criação da interface

gráfica de usuário, foi utilizando o Qt como kit de desenvolvimento de software. Sua

escolha se deve ao já conhecimento da ferramenta por parte do autor e pela facilidade

que ele oferece na criação de interfaces gráficas.

Adicionalmente, o projeto utiliza o sistema gerenciador de banco de dados

Microsoft SQL Server para armazenar dados referentes a detecção do usuário, que são

utilizados para alimentar gráficos estatísticos referente a utilização do software.

Finalmente, os sistemas Git e Trello foram utilizados no desenvolvimento do

projeto para o controle de versão e para a gestão de funcionalidades, respectivamente. O

primeiro oferece a garantia de ter o código armazenado em um servidor externo e o

segundo permitiu a criação de um processo sistemático para manter novas ideias

registradas e funcionalidades organizadas por prioridade para o desenvolvimento.

Antes de apresentar os algoritmos do presente projeto, é importante explicar

como seus objetos interagem entre si. A forma mais comum de fazer objetos se

comunicarem adotada por outros kits de desenvolvimento são os chamados callbacks,

que são ponteiros para funções. O Qt implementa um mecanismo um pouco diferente

para fazer essa interação, o mecanismo chamado de signals & slots.

Para explicar o funcionamento desse mecanismo, suponha que o objeto de uma

classe possui um signal que é acionado quando um dos seus contadores chega a um

determinado valor. Ao acioná-lo, qualquer objeto que possua um slot conectado ao

signal do primeiro receberá a informação e poderá atualizar alguma de suas variáveis ou

executar outros métodos, por exemplo.

13

Figura 3.1 – Descrição do mecanismo de signals & slots. Fonte: doc.qt.io/archives/qt-4.8/signalsandslots.html [20].

É isso que ocorre na classe MainWindow, onde é declarada um objeto da classe

QTimer, uma classe do Qt útil para cronômetros. Assim que o usuário inicia a câmera

através da interface gráfica, o signal desse objeto é conectado a um método da classe

MainWindow e o valor do cronômetro é estabelecido para cinquenta milissegundos.

Dessa forma, a cada cinco décimos de segundo o objeto da classe QTimer irá

emitir um signal que será recebido pelo método slot do objeto da classe MainWindow.

Esse último é o responsável por coletar uma imagem da câmera, chamar métodos de

outras funções para analisar essa imagem e, por último, apresentar a imagem na

interface gráfica.

14

3.2 – Papel das Bibliotecas Externas

A biblioteca OpenCV é a responsável pela captura dos frames. As classes

utilizadas são: VideoCapture, para acessar a câmera e capturar imagens; e Mat, uma

classe que possui diversos métodos para manipulação de imagens, além de a primeira

classe retornar um objeto dessa classe ao capturar um frame com a webcam.

Além disso, algumas funções da OpenCV foram incluídas no projeto. Duas das

mais importantes são as funções SolvePnP e Rodrigues. A primeira é mais detalhada na

seção que explica o algoritmo de detecção da postura do usuário, mas de modo geral,

ela serve para calibrar a câmera, o que significa encontrar a posição e rotação da câmera

(ou do objeto utilizado para calibrá-la). Já a segunda serve para transformar o vetor de

rotação retornado pela SolvePNP em uma matriz.

Algumas funções para modificar imagens são a Circle, que desenha um círculo

na coordenada fornecida, e CvtColor, que converte o padrão de cores de uma imagem,

como de RGB, utilizado pelo OpenCV, para BGR, utilizado pela DLIB.

Sobre criação de pontos para fornecer coordenadas, temos as funções Point,

Point2d e Point3d. Os dois primeiros criam pontos com coordenadas de duas

dimensões, o primeiro com valores inteiros e o segundo com valores do tipo double. O

terceiro cria um ponto com coordenadas em três dimensões do tipo double.

Para a detecção das referências do corpo do usuário, inicialmente planejou-se

utilizar a biblioteca OpenPose. Após a realização de alguns testes, foi concluído que

essa biblioteca demanda muito recurso do computador, em especial memória e

processador, de forma a impossibilitar a utilização de outros programas durante a

detecção.

Dessa forma, a biblioteca DLIB foi escolhida devido ao seu melhor desempenho

para aplicações em tempo real: sua detecção demonstrou exigir menos recursos do

computador, afetando pouco a utilização de outros programas e proporcionando uma

melhor experiência do usuário.

As classes get_frontal_face_detector e full_object_detection da biblioteca DLIB

são responsáveis por identificar faces na imagem e pela detecção do contorno da face do

usuário, respectivamente.

15

3.3 – Algoritmo de Detecção (Estimativa da Postura)

Para o procedimento de detecção, o primeiro passo é processar a imagem e

identificar a quantidade de faces. No caso de apenas uma face encontrada, o próximo

passo é identificar os pontos de referência dessa face, o que permitirá estimar sua pose.

A DLIB é a responsável pelas duas atividades.

Para processar a imagem e identificar faces, a DLIB utiliza um detector

desenvolvido através de um Histograma de Gradientes Orientados (em inglês,

Histogram of Oriented Gradients – HOG) [21] combinado com um esquema detector

composto de um classificador linear com uma pirâmide e um algoritmo de janela

deslizante [22].

Já para obter a estimativa da pose com os pontos de referência da face humana, o

algoritmo utiliza o estimador de pose desenvolvido também pela DLIB [23], treinado

com o conjunto de dados para pontos de referência de face da iBUG, o 300-W [24].

O próximo passo é a estimação dos seis graus de liberdade do rosto: são três

graus de liberdade para a translação e três graus para a rotação, como demonstra a

imagem abaixo.

Figura 3.2 – Graus de liberdade do rosto. Fonte: en.wikipedia.org/wiki/Six_degrees_of_freedom [25].

Em Visão Computacional, essa situação onde deseja-se estimar a pose da câmera

a partir de pontos em duas dimensões é um problema fundamental para várias

aplicações e já foi extensamente estudada. A imagem a seguir demonstra o problema em

questão:

16

Figura 3.3 – Modelo de câmera estenopéica. Fonte: docs.opencv.org/3.3.0/d9/d0c/group__calib3d.html [26].

É possível identificar que existem três diferentes sistemas de coordenadas em

questão: coordenadas do mundo real (eixos 𝑋, 𝑌 e 𝑍, que contém o ponto 𝑃),

coordenadas das imagens obtidas pela câmera (eixos 𝑢 e 𝑣) e coordenadas da câmera

(eixos 𝑥, 𝑦 e 𝑧).

Uma aproximação possível para descrevê-lo matematicamente é utilizar o

modelo de câmera estenopéica (do inglês, pinhole camera model), onde uma imagem é

formada a partir de pontos em três dimensões projetados no plano da imagem. Esse

modelo descreve a relação entre o ponto 𝑃 = (𝑋, 𝑌, 𝑍) e o ponto (𝑢, 𝑣).

Utilizando algum rosto como modelo para obter as proporções do rosto de uma

pessoa, é possível obter a localização aproximada do ponto 𝑃 no sistema de

coordenadas do mundo real, obtendo assim os valores de 𝑋, 𝑌 e 𝑍.

Analisando os parâmetros extrínsecos, que indicam a posição e orientação da

câmera no mundo real, é possível identificar que eles são representados

matematicamente por uma matriz de translação de três dimensões e por um vetor de

rotação de três elementos.

17

Com a matriz de translação 𝑅 e o vetor de rotação 𝑡 do sistema de coordenadas

do mundo real em relação ao sistema de coordenadas da câmera, é possível obter a

localização do ponto 𝑃 no sistema de coordenadas da câmera a partir da seguinte

equação:

[𝑥𝑦𝑧

] = 𝑅 [𝑋𝑌𝑍

] + 𝑡 (1)

Podemos modificar a equação para deixa-la com o seguinte formato:

[𝑥𝑦𝑧

] = [𝑅 𝑡] [

𝑋𝑌𝑍1

] = [

𝑟00 𝑟01 𝑟02 𝑡𝑥

𝑟10 𝑟11 𝑟12 𝑡𝑦

𝑟20 𝑟21 𝑟22 𝑡𝑧

] [

𝑋𝑌𝑍1

]

(2)

Para os parâmetros internos, podemos tomar a distância entre o centro de

projeção e o plano da imagem como 𝑓 e, utilizando a semelhança entre triângulos e já

considerando o ponto 𝑃 no sistema de coordenadas da câmera, podemos escrever:

𝑓

𝑧=

𝑢

𝑥=

𝑣

𝑦

(3)

Que permite chegar às seguintes equações:

𝑢 =

𝑓𝑥

𝑧

(4)

𝑣 =

𝑓𝑦

𝑧

(5)

Essas equações precisam de um ajuste para o caso no qual o centro do sistema

de coordenadas da imagem não coincide com o ponto onde o eixo 𝑧 intercepta o plano

da imagem:

𝑢 =

𝑓𝑥

𝑧+ 𝑡𝑢

(6)

𝑣 =

𝑓𝑦

𝑧+ 𝑡𝑣

(7)

Por último, ainda é necessário um pequeno ajuste devido aos valores de 𝑢 e 𝑣

serem em pixels e o restante em outra unidade de distância, como metros ou polegadas.

Para fazer a conversão, é necessário multiplicar pela resolução, que pode ser quadrada

18

ou retangular. Para o caso mais geral, vamos considerar a resolução da câmera como

retangular.

𝑢 = 𝑚𝑢 (

𝑓𝑥

𝑧+ 𝑡𝑢) = 𝑚𝑢

𝑓𝑥

𝑧+ 𝑚𝑢𝑡𝑢

(8)

𝑣 = 𝑚𝑣 (

𝑓𝑦

𝑧+ 𝑡𝑣) = 𝑚𝑣

𝑓𝑦

𝑧+ 𝑚𝑣𝑡𝑣

(9)

Multiplicando as equações por 𝑧 e passando para a forma matricial:

𝑧 [

𝑢𝑣1

] = [𝑚𝑢𝑓 0 𝑚𝑢𝑡𝑢

0 𝑚𝑣𝑓 𝑚𝑣𝑡𝑣

0 0 1

] [𝑥𝑦𝑧

] (10)

Convertendo a nomenclatura pela forma que é escrito na biblioteca do OpenCV:

𝑠 [𝑢𝑣1

] = [𝑓𝑥 0 𝑜𝑥

0 𝑓𝑦 𝑜𝑦

0 0 1

] [𝑥𝑦𝑧

]

(11)

𝐴 = [𝑓𝑥 0 𝑜𝑥

0 𝑓𝑦 𝑜𝑦

0 0 1

]

(12)

A matriz 𝐴 representa os parâmetros intrínsecos da câmera, como distância focal

e parâmetros da lente. Unindo as equações 2, 11 e 12:

𝑠 [

𝑢𝑣1

] = 𝐴[𝑅 𝑡] [𝑋𝑌𝑍

] (13)

Uma das formas de resolver a equação 13 é através do método de Levenberg-

Marquardt, que busca encontrar uma postura que minimiza o erro da soma das

distâncias quadradas entre as projeções observadas no plano da imagem e os pontos

projetados do objeto [27].

Voltando ao código do projeto, utiliza-se alguns dos pontos obtidos pelo

processamento da DLIB como os pontos no sistema de coordenadas da imagem e, para

os respectivos pontos no sistema de coordenadas do mundo real, basta utilizar um

modelo de rosto como uma aproximação.

Os pontos utilizados são: ponta do nariz, ponta do queixo, canto esquerdo do

olho esquerdo, canto direito do olho direito, canto esquerdo da boca e canto direito da

boca. A figura a seguir mostra o trecho do código fonte do projeto relativo a esses

19

pontos. A primeira parte é a seleção dos elementos na lista retornada pela DLIB e a

segunda é a inclusão dos valores obtidos pelo modelo real.

Figura 3.4 – Trecho do código descrevendo os pontos utilizados na calibragem.

Antes de poder executar o algoritmo SolvePNP para a calibração da câmera, é

necessário fornecer a matriz de parâmetros intrínsecos da câmera. Para o projeto, a

distorção da lente foi assumida como nula.

Figura 3.5 – Trecho do código mostrando a inicialização dos parâmetros da câmera.

O próximo trecho é o último passo na detecção da pose com a função SolvePNP

e com algumas manipulações no vetor de rotação retornado por ela para obter os valores

da rotação dos três eixos em graus.

Figura 3.6 – Trecho do código mostrando a calibragem.

Com a identificação dos seis graus de liberdade da face do usuário, seria

possível limitar as poses adequadas caso o software tivesse uma posição inicial de

referência. Para contornar esse impedimento, a solução foi exigir uma calibração inicial.

Como a posição da câmera ou mesmo da cadeira pode estar diferente a cada utilização

do mesmo usuário, é necessário fazer a calibração sempre que o programa for iniciado.

20

Assim que o usuário inicia o programa, ele precisa habilitar a câmera e, para

começar o rastreio de sua posição, ele precisa calibrar a detecção, que inclui não

somente uma posição adequada de referência como também a sensibilidade dos

parâmetros, sendo eles:

Altura: quando a altura do usuário for menor do que a altura calibrada,

pode significar que ele esteja deslizando com o quadril para frente,

deixando o apoio das costas apenas na parte superior;

Proximidade com a câmera: indica que o usuário está se aproximando da

tela e novamente forçando a coluna, que precisa estar apoiada com um

ângulo maior do que 90º;

Ângulo entre a face e o eixo que passa pelos ombros: indica que o

usuário está curvando a sua coluna para, por exemplo, apoiar o telefone

sobre o ombro. O ideal é que o rosto não possua rotações no eixo

vertical;

Distância considerando os eixos vertical e horizontal: pode significar que

o usuário está se apoiando em um dos lados.

O programa espera cinco segundos antes de notificar o usuário. Esse intervalo de

tempo serve para não enviar um alarme enquanto o usuário realiza apenas um

movimento rápido de se ajeitar na cadeira, por exemplo.

No código, a classe checkPosture é a responsável pelo rastreio da pose do

usuário e compará-la com a pose calibrada. Um objeto dessa classe é criado na classe

MainWindow e recebe uma imagem obtida através da câmera do notebook a partir da

classe VideoCapture.

A figura 3.7 contém a arquitetura de como o Qt interage com as bibliotecas de

visão computacional e a figura 3.8 exibe dois fluxogramas com a sequência das tarefas

para a detecção e com os responsáveis por executá-las.

21

Figura 3.7 – Arquitetura do projeto.

Figura 3.8 – Fluxos de detecção.

O fluxo da esquerda é acionado por um cronometro a cada 0,05 segundos. O

fluxo da direita é iniciado sempre que os marcos do rosto são identificados e emitidos.

22

3.4 – Banco de Dados

Os estados do algoritmo de detecção são armazenados em um banco de dados de

forma que o histórico de mudanças fique disponível mesmo após o fim da execução do

programa. A escolha do sistema gerenciador de banco de dados foi pelo Microsoft SQL

Server 2017, por ser uma ferramenta bastante utilizada no mercado e pelo interesse do

autor em aprender a utilizá-lo.

Para a modelagem do banco de dados, uma simples tabela foi criada com as

colunas id, status e dateTime. Dessa forma, cada mudança no estado de detecção é

armazenada, sendo que o estado é salvo na segunda coluna e a data e o horário são

salvos na terceira coluna.

Figura 3.9 – Trecho do código com os estados da detecção.

No código fonte do projeto, a classe databaseConnection é a responsável pela

integração com o banco de dados. Seus métodos permitem a abertura da base para

consultas, escrita e leitura de dados, que preenche as variáveis responsáveis pelos

gráficos estatísticos.

23

3.5 – Dashboard

Uma outra aba foi adicionada para exibir as estatísticas de uso do usuário,

permitindo que ele verifique não apenas o funcionamento do programa como também

acompanhe o seu progresso em conseguir manter uma postura adequada com a provável

diminuição da recorrência de alarmes.

Os dados dos gráficos são obtidos assim que o programa é iniciado.

Primeiramente, as variáveis com o propósito de calcular as estatísticas são computadas

durante a leitura da tabela com os alarmes. Para mantê-las refletindo as últimas

informações detectadas, essas variáveis são modificadas em tempo real, conforme a

execução do programa. A cada troca do estado de detecção, essas variáveis são

atualizadas.

Figura 3.10 – Dashboard.

O gráfico da esquerda fornece um histograma com os alarmes acionados por dia

segmentado pelos tipos. Já o gráfico à direita mostra qual a distribuição dos estados,

informando qual deles é o mais frequente.

A barra do canto esquerdo inferior informa a taxa entre o tempo que o usuário

permanece na postura correta sobre o tempo total que o software monitorou o usuário.

Enquanto que a taxa ao lado direito fornece a quantidade média de alarmes por hora.

24

Capítulo 4

Resultados

4.1 – Início da Execução e Calibragem

Assim que o programa é iniciado, a guia selecionada é a Detection, que possui

uma tela preta na esquerda e apenas o botão Start habilitado.

Figura 4.1 – Tela inicial.

Ao clicar em Start, o programa tenta abrir a câmera e inicia a exibição dos

frames obtidos na tela à esquerda para o caso de ser bem-sucedido. Se apenas um rosto

for detectado, o algoritmo já utiliza a DLIB para analisá-lo e colorir com um círculo

vermelho em cada um dos pontos de referências, como mostra a figura 4.2. Após isso, a

qualquer momento é possível clicar em Stop para desativar a captura de vídeo, fazendo

a tela voltar a ficar preta.

25

Figura 4.2 – Início da execução.

Para iniciar a detecção da pose, é necessário calibrar o software para que ele

tenha uma referência da posição de uma pose adequada. O software possui um

assistente para auxiliar o usuário no processo de calibragem. A figura 4.3 mostra a

primeira tela do assistente, que aparece ao se clicar em Calibrate.

Figura 4.3 – Primeira tela do assistente de calibragem.

Um pequeno texto auxilia o usuário para que ele ajuste sua postura. Quando o

usuário clica em Next, o assistente mostra a segunda tela apenas quando um frame a

partir desse ponto for válido, ou seja, possua um rosto. Os pontos de referência do rosto

desse frame serão utilizados na comparação com a detecção em tempo real.

26

A segunda tela do assistente (figura 4.4) permite ajustes na sensibilidade da

detecção, podendo torna-la mais rígida ou mais relaxada. Ela permite que o usuário

altere os sliders (parte inferior do canto direito) e possa acompanhar o resultado das

modificações instantaneamente com as barras (parte superior do canto direito).

Figura 4.4 – Segunda tela do assistente de calibragem.

Para finalizar a calibragem, basta clicar em Save. A partir desse ponto, o botão

Calibrate é renomeado para Recalibrate. O software irá detectar a postura do usuário,

emitindo alertas caso uma das barras atinja cem por cento por mais de cinco segundos.

Ele também registra as estatísticas, atualizando os gráficos no Dashboard.

Figura 4.5 – Acompanhamento da detecção.

27

4.2 – Desempenho na Detecção de Posturas Inadequadas

A percepção de posturas inadequadas funciona bem para os casos nos quais o

projeto se propõe a detectar, ou seja, posturas inadequadas baseadas na proximidade

com a câmera, altura, rotação da face e distância da face calibrada com a corrente.

A sequência de imagens a seguir demonstra a capacidade do algoritmo de

detectar posturas inadequadas utilizando a figura 4.5 na calibragem para essa

demonstração.

A figura 4.6 mostra a detecção da postura inadequada ao se deslizar pela cadeira

e aumentar o ângulo entre as pernas e o tronco.

Figura 4.6 – Pose inadequada devido à altura.

É possível ver que a barra relacionada com cada um dos problemas está

completamente cheia. Quando isso acontece, o software dispara uma notificação para o

usuário, além de inserir na base de dados para poder gerar os dados estatísticos.

A figura 4.7 mostra a detecção da postura inadequada ao se curvar para se

aproximar do monitor e a figura 4.8 mostra a postura inadequada ao se inclinar a cabeça

para um dos lados.

28

Figura 4.7 – Pose inadequada devido à proximidade com a câmera.

Figura 4.8 – Pose inadequada devido à inclinação entre a face e ombros.

Além dessas poses inadequadas, uma pose comum de perceber pessoas adotarem

é a de jogar a parte superior da coluna para um dos dois lados ao invés de deixá-la ereta.

Essa pose seria fácil de ser identificada ao comparar a altura dos dois ombros. Porém,

como o algoritmo utiliza apenas referências da face, é provável dessa situação passar

despercebida pelo software.

Uma opção para identificar essa postura foi comparar a distância entre a posição

atual com a calibrada considerando altura e o deslocamento horizontal. A figura 4.9

mostra o resultado dessa implementação.

29

Figura 4.9 – Pose inadequada devido à distância entre a postura calibrada e a corrente.

O consumo de recursos do computador foi acompanhado ao realizar essa

demonstração e a sequência de figuras abaixo mostra a comparação dos valores de

memória durante os momentos:

Sem o software

Figura 4.10 – Consumo de recursos sem a execução do software.

30

Início da execução do software – figura 4.11

Figura 4.11 – Consumo de recursos com o início da execução do software.

Abertura da câmera – figura 4.12

Figura 4.12 – Consumo de recursos com o início da câmera.

31

Figura 4.13 – Detalhamento do consumo do processador.

Início do monitoramento da postura – figura 4.14

Figura 4.14 – Consumo de recursos com o acionamento de um alarme.

Comparando a figura 4.10 com a 4.11, podemos perceber que o consumo de

memória aumenta 2% além que ocorrer um aumento temporário no consumo do

processador, que volta ao valor inicial logo em seguida.

O consumo de memória aumenta em 1% após o início da câmera e com o

consequente início da detecção da biblioteca DLIB (figura 4.12). Porém, o maior

impacto percebido é no consumo do processador, onde 20% do consumo total é devido

ao processo do software (figura 4.13).

Por último, a figura 4.14 mostra o consumo de recursos logo após a calibração e

durante o acionamento de um alarme. O consumo da memória é novamente elevado em

1% após a calibração e o consumo do processador é elevado temporariamente durante o

alarme, retornando ao valor anterior logo em seguida.

32

4.3 – Falhas na Detecção

Alguns problemas que o usuário pode enfrentar ao utilizar o projeto são falhas

na identificação dos pontos de referência do rosto, prejudicando ou impedindo a

identificação da pose. A DLIB pode errar alguns pixels ao detectar faces com objetos,

como óculos, além de não conseguir detectar os detalhes quando a imagem possui um

contraste elevado, ou seja, quando a variação da luminosidade entre a região mais clara

e a região mais escura da imagem for muito grande.

As próximas imagens exemplificam o erro relacionado à utilização de óculos.

Quando o rosto está na frente da câmera, a detecção funciona normalmente. Porém, ao

girar a cabeça para um dos lados, o algoritmo parece confundir os óculos com o

contorno do rosto.

Figura 4.15 – Exemplo do erro de detecção devido à utilização de óculos.

Figura 4.16 – Mesma imagem anterior só que sem óculos.

33

Sobre as falhas na detecção devido à iluminação, em momentos que a DLIB

falha, o reconhecimento da postura também falha. Essa situação costuma ocorrer

quando o rosto da pessoa não está bem iluminado (figura 4.6) ou quando outra parte da

imagem capturada pela câmera está bem mais iluminada do que o rosto, fazendo com

que os detalhes do último sejam perdidos.

Figura 4.17 – Exemplo da falha devido ao alto contraste da imagem.

Figura 4.18 – Mesma imagem anterior com uma melhor iluminação na face do usuário.

34

Capítulo 5

Conclusões

O presente projeto tem como objetivo a criação de um software capaz de

identificar posturas inadequadas e notificá-las para que o usuário perceba o quanto antes

e adote uma postura correta. No longo prazo, o usuário tende a se beneficiar adotando

posturas adequadas sem precisar ser monitorado.

Com as bibliotecas OpenCV e DLIB, o software é capaz de identificar o rosto e

estimar a postura do usuário em tempo real com uma taxa de vinte frames por segundo

sem consumir muita memória do computador, mas consumindo 20% do processador.

Ainda assim, ele demonstrou permitir a utilização de outros softwares sem grandes

impactos em performance. Se o usuário não demandar um elevado recurso durante a sua

utilização, ele provavelmente não terá problemas em utilizar o programa.

Levando em conta a detecção de posturas inadequadas, o software conseguiu

identificar algumas posturas chaves, como quando o usuário se curva para um lado, se

apoiando em um dos braços, ou quando ele desliza para baixo, aumentando o ângulo

entre as pernas e o tronco.

Porém, a detecção não foi capaz de reconhecer a movimentação do usuário

quando ele muda levemente a posição da cadeira, o que não deveria ser considerada

uma postura inadequada. Ademais, a detecção da face ficou comprometida em um

ambiente com iluminação inadequada.

Uma das melhorias que o projeto poderia receber seria considerar a posição dos

ombros na detecção, o que traria mais uma referência importante ao estimar a postura e

permitiria que a identificação de posturas inadequadas se tornasse mais eficiente.

Além disso, ele poderia se tornar capaz de identificar a quantidade de horas que

o usuário está sentado, caso esteja sentado por um período prolongado, solicitá-lo para

levantar e caminhar, por exemplo. Permitir que o usuário programe alarmes para

lembra-lo de consumir água poderia ser uma outra melhoria visando a manutenção de

boas práticas na rotina.

35

Bibliografia

[1] MINISTÉRIO DA FAZENDA. “Boletim Informativo Quadrimestral sobre Benefícios por Incapacidade”. Disponível em http://www.previdencia.gov.br/wp-

content/uploads/2014/04/I-Boletim-Quadrimestral-de-Benef%C3%ADcios-por-Incapacidade1.pdf. Acesso em 27 de março de 2018.

[2] JORNAL CRUZEIRO DO SUL. “80% das pessoas sofrem com dor nas costas,

segundo a OMS”. Disponível em https://www.jornalcruzeiro.com.br/materia/821128/80-das-pessoas-sofrem-com-dor-nas-costas-segundo-a-oms. Acesso em 27 de março de 2018.

[3] CONFEDERAÇÃO NACIONAL DAS INDUSTRIAS. “Investimento em saúde e segurança no trabalho dá retorno às empresas”. Disponível em http://www.portaldaindustria.com.br/agenciacni/noticias/2016/06/investimento-em-saude-e-seguranca-no-trabalho-da-retorno-as-empresas-1/. Acesso em 27 de

março de 2018. [4] NVIDIA. “Realtime Computer Vision with OpenCV”. Disponível

em http://research.nvidia.com/publication/realtime-computer-vision-

opencv. Acesso em 04 de abril de 2018. [5] JOURNAL OF MACHINE LEARNING RESEARCH. “Dlib-ml: A Machine

Learning Toolkit”. Disponível

em http://www.jmlr.org/papers/volume10/king09a/king09a.pdf. Acesso em 04 de abril de 2018.

[6] SCIENTIFIC AMERICAN. “Killer Chairs: How Desk Jobs Ruin Your Health”.

Disponível em https://www.scientificamerican.com/article/killer-chairs-how-desk-jobs-ruin-your-health/. Acesso em 12 de abril de 2018.

[7] JORNAL UNIVERSO ONLINE. “Posição errada: quem trabalha sentado também

pode prejudicar coluna”. Disponível em: https://noticias.uol.com.br/economia/carreiras/ultnot/infomoney/2007/10/18/ult4229u1001.jhtm. Acesso em 14 de abril de 2018.

[8] FREEPIK. “Pack of incorrect postures and correct in front of the computer”. Disponível em https://www.freepik.com/free-vector/pack-of-incorrect-postures-and-correct-in-front-of-the-computer_1158031.htm. Acesso 12 de abril de 2018.

[9] WORLD HEALTH ORGANIZATION. “Global Recommendations on Physical Activity for Health”. Disponível em http://www.who.int/dietphysicalactivity/physical-activity-recommendations-18-64years.pdf. Acesso em 27 de abril de 2018.

[10] FREEPIK. “Pack of incorrect postures and correct in front of the computer”.

Disponível em https://www.freepik.com/free-vector/pack-of-correct-and-incorrect-postures_1154742.htm#term=posture&page=1&position=12. Acesso em 12 de

abril de 2018.

36

[11] UPRIGHT. “UPRIGHT GO”. Disponível em https://www.uprightpose.com/. Acesso em 13 de setembro de 2018.

[12] ZBIGATRON. “The Reasons Behind the Recent Growth of Computer Vision”.

Disponível em http://zbigatron.com/the-reasons-behind-the-recent-growth-of-computer-vision/. Acesso em 14 de abril de 2018.

[13] MIT TECHNOLOGY REVIEW. “Walmart Is Unleashing Shelf-Scanning Robots

to Peruse Its Aisles”. Disponível em https://www.technologyreview.com/the-download/609225/walmart-is-unleashing-shelf-scanning-robots-to-peruse-its-aisles/. Acesso em 16 de abril de 2018.

[14] CBINSIGHTS. “44 Corporations Working On Autonomous Vehicles”. Disponível em https://www.cbinsights.com/research/autonomous-driverless-vehicles-corporations-list/. Acesso em 23 de abril de 2018.

[15] TESLA. “Autopilot”. Disponível em https://www.tesla.com/autopilot. Acesso 23 de abril de 2018.

[16] NATIONAL HEALTH SERVICE. “Common posture mistakes and fixes”.

Disponível em https://www.nhs.uk/live-well/exercise/common-posture-mistakes-and-fixes/. Acesso 11 de setembro de 2018.

[17] OPENCV. “About”. Disponível em https://opencv.org/about.html. Acesso 22 de

março de 2018. [18] OPENFACE. “DLIB Landmarks”. Disponível em http://openface-

api.readthedocs.io/en/latest/_images/dlib-landmark-mean.png. Acesso 22 de abril

de 2018. [19] GITHUB. “OpenPose”. Disponível em https://github.com/CMU-Perceptual-

Computing-Lab/openpose. Acesso 14 de janeiro de 2018.

[20] QT DOCUMENTATION ARCHIVES. “Signals & Slots”. Disponível em

http://doc.qt.io/archives/qt-4.8/signalsandslots.html. Acesso 26 de março de 2018.

[21] THOTH. “Histograms of Oriented Gradients for Human Detection”. Disponível em https://lear.inrialpes.fr/people/triggs/pubs/Dalal-cvpr05.pdf. Acesso 06 de setembro de 2018.

[22] DLIB. “Face Landmark Detection”. Disponível em http://dlib.net/face_landmark_detection_ex.cpp.html. Acesso 29 de julho de 2018.

[23] RESEARCH GATE. “One Millisecond Face Alignment with an Ensemble of

Regression Trees”. Disponível em https://www.researchgate.net/publication/264419855_One_Millisecond_Face_Alignment_with_an_Ensemble_of_Regression_Trees. Acesso 29 de julho de 2018.

37

[24] INTELLIGENT BEHAVIOUR UNDERSTANDING GROUP. “Facial Point Annotations”. Disponível em https://ibug.doc.ic.ac.uk/resources/facial-point-annotations/. Acesso 29 de julho de 2018.

[25] WIKIPEDIA. “Six degrees of freedom”. Disponível em https://en.wikipedia.org/wiki/Six_degrees_of_freedom. Acesso 27 de abril de 2018.

[26] OPENCV. “Camera Calibration and 3D Reconstruction”. Disponível em

https://docs.opencv.org/3.3.0/d9/d0c/group__calib3d.html. Acesso 27 de abril de 2018.

[27] TECHNICAL UNIVERSITY OF DENMARK. “Methods for Non-Linear Least

Squares Problems”. Disponível em http://orbit.dtu.dk/files/2721358/imm3215.pdf. Acesso 08 de setembro de 2018.