Sommario:

Vision 4all - Sistema Visão Assistida Para Deficientes Visuais Usando OpenCV, Dragonboard 410c E Aplicativo Android: 6 Passaggi
Vision 4all - Sistema Visão Assistida Para Deficientes Visuais Usando OpenCV, Dragonboard 410c E Aplicativo Android: 6 Passaggi

Video: Vision 4all - Sistema Visão Assistida Para Deficientes Visuais Usando OpenCV, Dragonboard 410c E Aplicativo Android: 6 Passaggi

Video: Vision 4all - Sistema Visão Assistida Para Deficientes Visuais Usando OpenCV, Dragonboard 410c E Aplicativo Android: 6 Passaggi
Video: 🌟 ENG SUB | Versatile Mage | Full Version EP37-48 | Yuewen Animation 2024, Dicembre
Anonim
Vision 4all - Sistema Visão Assistida Para Deficientes Visuais Usando OpenCV, Dragonboard 410c E Aplicativo Android
Vision 4all - Sistema Visão Assistida Para 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 centres e aeroportos.

A locomoção em ambientes já mapeados pode ou não ser considero um problema bem resolvido. Un'applicazione disponibile su App Store per isso, ainda que sirva apenas para 3 ambientes e apenas nos EUA, é o LowViz Guide. Além do limitado número de locais, tal aplicativo não detecta possíveis obstáculos e pessoas que possam estar no caminho do 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 do caminho do usuário e poder recalcular o caminho a ser seguido dando independência e empoderando o usuário. Na prática, o projeto, embora ainda incompleto, consiste em integrar um aplicativo de onde se pode submeter ou desenhar uma planta baixa do local de interesse, seja uma casa ou shopping. Com a placa integrada a uma câmera na cintura do usuário, e um fone de 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 em tempo real (sem ter de competir com outras aplicações come seria no celular) e ao mesmo tempo seja de baixo custo.

Passaggio 1: materiale

materiale
materiale

Para este projeto vamos utilizar:

- ma placa Qualcomm Dragonboard 410c;

- biblioteca di elaborazione delle immagini OpenCV (versione 3.1);

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

- cellulare con sistema Android per o applicativo;

Passaggio 2: installazione di OpenCV Na Dragonboard

Installando OpenCV Na Dragonboard
Installando 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 come instruções deste link:

docs.opencv.org/3.0-beta/doc/tutorials/intr…

Passaggio 3: collegare una fotocamera e un Dragonboard

Collega una fotocamera con Dragonboard
Collega una fotocamera con Dragonboard

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

Nidificare il progetto, è possibile utilizzare come telecamera su Moto G 3ª Geração com o aplicativo IP Webcam (disponibile su Google Play) per consentire l'acquisizione di un'immagine durante il trasferimento della connessione Wi-Fi.

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

Aquisizione pode ser difícil nas versões anteriores a 3.1 da opencv, caso vocale não tenha seguito compilar. Se você conectar uma câmera pela entrada de câmeras da dragonboard basta colocar como parâmetro o valor zero ("0"), que significa que você quer procurar a câmera default.

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

Image
Image
Desenvolver Software De Processamento De Imagens Que Toma Decisões
Desenvolver Software De Processamento De Imagens Que Toma Decisões
Desenvolver Software De Processamento De Imagens Que Toma Decisões
Desenvolver Software De Processamento De Imagens Que Toma Decisões

Há três programas em anexo, o identificatodorDeObstáculos.cpp, o MostraContornoWebcam.cpp e o VídeoCadeiraSlavo.cpp (estes dois últimos para teste e entendimento da técnica do software).

Spiegazione: Un'idea di identificazione di 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 de cores na imagem e conclui que isso seja in um contorno e portanto um imagen de portanto um osjeto (com) fare un passo). 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 na 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 green que determinam condição de parada). Dessa forma, sem adição de filtris ao tipo de chão, para o funcionamento dessa versão simplificada, é necessário um chão razoavelmente omogeneo, de forma que os detalhes do chão não sejam considerdos contornis.

Oss. È possibile regolare una diversa soglia bassa del codice per il valore di 0 (più sensibile) e 100 (meno sensibile e per il contorno). O valor sugerido é 60 para chão em geral.

Funcionamento: o identificadorDeObstáculos.cpp recebe um vídeo da rede wifi através do 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. Tutti i tipi di alterazioni sono specifici per qualsiasi codice (assim come nessun programma di prova) come indicato non per programma.

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

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

Per riprodurre questo progetto è necessario creare un banco di dati senza dati del sito.sparkfun.com, o il processo è molto intuitivo nella forma che non è stato spiegato in questo modo più dettagli qui, più colocaremo o collegamento al banco di prova per riferimento ().

Assim que a Dragonboard reconhece que há um obstáculo a sua frente ela post em um banco de dados non costruito 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 dado enviado. Com esse dado em mãos conseguimos dizer se há um obstáculo no caminho, assim é emitido um sinal de voz para o usuário parar. Se o caminho está livre o aplicativo emite um sinal para prosseguir continuamente.

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

GetJson: è utile per fare in modo che non si ottenga un banco di dati per eseguire data.sparkfun e si restituisca un file in formato json per un'applicazione.

JsonDownloader: è onde geramos uma asynctask para de fato utilizarmos a class GetJson, a importância do use desta class é para não travarmos a interface do usuário e para isso precisamos criar uma thread differenti aplicação.

MainActivity: nesta classe implementa una logica da applicare che si consulta continuamente o banco de dados, e informa o usuário per meio de um audio se ele precisa per ou pode continuar caminhando.

RequestListener: è un'interfaccia utilizzata per alcune caratteristiche dell'attività principale.

SdmSoundPlayer: questa classe è usata per gestire os comandi di voce da aplicação, caso vocale queira inserir as suas próprias gravações você deve creare una pasta cruda dentro la pasta res e includere gli arquivos de audio lá. Feito isso dentro do método initSoundHash() você deve colocar esses arquivos dentro de mSoundHash que é uma tabela Hash. 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.

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

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

Il layout dell'applicazione consiste in un'unica operazione che funziona con il metodo Esci dall'implementazione di MainActivity, questo metodo è semplice per eseguire un'applicazione e una consultazione senza banco di lavoro.

Qualquer duvida 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 as explicações acima devem ser suficientes para o entendimento do que está acontecendo.

Passaggio 6: Suggerimenti per la continuazione

Poderiamos integrar um sistema de localaização. Esiste l'SDK di Qualcomm che possiede un sistema di localizzazione negli Stati Uniti GNSS, acceleratore, magnetrometro tra gli altri, non direttamente processore Qualcomm Snapdragon (presente nella maggior parte dei cellulari). No entanto, havia pouca documentação e necessitava de testes mais demorados.

Também gostariamos de usar um sensor de distancia ultrassonico, porém tivemos problemas quanto a comunicação com a Dragonboard, que poderia ser resolvido com mais calm. Se tiver tempo, procure as bibliotecas já present no kit de desenvolvimento, elas possuem diversos exemplos para cada tipo de sensor.

Nessun sito Sviluppatori Qualcomm esiste per i forum e per i tutoriais que podem ajudar, e ainda há os tutoriais da 96Boards no you tube.

Consigliato: