• Nenhum resultado encontrado

VST-HMD: Desenvolvimento e Avalia¸ c˜ ao

4.1 Desenvolvimento do Prot´ otipo

4.1.5 Algoritmo de C´ alculo de Distˆ ancias

Considerando uma imagem dos dois pontos de laser capturada pela cˆamera, ´e poss´ıvel afirmar que a distˆancia aparente4 entre esse pontos ser´a fixa em uma superf´ıcie plana, mas, conforme essa superf´ıcie se distancia ou se aproxima das fontes de laser, a distˆancia entre os pontos ser´a modificada.

Partindo dessa premissa, um algoritmo para medi¸c˜ao dessa distˆancia aparente foi desenvolvido na linguagem de programa¸c˜ao C++ utilizando a biblioteca de vis˜ao com- putacional OpenCV. Apesar do algoritmo de distˆancia utilizar uma cˆamera externa, acoplada ao m´odulo de interface de usu´ario e conectada `a unidade de processamento da ISB, a imagem mostrada ao usu´ario, no display Video See-Through do HMD, ´e capturada pela cˆamera do smartphone.

3

https://www.adafruit.com

4

Distˆancia aparente corresponde `a distˆancia euclideana entre os pontos de laser na imagem capturada pela cˆamera.

A cˆamera externa est´a posicionada no ponto central entre os dois lasers. Al´em disso, os lasers s˜ao normais ao plano de imagem da cˆamera. A distˆancia entre os lasers ´e de 21 cm. A distˆancia aparente entre os pontos de laser aumenta quando a distˆancia entre o objeto alvo e a fonte de laser diminui, e vice-versa.

O algoritmo de medi¸c˜ao de distˆancia foi desenvolvido utilizando t´ecnicas de proces- samento digital de imagens. O algoritmo pode ser dividido em seis est´agios, conforme ´e mostrado na Figura 4.7. Para cada frame capturado pela cˆamera todos os est´agios s˜ao realizados. A seguir, cada est´agio ´e detalhado.

Figura 4.7: Est´agios do Algoritmo de Medi¸c˜ao de Distˆancia Fonte: [103]

Est´agio 1 - Sele¸c˜ao da Regi˜ao de Interesse: Neste est´agio, a regi˜ao de interesse, na qual os pontos verdes aparecem, ´e selecionada. A cˆamera e os lasers verdes est˜ao rigidamente acoplados `a estrutura f´ısica do HMD, logo os pontos verdes sempre aparecem em uma regi˜ao contida no centro da imagem. De forma emp´ırica, determinou-se que essa regi˜ao possui uma dimens˜ao de 35x35 pixels para distˆancias acima de quatro metros. Essa regi˜ao ´e chamada de Regi˜ao de Interesse. Essa estrat´egia foi escolhida por duas raz˜oes. Em primeiro lugar, o custo computacional do algoritmo ´e reduzido, devido `a redu¸c˜ao da ´area de busca pelos pontos verdes. Em segundo lugar, uma grande parte dos falsos positivos, que era detectada pelo algoritmo fora da Regi˜ao de Interesse, ´e eliminada.

Est´agio 2 - Filtro de Cor e de Luminosidade: Neste est´agio, ´e utilizada a repre- senta¸c˜ao da imagem no sistema HSL. A imagem resultante do est´agio anterior ´e dividida

nos trˆes canais que comp˜oe a representa¸c˜ao HSL: Hue (Cor); Saturation (Satura¸c˜ao); e Lightness (Luminosidade). Primeiramente, cada canal ´e submetido a um processo de dilata¸c˜ao da imagem. Posteriormente, s˜ao escolhidos limiares m´ınimos e m´aximos, empiricamente obtidos, que representam o padr˜ao de caracter´ısticas dos pontos verdes nos canais H e L. Ap´os a escolha dos valores de limiar, os canais s˜ao submetidos a um filtro passa-faixa. Os pixels, cujos valores est˜ao fora da faixa definida pelos limiares, tˆem seus valores substitu´ıdos por zero, que representa a cor preta. Por outro lado, os pixels, que est˜ao dentro do limiar, tˆem seu valor substitu´ıdo por 255, que representa a cor branca. Esse procedimento ´e realizado para cada pixel da imagem resultante do Est´agio 1. A imagem superior do Est´agio 2 da Figura 4.7 mostra o resultado para o canal L. A imagem inferior do Est´agio 2 da Figura 4.7 mostra o resultado para o canal H.

Est´agio 3 - Interse¸c˜ao entre os canais H e L: Neste est´agio, ´e determinada a in- terse¸c˜ao entre as regi˜oes brancas dos canais H e L, ap´os o processo de filtragem.

Est´agio 4 - Detec¸c˜ao de Bordas: Neste est´agio, ´e utilizado o algoritmo Canny de detec¸c˜ao de bordas, presente na biblioteca OpenCV, para realizar a detec¸c˜ao de bordas na imagem resultante do Est´agio 3.

Est´agio 5 - Detec¸c˜ao de C´ırculos: Neste est´agio, ´e realizada a tentativa de detec¸c˜ao de c´ırculos criados pelos est´agios anteriores. O algoritmo ´e baseado em varia¸c˜oes da Trans- formada de Hough. Ele foi apresentado em [110] e est´a dispon´ıvel na biblioteca OpenCV. Na maioria dos casos, os c´ırculos foram rapidamente encontrados, exceto quando a luz verde est´a sobre uma superf´ıcie refletiva. Nesse caso, o raio do c´ırculo aumenta para um valor fora do padr˜ao e a detec¸c˜ao correta do c´ırculo se torna uma tarefa imposs´ıvel. Em algumas situa¸c˜oes, ocorre a detec¸c˜ao de falsos positivos. ´E poss´ıvel eliminar ou reduzir essa ocorrˆencia de falsos positivos utilizando as coordenadas do centro de cada c´ırculo detectado, pois, em teoria, os c´ırculos est˜ao alinhados em uma reta paralela ao eixo-x da imagem e, portanto, devem apresentar aproximadamente o mesmo valor da coordenada x. Sendo assim, s˜ao atribu´ıdos valores de m´ınimo e m´aximo, empiricamente obtidos, para eixo-x da imagem. Se a coordenada x do centro est´a dentro da faixa permitida, ent˜ao o c´ırculo correspondente a esse centro ´e considerado como um c´ırculo v´alido.

Est´agio 6 - M´edia M´ovel: Neste est´agio, primeiramente ´e criado um limiar horizontal, tamb´em obtido empiricamente, que ´e respons´avel por separar os dois pontos de laser na imagem. Depois, ´e calculada a m´edia m´ovel para os ´ultimos 30 pontos detectados da parte superior da imagem e para os ´ultimos 30 pontos detectados da por¸c˜ao inferior da imagem. O uso dos ´ultimos 30 pontos detectados para c´alculo da m´edia m´ovel foi definido pelo fato da cˆamera apresentar uma taxa de amostragem de 30 frames por segundo. Dessa forma, apenas as imagens obtidas no ´ultimo segundo influenciam no c´alculo da m´edia m´ovel. Ap´os esses c´alculos, s˜ao determinadas as duas posi¸c˜oes estimadas dos pontos de laser verde, uma para cada fonte de laser. Por fim, as duas posi¸c˜oes estimadas s˜ao representadas na imagem como dois c´ırculos vermelhos.

A partir da determina¸c˜ao da distˆancia relativa entre esses pontos detectados na ima- gem, ´e poss´ıvel criar uma fun¸c˜ao de regress˜ao que, ap´os uma etapa de calibra¸c˜ao, con- segue calcular a distˆancia entre o usu´ario e a superf´ıcie incidida pelos lasers. Como tra- balho futuro, se torna interessante o aprimoramento do algoritmo para a identifica¸c˜ao de um conjunto maior de pontos de laser. Essa nova funcionalidade permitiria uma forma de mapeamento 3D do ambiente, auxiliando na sobreposi¸c˜ao do mundo real com as informa¸c˜oes virtuais exibidas em realidade aumentada pelo display do prot´otipo.

4.2

Experimentos e Avalia¸c˜ao do Prot´otipo

Essa Se¸c˜ao apresenta os experimentos realizados para avalia¸c˜ao do prot´otipo. Trˆes abor- dagens foram consideradas. Em primeiro lugar, a precis˜ao do algoritmo foi avaliada. Em segundo lugar, foi realizada a calibra¸c˜ao do algoritmo a partir de um conjunto de distˆancias conhecidas. Em terceiro lugar, o desempenho do algoritmo em diferentes placas de desenvolvimento foi avaliado. O principal objetivo do segundo conjunto de ex- perimentos ´e definir qual plataforma de hardware deve ser utilizada no prot´otipo. Al´em disso, ´e essencial que o hardware esteja de acordo com alguns requisitos de dispositivos vest´ıveis. Portanto, atributos como baixo peso e tamanho reduzido foram considerados durante a escolha da plataforma de hardware. A seguir, os experimentos s˜ao descritos e os resultados obtidos s˜ao apresentados. Ao final, ´e realizada uma breve discuss˜ao sobre algumas limita¸c˜oes e alguns problemas de experiˆencia do usu´ario relativos ao prot´otipo constru´ıdo.

4.2.1

Precis˜ao

Com o intuito de garantir a corretude da avalia¸c˜ao, o v´ıdeo foi gravado com os dois pontos dos lasers verdes presentes em todos os frames. Como a posi¸c˜ao da cˆamera e dos lasers ´e fixa, a regi˜ao onde os pontos verdes aparecem na imagem ´e conhecida. Sendo assim, ´e contado toda vez que o algoritmo identifica corretamente o ponto verde 1 e o ponto verde 2. A Figura 4.8 mostra o resultado de taxa de acerto ao longo do tempo, considerando todos os parˆametros de limiar que foram obtidos empiricamente. O comportamento inicial do algoritmo, com baixa taxa de acerto, se deve `a necessidade de preenchimento do buffer do c´alculo da m´edia m´ovel, que ´e utilizada para calcular as coordenadas dos pontos verdes na imagem. E poss´ıvel notar que, a partir de 25´ segundos, a taxa de acerto para os pontos 1 e 2 supera 90%. Isso est´a relacionado ao tempo necess´ario para o preenchimento do buffer utilizado no c´alculo da m´edia m´ovel.

Figura 4.8: Porcentagem de Acerto por Segundo Fonte: [103]

4.2.2

Calibra¸c˜ao

Para possibilitar a medi¸c˜ao da distˆancia entre os objetos presentes no ambiente e o usu´ario, ´e preciso saber qual ´e a sua rela¸c˜ao com a distˆancia entre os dois pontos de laser detectados na imagem. Sendo assim, com intuito de demonstrar essa etapa de calibra¸c˜ao do algoritmo, foi utilizado um anteparo de papel˜ao posicionado em um conjunto de

Figura 4.9: Calibra¸c˜ao do algoritmo de c´alculo de distˆancias

distˆancias pr´e-determinadas em rela¸c˜ao ao prot´otipo e, consequentemente, aos lasers: 1.50 m, 3.00 m, 4.50 m, 6.00 m, 7.37 m 5. Dessa forma, a distˆancia entre os pontos de laser detectados pelo algoritmo foi medida para cada uma dessas posi¸c˜oes do anteparo. A partir desse conjunto de dados, foi poss´ıvel determinar uma linha de tendˆencia que relaciona a distˆancia entre os pontos na imagem com a distˆancia entre o usu´ario e os objetos no ambiente. Essa linha foi determinada atrav´es de uma regress˜ao n˜ao-linear com fun¸c˜ao de potˆencia. O gr´afico da Figura 4.9 apresenta o resultado obtido. Observando a fun¸c˜ao encontrada, verifica-se a veracidade da premissa de que a distˆancia entre os pontos na imagem ´e inversamente proporcional `a distˆancia relativa entre o usu´ario e os objetos.

4.2.3

Desempenho

Um v´ıdeo foi gravado para avaliar o desempenho do algoritmo de processamento digital de imagens em cada placa de desenvolvimento dispon´ıvel para o projeto. A utiliza¸c˜ao de um v´ıdeo foi escolhida, pois a utiliza¸c˜ao da cˆamera limitaria a execu¸c˜ao do algoritmo a 30 frames por segundo (FPS), sendo que algumas placas de desenvolvimento conseguem processar mais do que 30 FPS.

As placas de desenvolvimento disponibilizadas para realiza¸c˜ao do teste de desempe- nho foram: BeagleBone Black (Processador AM335x 1 GHz ARM Cortex A8, 512 MB DDR3 RAM), Intel Edison (CPU Dual-threaded Intel Atom @ 500 MHz, Micro-

5

A distˆancia m´axima de 7.37 m, ao inv´es de 7.50 m, resultou do limite de espa¸co na sala onde a calibra¸c˜ao foi conduzida.

Figura 4.10: Taxa de FPS da execu¸c˜ao do algoritmo para cada placa de desenvolvimento Fonte: [103]

controlador Intel Quark de 32-bit @ 100 MHz, 1GB LPDDR3 RAM, 1 MB Cache L1), Wandboard Quad (Processador Quad Core i.MX6 Freescale @ 1 GHz, 2 GB DDR3 RAM), Intel Galileo Gen2 (Processador SoC Intel Quark X1000 @ 400 MHz, 256 MB DDR3 SRAM), Raspberry Pi B+ (Processador Broadcom BCM2835 Cortex A7 @ 700 MHz, 500 MB SDRAM), Cubieboard (Processador Dual Core ARM Cortex A7 @ 1 GHz, 1 GB DDR3 RAM). Todas as placas de desenvolvimento utilizam sistema operacional Linux constru´ıdo utilizando o framework Yocto, exceto pela Cubieboard. A biblioteca OpenCV foi compilada com otimiza¸c˜ao na maioria das placas de desenvol- vimento. Por exemplo, na Intel Edison, na Freescale Wandboard e na Cubieboard, a biblioteca foi compilada com o TBB ativado, para habilitar o paralelismo do c´odigo. Na Intel Edison, a biblioteca IPP (Integrated Performance Primitives) tamb´em foi ativada, para aumentar o desempenho de processamento de imagens e sinais. Nas placas de de- senvolvimento restantes n˜ao foi realizado nenhum tipo de otimiza¸c˜ao, j´a que todas elas s˜ao Single Core. Apesar disso, todas as placas utilizam o codec libjpeg-turbo para ace- lerar a descompress˜ao das imagens. A webcam Logitech C270 foi utilizada para gravar o v´ıdeo. A primeira m´etrica utilizada para avaliar o desempenho tratou-se da taxa de frame por segundo (FPS). A Figura 4.10 mostra o resultado obtido para cada placa de desenvolvimento, com intervalo de confian¸ca de 99%. A segunda m´etrica corresponde `a

Tabela 4.1: Desempenho da CPU

Placa de Desenvolvimento Uso da CPU (%) BeagleBone Black 90

Intel Edison 28.5

Wandboard Quad 99. ( 25% efetivo) Intel Galileo Gen2 99

Raspberry Pi B+ 99 Cubieboard 95

Porcentagem de uso da CPU. A Tabela 4.1 mostra o uso da CPU em porcentagem para cada placa de desenvolvimento, durante a execu¸c˜ao do algoritmo.

Como pode ser visto na Figura 4.10 e na Tabela 4.1, a Intel Galileo Gen2 apresenta o pior resultado de desempenho, processando apenas 2 FPS e usando 99% da CPU. Esse fato era esperado, j´a que essa placa de desenvolvimento apresenta menor poder de processamento em rela¸c˜ao a todas as outras placas. Al´em disso, esse baixo desempenho sequer cumpriu os requisitos b´asicos da aplica¸c˜ao, n˜ao sendo capaz de executar em o algoritmo em tempo real. A BeagleBone Black apresentou um bom desempenho, com taxa de 26 FPS e 90% de uso de CPU. A Raspberry Pi B+ teve um desempenho intermedi´ario, com taxa 15 FPS e 99% de uso de CPU.

Aplica¸c˜oes que demandam processamento em tempo real podem ser prejudicadas pelo desempenho em FPS apresentado pelas placas anteriormente mencionadas. Nesse projeto, por exemplo, os resultados do algoritmo s˜ao mostrados para os usu´arios atrav´es de um HMD e, desta forma, uma taxa de FPS inferior a 20 FPS pode gerar um atraso significante na interface.

Por outro lado, as placas restantes apresentaram resultados excelentes, compat´ıveis com aplica¸c˜oes que demandam processamento em tempo real. A Cubieboard obteve 35 FPS de com 99% de uso da CPU. A Intel Edison e a Wandboard Quad apresentaram as melhores taxas de FPS, ambas acima de 35 FPS. A principal diferen¸ca entre elas foi o uso da CPU. A Wandboard utilizou 99.5% de um n´ucleo do processador (o que equivale a 25%, se forem considerados todos os seus quatro n´ucleos) para executar o algoritmo. Enquanto isso, a Intel Edison usou 28,5% dos dois n´ucleos de seu processador.