Taula de continguts:

Vision 4all - Sistema Visão Assistida Per a Deficients Visuals Usant OpenCV, Dragonboard 410c E Aplicativo Android: 6 Steps
Vision 4all - Sistema Visão Assistida Per a Deficients Visuals Usant OpenCV, Dragonboard 410c E Aplicativo Android: 6 Steps

Vídeo: Vision 4all - Sistema Visão Assistida Per a Deficients Visuals Usant OpenCV, Dragonboard 410c E Aplicativo Android: 6 Steps

Vídeo: Vision 4all - Sistema Visão Assistida Per a Deficients Visuals Usant OpenCV, Dragonboard 410c E Aplicativo Android: 6 Steps
Vídeo: 🌟 ENG SUB | Versatile Mage | Full Version EP37-48 | Yuewen Animation 2024, Desembre
Anonim
Vision 4all - Sistema Visão Assistida Per a Deficients Visuals Usant OpenCV, Dragonboard 410c E Aplicativo Android
Vision 4all - Sistema Visão Assistida Per a Deficients Visuals Usant OpenCV, Dragonboard 410c E Aplicativo Android

DESCRIÇÃO

O intuït do projecto és dar autonomia for deficients visuais se locomoverem em ambients indoor as cases ou shopping centres e aeroportos.

A locomoção em ambients já mapeados pode o no ser considerado um problema bem resolvido. Hi ha un aplicatiu disponible a l'App Store per a això, que vol dir que s'apliquen per a 3 ambients i s'aplica als EUA, o bé a LowViz Guide. Além do limitado number of locais, tal aplicatiu no 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 independencia e empoderando o usuário. Na pràtica, o projectat, embora ainda incomplet, consisteix en integrar um aplicatiu d’on es pot sotmetre o desenvolupar la planta baixa del local d’interès, seja uma casa o 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 permet o usuário definir para onde quer ir e dá comandos de voz para movimentação. A câmera, quan detecta um obstáculo a frente, puede recalcular o caminho do usuário. Como dizia Hugh Herr: “Nenhum indivíduo é incapaz, o que existe es falta de desarrollo tecnológico para capacitar y nos tornar iguais”.

En aquest projecte usem a Dragonboard 410c, perquè precisament tenim un maquinari que tinguem capacitat de fer o processar imatges en temps real (sempre que competim com altres aplicacions com a sèries no cel·lulars) i fins i tot el mateix temps que baixem.

Pas 1: materials

Materiais
Materiais

Per a aquest projecte es pot utilitzar:

- uma placa Qualcomm Dragonboard 410c;

- biblioteca de processament d’imatges OpenCV (versió 3.1);

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

- celular com sistema Android per a aplicatiu;

Pas 2: Instal·leu OpenCV Na Dragonboard

Instal·lant OpenCV Na Dragonboard
Instal·lant OpenCV Na Dragonboard

Com linux instalado na placa, siga os procedimentos padrões para instal·lar una biblioteca de processament d'imatges - OpenCV - no device. Com a instruccions d'aquest enllaç:

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

Pas 3: Conectar a Câmera Com a Dragonboard

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

Precisem connectar a câmera que serão os olhos do deficiente com a placa de desenvolupament Dragonboard 410c. Existem vários jeitos de fazer isso. A dragonboard possui entry for flatcables, ou seja, is compatível com as câmeras usadas comumente as placas as a Raspberry pi.

En aquest projecte, optem per utilitzar com a càmera amb Moto G 3ª Geração com o aplicatiu IP Webcam (disponible a Google Play) que permet que una imatge es transfereixi a través de pèl wifi.

Abaixo um programa that faz aquisição simples da imagem using a biblioteca opencv. O link passado com paràmetre no construtor do objectio VideoCapture é o IP do celular (indicado no aplicativo) + “/ videofeed”. Na imagem acima, você encontra onde está o IP do seu celular.

A aquisição can ser difficult nas versões anteriors a 3.1 da opencv, case você não tenha conseguido compilar. Se você connectar uma câmera pela entrada de câmeras da dragonboard basta colocar com paràmetre o valor zero ("0"), que significa que você quer procurar a câmera default.

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

Image
Image
Desenvolupar programari de processament d'imatges que prenguin decisions
Desenvolupar programari de processament d'imatges que prenguin decisions
Desenvolupar programari de processament d'imatges que prenguin decisions
Desenvolupar programari de processament d'imatges que prenguin decisions

Há três programmes em anexo, o identificadorDeObstáculos.cpp, o MostraContornoWebcam.cpp e o VídeoCadeiraSlavo.cpp (aquests últims últims per testejar i entendre la tècnica del 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 codi identifica mudanças drásticas de cores na imagem e conclui que isso seja um contorno e portanto um objecte (com são mostrados nas imagens deste pas). Estando a câmera na barriga do usuário, levemente inclinada para o chão, conforme o usuario se locomove, o programa identifica a existencia de um objeto (seja uma pessoa ou uma cadeira por example) e manda o sinal de parada caso o objeto seja found na região especificada (caminho do usuário) (vide imagem do contorno da cadeira - caso o usuari se aproxime da cadeira haverá pixels brancos na região verde que determinam condition de parada). Dessa forma, sem a adição de filtros ao tipo de chão, para o funcionamiento dessa versão simplificada, és necessari amb un razoavelment homogeni, de forma que os detalhes do chão não sejam considerats contornos.

Obs. és possible ajustar una variable lowThreshold del codi per a un valor de 0 (més sensible) i 100 (menys sensible al contorn). O valor sugerido é 60 para chão em geral.

Funcionament: 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 conditions 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 code of acord per especificar d’onde os videos 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 com nos programas de teste) comentados no inici do programa.

Para saber mais sobre bordas de Canny e limiarização, além de altres tòpics de visió computacional, es recomana procurar un documentació oficial da OpenCV.

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

Per reproduir aquest projecte és necessari criar amb un banc de dados no site data.sparkfun.com, o procés és un mètode intuïtiu de forma que no serà dada uma explicació més detalhada aqui, sinó que es col·loquem o enllaço amb bancs que criamos per referència ().

Assim que a Dragonboard reconhece que há um obstáculo a su frente ela posta em um banco de dados construido no data.sparkfun.com essa informationção. O aplicativo faz uma consulta a este bank com o auxílio da classe okhttp3 obtendo as informações com 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.

Seguiment de l'annex com a classes i interfícies utilitzades per a un projecte, que s'explica a seguir:

GetJson: is used for fazer um get no banco de dados do data.sparkfun retornant um arquivo em format json for a applicationção.

JsonDownloader: is onde geramos uma asynctask for de fato utilizarmos a classe GetJson, a importância do use this class is for no travarmos a interface do usuari i per isso precisamos criar uma thread different in application.

MainActivity: en aquesta classe implementem a una lògica aplicable que contínuament consulta o banc de dats, i informació o usuari per meio de um audio que es precisa per a vostè pot continuar caminant.

RequestListener: la vostra interfície s'utilitza per forçar o MainActivity amb certes característiques.

SdmSoundPlayer: aquesta classe és usada per a gerenciar els comandaments de veu da aplicació, cas que es vulgui inserir com a pròpries importants que s’ha de criar uma pasta raw dins de pasta res i incloure els arquius d’àudio lá. Feito isso inside do method initSoundHash () você deve colocar esses arquivos inside de mSoundHash que é uma tabela Hash. Per utilitzar aquest àudio basta utilitzar o mètode playSound (int key) i passar com a paràmetre a la xerrada escoltada per al senyal de veu.

Advertiments: essa classe is usedada for facilitar o parser do json retornado pelo banco de dados.

Seguim em anexar també els arquius de veu utilitzats.

O layout da aplicação consistia d'un únic botó que funciona com a mètode Quit implementat na MainActivity, aquest mètode és senzillament forçava a aplicar a parar a consulta no banc de dados.

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

O código no está bem comentado, mas acredito que como explicaças acima devem ser suficientes para o entendimiento do que está acontecendo.

Pas 6: Suggeriments de continuació

Poderiamos integrar um sistema de localaização. Existe o Qualcomm iZat SDK que posseeix un sistema de localització que usa GNSS, aceleròmetre, magnetròmetre entre altres, ja embotits sense pròpri processador Qualcomm Snapdragon (present na maioria dos celulares). No entanto, havia pouca documentació i necessitat de testes més demorats.

Tambem gostariamos of use um sensor de distância ultrassonico, perém tivemos problemes quant a comunicação com a Dragonboard, que poderia ser resolt com més calma. Tiver tempo, procure as bibliotecas já presents no kit de development, elas possuem diversos exemples per a cada tipus de sensor.

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

Recomanat: