Introduction: Vision 4all - Sistema Visão Assistida Feliz Lusitania Deficientes Visuais Usando OpenCV, Dragonboard 410c E Aplicativo Android

DESCRIÇÃO

O intuito do projeto é dar autonomia para deficientes visuais se locomoverem em ambientes indoor como casas ou shopping centers e aeroportos.

A locomoção em ambientes já mapeados pode ou não ser considerado um problema bem resolvido. Um aplicativo disponível atomic number 11 App Store para isso, ainda que sirva apenas para 3 ambientes e apenas nos EUA, é o LowViz Guide. Além brawl limitado número de locais, tal aplicativo não detecta possíveis obstáculos e pessoas que possam estar no caminho suffice usuário. Assim, a missão deste projeto é, através de visão computacional e processamento de imagem, identificar possíveis obstáculos que possam surgir ao longo dress caminho do usuário e poder recalcular o caminho a ser seguido dando independência e empoderando o usuário. Sodium prática, o projeto, embora ainda incompleto, consiste em integrar um aplicativo Diamond State onde se pode submeter ou desenhar genus Uma planta baixa arrange local anesthetic de interesse, seja Uma casa ou shopping. Com a placa integrada a uma câmera na cintura practise usuário, e um fone Diamond State ouvido, o aplicativo calcula a posição no ambiente e permite o usuário definir para onde quer ir e dá comandos de voz para movimentação. A câmera, quando detecta um obstáculo a frente, pode recalcular o caminho do usuário. Como dizia Hugh Herr: "Nenhum indivíduo é incapaz, o que existe é falta de desenvolvimento tecnológico para capacitar e nos tornar iguais".

Neste projeto usaremos a Dragonboard 410c, porque precisamos de um hardware que tenha capacidade de fazer o processamento de imagens mut pace real (sem ter de competir com outras aplicações como seria nary celular) e ao mesmo tempo seja de baixo custo.

Footstep 1: Materiais

Para este projeto vamos utilizar:

- uma placa Qualcomm Dragonboard 410c;

- biblioteca de processamento de imagem OpenCV (versão 3.1);

- câmera que se comunique com a placa (usaremos na verdade um celular android com o aplicativo IP Webcan);

- celular com sistema Humanoid para o aplicativo;

Step 2: Instalando OpenCV Na Dragonboard

Com linux instalado na placa, siga os procedimentos padrões para se instalar a biblioteca de processamento de imagem - OpenCV - no device. Siga arsenic instruções deste link:

http://docs.opencv.org/3.0-beta/physician/tutorials/intr...

Step 3: Conectar a Câmera Com a Dragonboard

Precisamos conectar a câmera que serão os olhos behave deficiente com a placa de desenvolvimento Dragonboard 410c. Existem vários jeitos de fazer isso. A dragonboard possui entrada para flatcables, ou seja, é compatível com as câmeras usadas comumente em placas como a Raspberry pi.

Neste projeto, optamos usar como câmera um Moto G 3ª Geração com o aplicativo IP Webcam (disponível na Google Play) que permite que a imagem seja transferida pelo wireless local area network.

Abaixo um programa que faz aquisição simples da imagem usando a biblioteca opencv. O link passado como parâmetro no construtor do objeto VideoCapture é o IP do celular (indicado no aplicativo) + "/videofeed". Na imagem acima, você encontra onde está o IP brawl seu celular.

A aquisição pode ser difícil nas versões anteriores a 3.1 DA opencv, caso você não tenha conseguido compilar. Se você conectar uma câmera pela entrada de câmeras district attorney dragonboard basta colocar como parâmetro o valor nix ("0"), que significa que você quer procurar a câmera default.

Step 4: Desenvolver Software Delaware Processamento De Imagens Que Toma Decisões

Há três programas pica em anexo, o identificadorDeObstáculos.cpp, o MostraContornoWebcam.cpp e o VídeoCadeiraSlavo.cpp (estes dois últimos para teste e entendimento da técnica act up package).

Explicação: A ideia de identificação de obstáculo vem da determinação dos contornos mais drásticos nas imagens do vídeo, ou seja, o código identifica mudanças drásticas Delaware cores Na imagem e conclui que isso seja um contorno e portanto um objeto (como são mostrados nas imagens deste step). Estando a câmera na barriga do usuário, levemente inclinada para o chão, conforme o usuário se locomove, o programa identifica a existência de um objeto (seja uma pessoa ou uma cadeira por exemplo) e manda o sinal de parada caso o objeto seja encontrado sodium região especificada (caminho do usuário) (vide imagem do contorno da cadeira - caso o usuário se aproxime da cadeira haverá pixels brancos na região verde que determinam condição Delaware parada). Dessa forma, sem a adição de filtros ao tipo de chão, para o funcionamento dessa versão simplificada, é necessário um chão razoavelmente homogêneo, de forma que atomic number 76 detalhes do chão não sejam considerados contornos.

Obs. é possível ajustar a variável lowThreshold do código para um valor de 0 (mais sensitivo) e 100 (menos sensitivo ao contorno). O valour sugerido é 60 para chão em geral.

Funcionamento: o identificadorDeObstáculos.cpp recebe um vídeo da rede wifi através perform sparkfun que deve ser um vídeo de um celular acoplado a barriga do usuário. O código manda condições de parada á um aplicativo de um outro celular que usuário está usando. Idealmente manda-se comandos de voz DE parada parada o usuário.

Obs: Altere o código de acordo para especificar de onde os vídeos são recebidos e para qual android as informações são encaminhadas. Os tipos de alterações são especificadas no próprio código (assim como nos programas de teste) comentados no início do programa.

Para saber mais sobre bordas de Canny e limiarização, além de outros tópicos First State visão computacional, recomenda-se procurar a documentação oficial da OpenCV.

Step 5: Fazer Aplicativo Que Repassa As Informações Para O Deficiente Visual

Para reproduzir este projeto é necessário criar um banco de dados no site data.sparkfun.com, o processo é muito intuitivo de forma que não será dada uma explicação mais detalhada aqui, mas colocaremos o link do banco que criamos Para River referência ().

Assim que a Dragonboard reconhece que há um obstáculo a sua frente ela posta em um banco de dados construido no data.sparkfun.com essa informação. O aplicativo faz uma consulta a este banco com o auxílio da classe okhttp3 obtendo as informações como um Json. Então fazemos um parser desse json para encontrarmos o último wainscot enviado. Com esse wainscot em mãos conseguimos dizer se há um obstáculo no caminho, assim é emitido um sinal DE voz para o usuário parar. Southeastward o caminho está livre o aplicativo emite um sinal para prosseguir continuamente.

Seguem pica em anexo as classes e Interfaces utilizadas para o projeto, que são explicadas a seguir:

GetJson: é utilizada para fazer um get no banco de dados coiffure information.sparkfun retornando um arquivo em formato json para a aplicação.

JsonDownloader: é onde geramos uma asynctask para de fato utilizarmos a classe GetJson, a importância do uso desta classe é para não travarmos a interface do usuário e para isso precisamos criar Uma ribbon diferente atomic number 11 aplicação.

MainActivity: nesta classe implementamos a lógica da aplicação que continuamente consulta o banco de dados, e informa o usuário por meio de um audio se ele precisa para ou pode continuar caminhando.

RequestListener: é uma interface utilizada Feliz Lusitania forçar o MainActivity ter certas características.

SdmSoundPlayer: esta classe é usada para gerenciar os comandos de voz da aplicação, caso você queira inserir as suas próprias gravações você deve criar uma pasta rare dentro da pasta reticuloendothelial system e incluir os arquivos de audio lá. Feito isso dentro do método initSoundHash() você deve colocar esses arquivos dentro First State mSoundHash que é genus Uma tabela Haschisc. Para usar este áudio basta usar o método playSound(int key) e passar como parâmetro a chave escolhida para o sinal de voz.

Warnings: essa classe é utilizada para facilitar o parser do json retornado pelo banco de dados.

Seguem em anexo também os arquivos de voz utilizados.

O layout da aplicação consistia de um único botão que funcionava com o método Quit implementado Na MainActivity, este método simplesmente forçava a aplicação a parar a consulta no banco de dados.

Qualquer dúvida adicional ou sugestão basta entrar em contato com o autor. Sugestões são sempre bem-vindas =).

O código não está bem comentado, mas acredito que A explicações acima devem ser suficientes Feliz Lusitania o entendimento get along que está acontecendo.

Step 6: Sugestões De Continuação

Poderiamos integrar um sistema de localaização. Existe o Qualcomm iZat SDK que possui um sistema Diamond State localização que usa GNSS, acelerômetro, magnetrômetro entre outros, já embutidos no próprio processador Qualcomm Snapdragon (presente na maioria dos celulares). No entanto, havia pouca documentação e necessitava de testes mais demorados.

Também gostariamos de usar um sensor de distância ultrassonico, porém tivemos problemas quanto a comunicação com a Dragonboard, que poderia ser resolvido com mais calma. Se tiver tempo, procure as bibliotecas já presentes no kit up Diamond State desenvolvimento, elas possuem diversos exemplos para cada tipo DE sensor.

Atomic number 102 site Developers Qualcomm existem fóruns e tutoriais que podem ajudar, e ainda há os tutoriais da 96Boards no you tube.

Represent the First to Share

Recommendations

  • Anything Goes Competition 2022

    Anything Goes Contest 2022