Cov txheej txheem:

Lub Zeem Muag 4all - System Visão Assistida Para Deficientes Visuais Usando OpenCV, Dragonboard 410c E Aplicativo Android: 6 Cov Kauj Ruam
Lub Zeem Muag 4all - System Visão Assistida Para Deficientes Visuais Usando OpenCV, Dragonboard 410c E Aplicativo Android: 6 Cov Kauj Ruam

Video: Lub Zeem Muag 4all - System Visão Assistida Para Deficientes Visuais Usando OpenCV, Dragonboard 410c E Aplicativo Android: 6 Cov Kauj Ruam

Video: Lub Zeem Muag 4all - System Visão Assistida Para Deficientes Visuais Usando OpenCV, Dragonboard 410c E Aplicativo Android: 6 Cov Kauj Ruam
Video: Modern Talking - Atlantis Is Calling (S.O.S. For Love) (Official Music Video) 2024, Lub rau hli ntuj
Anonim
Lub Zeem Muag 4all - Kev Pom Zoo Kev Pab Cuam Rau Cov Neeg Tsis Txaus Siab Visuais Usando OpenCV, Dragonboard 410c E Aplicativo Android
Lub Zeem Muag 4all - Kev Pom Zoo Kev Pab Cuam Rau Cov Neeg Tsis Txaus Siab Visuais Usando OpenCV, Dragonboard 410c E Aplicativo Android

DESCRIÇÃO

O intuito do projeto é dar autonomia para deficientes visuais se locomoverem em ambientes sab hauv tsev como casas lossis cov chaw yuav khoom e aeroportos.

Ib qho chaw nyob ib puag ncig ntawm koj cov mapeados pode ou não ser considerado um problema bem resolvido. Um aplicativo disponível na App Store para 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, ib qho missão deste projeto é, através de visão computacional e processamento de imagem, tus yam ntxwv muaj peev xwm obstáculos que 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. Nyob rau hauv, o projeto, embora ainda incompleto, suav nrog kev suav sau aplicativo de onde se pode submeter ou desenhar uma planta baixa ua hauv zos de interesse, seja uma casa ou khw. 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. 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 como seria no celular) e ao mesmo tempo seja de baixo custo.

Kauj ruam 1: Cov ntaub ntawv

Materiais
Materiais

Txhawm rau kom ua tiav cov txiaj ntsig tau siv:

- siv Qualcomm Dragonboard 410c;

- biblioteca de processamento de imagem OpenCV (nqe 3.1);

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

- celular com system Android rau o aplicativo;

Kauj Ruam 2: Instalando OpenCV Na Dragonboard

Instalando OpenCV Na Dragonboard
Instalando OpenCV Na Dragonboard

Com linux instalado na placa, siga os procedureimentos padrões para se instalar a biblioteca de processamento de imagem - OpenCV - tsis muaj cuab yeej. Siga as instruções deste txuas:

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

Kauj Ruam 3: Txuas Câmera Com rau Dragonboard

Qhia rau Câmera Com rau Dragonboard
Qhia rau Câmera Com rau Dragonboard

Precisamos conectar a câmera que serão os olhos do deficiente com a placa de desenvolvimento Dragonboard 410c. Muaj nyob hauv vários jeitos de fazer isso. Ib zaj yeeb yaj kiab muaj peev xwm nkag tau rau lub tiaj tiaj, ou seja, é compatível com li câmeras usadas comumente em placas como a Raspberry pi.

Txhawm rau ua qhov no, siv lub koob yees duab los ntawm Moto G 3ª Geração com o aplicativo IP Webcam (xa mus rau Google Ua Si) que permite que a imagem seja transferida pelo wifi.

Abaixo um programa que faz aquisição simples da imagem usando a biblioteca opencv. O txuas passado como parâmetro tsis muaj tus tsim ua objeto VideoCapture é o IP rau celular (qhia tsis muaj daim ntawv thov) + "/videofeed". Nyob rau hauv lub qhov rai uas tshwm, nyem rau ntawm lub pob IP.

Aquisição pode ser difícil nas versões anteriores a 3.1 da opencv, caso você não tenha conseguido sib piv. 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.

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

Image
Image
Desenvolver Software De Processamento De Imagens Que Toma Kev Txiav Txim Siab
Desenvolver Software De Processamento De Imagens Que Toma Kev Txiav Txim Siab
Desenvolver Software De Processamento De Imagens Que Toma Kev Txiav Txim Siab
Desenvolver Software De Processamento De Imagens Que Toma Kev Txiav Txim Siab

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

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 de cores na imagem e conclui que isso seja um contorno e portanto um obeto como kauj ruam). Estando a câmera na barriga do usuário, levemente inclinada para o chão, ua raws los ntawm 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 casja o obra região especificada (caminho do usuário) (daim vis dis aus yees duab ua contorno da cadeira - caso o usuário se aproxime da cadeira haverá pixels brancos na região verde que determinam condição de 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 os 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 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 á 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 de visão computacional, recomenda-se procurar a documentação oficial da OpenCV.

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

Para reproduzir este projeto é necessário criar um banco de dados tsis muaj qhov chaw 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 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. A 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 raws li chav kawm thiab Kev Sib Txuas siv rau kev siv, yog li piav qhia txog seguir:

GetJson: é utilizada para fazer um tsis tau txais banco de dados ua data.sparkfun retornando um arquivo em formato json para aplicação.

JsonDownloader: é onde geramos uma asynctask para de fato utilizarmos a classe GetJson, importância do uso desta classe é para não travarmos a interface do usuário e para isso precisamos criar uma thread diferente na 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 para 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 raw dentro da pasta res e incluir os arquivos de audio lá. Feito isso dentro do método initSoundHash () você deve colocar esses arquivos dentro de mSoundHash que é uma tabela Hash. Txhawm rau siv este budio basta siv o método playSound (tus yuam sij) e passar como parâmetro a chave escolhida para o sinal de voz.

Cov lus ceeb toom: tsab ntawv é 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.

Kev muaj peev xwm ua tau zoo tshaj plaws ou sugestão basta entrar em contato com o autor. Qab zib zoo li cov txiv hmab txiv ntoo 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.

Kauj Ruam 6: Qab Zib Qab Zib De Continuação

Poderiamos integrar um sistema de localaização. Muaj los ntawm Qualcomm iZat SDK que possui um sistema de localização que usa GNSS, acelerômetro, magnetrômetro entre outros, já embutidos no próprio processador Qualcomm Snapdragon (presente na maioria dos celulares). Tsis muaj qhov nkag mus, 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, muab khoom raws li bibliotecas já nthuav qhia tsis muaj cov khoom siv desenvolvimento, elas possuem diversos exemplos para cada tipo de sensor.

Tsis muaj Tus Tsim Tus Qauv Qualcomm muaj nyob rau futrun e tutoriais que podem ajudar, e ainda há os tutoriais da 96Boards tsis muaj koj lub raj.

Pom zoo: