Cuprins:

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

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

Video: Vision 4all - Sistem Visão Assistida Para Deficientes Visuais Usando OpenCV, Dragonboard 410c E Aplicativo Android: 6 Steps
Video: COMPUTER VISION ASSISTED SYSTEM FOR THE VISUALLY IMPAIRED USING MOBILE EDGE AI 2024, Iunie
Anonim
Vision 4all - Sistem Visão Assistida Para Deficientes Visuais Usando OpenCV, Dragonboard 410c E Aplicativo Android
Vision 4all - Sistem Visão Assistida Para Deficientes Visuais Usando OpenCV, Dragonboard 410c E Aplicativo Android

DESCRIÇÃO

O intuiție a proiectului este dar autonomia pentru deficienți vizuali se locomoverem în ambiant interior ca case sau centre comerciale și aeroporturi.

A locomoção em ambientes já mapeados can you não ser considerado um problem bem resolvido. Um aplicativ disponibil în App Store pentru acest lucru, așa cum trebuie să fie apenat pentru 3 ambițioase și apăsate în EUA, este în LowViz Guide. Além do limitado number of locais, tal aplicativ não detecta possíveis obstáculos e pessoas that possam estar no caminho do usuário. Assim, a missão deste projeto é, através de visão computational e processamento de imagem, identificar possíveis obstáculos that possam surgir ao longo do caminho do usuário e poder recalcular o caminho a ser seguido dando independentência e empoderando o usuário. Na practică, o proiectare, embora ainda incompletă, constă în integrarea um aplicativ de unde se poate submeter sau desenar uma plantă mică 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 aplicativ calcula a posição no ambiente e permite o usuário definir para onde quer ir 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 care există este lipsit de dezvoltare tehnologică pentru capacitate și ne facem iguais”.

În acest proiect vom folosi a Dragonboard 410c, deoarece precisăm de um hardware că avem capacitate de fază sau procesare de imagini în timp real (sem ter de competiție cu alte aplicații ca serie nu celular) și până și timp seja de jos custo.

Pasul 1: Materiale

Materiais
Materiais

Pentru acest proiect vom folosi:

- uma placa Qualcomm Dragonboard 410c;

- biblioteca de procesare a imaginii OpenCV (versiunea 3.1);

- câmera care se comunică cu o placă (folosim național cu adevărat celular android cu o aplicație IP Webcan);

- celular com sistem Android pentru o aplicație;

Pasul 2: Instalarea OpenCV Na Dragonboard

Instalând OpenCV Na Dragonboard
Instalând OpenCV Na Dragonboard

Com linux instalat na placa, sigă os procedimentos padrões para se instala a biblioteca de procesamento de imagem - OpenCV - no device. Siga ca instrumente de acest link:

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

Pasul 3: Conectar a Câmera Com a Dragonboard

Conectar a Câmera Com a Dragonboard
Conectar a Câmera Com a Dragonboard

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

În acest proiect, alegem să folosim câmpul cu Moto G 3ª Gerație cu aplicația IP Webcam (disponibilă pe Google Play) care permite ca imaginea să fie transferată prin cablu wifi.

Abaixo um program that faz aquisição simples da imagem using a biblioteca opencv. O link passado as parâmetro no construtor do objecteto VideoCapture é o IP do celular (indicado no aplicativo) + “/ videofeed”. Na imagem acima, vocea încontra unde este o IP do seu celular.

A aquisição can be difficult nas versões previous a 3.1 da opencv, caso você não tenha conseguido compilar. Se vor conecta uma câmera pela entrada de câmere da dragonboard basta colocar ca parametru sau valor zero ("0"), care înseamnă că vrei să procur a câmera default.

Step 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 programmes em anexo, o identificadorDeObstáculos.cpp, o MostraContornoWebcam.cpp e o VídeoCadeiraSlavo.cpp (acestea sunt ultimele pentru testarea și înțelegerea tehnicii software).

Explicação: A ideia de identificação de obstáculo vem da determineção dos contornos mais drásticos nas imagens do video, ou seja, o code identifica mudanças drásticas de cores na imagem e conclui that isso seja um contorno e portanto um object (as são mostrados nas imagens deste Etapa). Estando a câmera na barriga do usuário, levemente inclinada for o chão, conforme o usuário se locomove, o program identifica a existência de um obiect (seja uma pessoa ou uma cadeira por example) e manda o sinal de parada caso o obiecteto seja found na região specificada (caminho do usuário) (vide imagem do contorno da cadeira - caso o usuário se aproxime da cadeira have a pixels brancos na região verde that determinam conditionção de stop). Dessa forma, sem a adição de filtros ao tipo de chão, para o funcionamiento dessa versão simplificada, este necesară um chão razoavelmente homogêneo, de forma care os detalhes do chão não sejam considerados contornos.

Obs. are possível ajustar a variável lowThreshold do code for um valor de 0 (mais sensitivo) e 100 (less sensitivo ao contorno). O valor sugerido é 60 para chão em geral.

Funcionamento: o identificadorDeObstáculos.cpp recebe um video da rede wifi através do sparkfun that deve ser um video de um celular acoplado a barriga do usuário. O cod manda condiții de oprire a um aplicativ de um altul celular că utilizatorul este folosind. Idealmente manda-se comenzi de voce de oprire oprită sau uzator.

Obs: Altere sau cod de acord pentru specifica de unde os videos são recebidos e para qual android as informações são encaminhadas. Os tipos de alterações são specificadas no próprio code (asim as no programmes of teste) comentados no início do program.

Para saber mais sobre bordas de Canny e limiarização, além de outros tópicos de visão computacional, recomandă-se procura un document oficial oficial de la OpenCV.

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

Pentru a reproduce acest proiect este necesar criar um banco de dados no site data.sparkfun.com, o proces este muit intuitiv de formă care nu va fi dada uma explicație mai detaliată aci, mas colocarem o link do banco care criamos pentru referința ().

Asim que a Dragonboard reconhece that há um obstáculo a sua frente ela posta em um banco de dados construido no data.sparkfun.com essa informação. O aplicativ faz uma consulta a este banco com o auxilia da class okhttp3 obtendo as informações as 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 aplicative emite um sinal pentru prosseguir continuamente.

Urmăriți-le ca clase și interfețe utilizate pentru proiect, care sunt explicate după:

GetJson: este folosit pentru fazer um get no banco de dados do data.sparkfun returnând um arquivo în format json pentru aplicație.

JsonDownloader: este unde geramos uma asynctask for de fato utilizarmos a class GetJson, a importância do use desta class is para não travarmos a interface do usuário e for isso precisamos criar uma thread different on applications.

MainActivity: în această clasă implementăm o logică de aplicație care continuă să consulte o bancă de date, și să o informeze pe utilizator de meio de um se necesită pentru a putea continua caminhando.

RequestListener: este o interfață utilizată pentru a selecta MainActivity cu anumite caracteristici.

SdmSoundPlayer: această clasă este utilizată pentru gerenciar os comandos de voz da aplicação, caso você ceira inserir as suas próprias gravações você deve criar uma paste raw dentro da pasta res e include os arquivos de audio lá. Feito isso dentro do method initSoundHash () você deve colocar esses arquivos dentro de mSoundHash que é uma tabela Hash. Pentru a folosi acest audio basta a utiliza sau a metodului playSound (int key) și a trece cum parametru a scăpa scolida pentru o sinal de voce.

Warnings: essa classe este utilizată pentru a facilita sau parser do json returnat pelo banco de dados.

Urmăriți-le și anexând și arhivele vocii utilizate.

O layout da aplicação consistia de um unique botão that functionava com o method Quit implementado na MainActivity, this method simplples forçava to apply a parar to consulta no banco de dados.

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

O cod nu este bem comentat, dar acreditat ca și explicații acima devem ser suficiente pentru o înțelegere a ceea ce este acontecendent.

Pasul 6: Sugestii De Continuare

Poderiamos integrar um sistema de localaização. Existe o Qualcomm iZat SDK care poseda un sistem de localizare care usa GNSS, acelerometru, magnetrometru intre altii, já embutidos no próprio processador Qualcomm Snapdragon (presente na maioria dos celulares). No entanto, had pouca documentação e necessitava de testes mais demorados.

Também gostariamos de use um sensor de distância ultrassonico, porém tivemos problems how to comunicação com a Dragonboard, that poderia ser resolvido com mais calma. Se tiver tempo, procure as bibliotecas já presentses no kit de development, elas possuem diverse exemplos for each type de sensor.

No site Developers Qualcomm existem fóruns e tutoriais that we can help, and ainda há os tutoriais da 96Boards no you tube.

Recomandat: