Post on 19-Jan-2019
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.