Skip to content

mateustoin/DetectMyScene

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Índice

Sobre

O Detect My Scene foi um projeto realizado durante a live coding do meu canal na Twitch. O objetivo principal era realizar algum projeto assistivo, para suprir alguma necessidade. Através de discussões foi resolvido que poderíamos ajudar deficientes visuais, criando um programa que fosse capaz de descrever uma foto (que poderia ser extendido para vídeos também) através de texto ou áudio. Com isso o deficiente visual poderia tirar fotos em um ambiente ou até tirar fotos de alguma notícia ou artigo para rodar no software e ter uma breve descrição do que existe ali.

Para a criação dessa aplicação foram utilizados alguns conceitos de Inteligência Artificial e Processamento Digital de Imagens, com a biblioteca ImageAI e alguns cálculos e aplicações implementadas do zero. O projeto é realizado em alguns passos.

Para a maioria dos testes durante o desenvolvimento do projeto, a imagem a seguir foi utilizada, além de algumas outras para validações. Os objetos identificados nas imagens testadas no desenvolvimento mostram apenas objetos que o algoritmo tem 45% ou mais de certeza de ser de fato aquilo que foi identificado.

Figura 1. Imagem de teste

Passo 1: Identificação dos objetos

Esse passo é realizado pela própria biblioteca utilizada (ImageAI), onde são identificados todos os objetos reconhecidos na imagem, informando o nome, probabilidade de ser aquele objeto específico e suas delimitações na imagem. Essas informações base são essenciais para os próximos passos, pois são com elas que todas as informações são cruzadas e geram novos resultados.

Figura 2. Identificação da biblioteca

Passo 2: Determinação do ponto (x, y)

Após o passo 1 o objetivo foi calcular o "ponto central" dos objetos, a partir da delimitação, conhecida como box_points. Determinar esse ponto foi necessário para que cada objeto tivesse sua posição em um ponto (x, y) na imagem, para que o próximo passo pudesse ser feito.

Figura 3. Determinação do ponto (x, y) de cada objeto

Passo 3: Matriz de distância entre objetos

Com os objetos tendo suas posições devidamente identificadas, foi possível implementar e calcular a distância euclidiana entre cada um dos objetos identificados. Além de saber exatamente em que área da imagem cada objeto está, agora sabemos a distância entre cada um. Isso possibilita a implementação de outros algoritmos como KNN (Vizinho mais próximo), entre outros, a fim de criar uma relação entre os objetos e criar descrições para o/a deficiente visual cada vez mais detalhadas.

Figura 4. Cálculo de distância entre objetos

Além disso foi criada uma Matriz de Distância, com identificador entre cada objeto (como pode ser visto na imagem acima) e linhas indicando onde inicia e para. A tabela com os valores para a imagem de exemplo podem ser vistos abaixo (distância em pixels).

* 0 1 2 3 4 5 6 7
0 0 132 71 452 188 203 190 296
1 132 0 63 584 318 282 321 426
2 71 63 0 521 259 249 261 367
3 452 584 521 0 282 433 269 193
4 188 318 259 282 0 171 25 108
5 203 282 249 433 171 0 195 240
6 190 321 261 269 25 195 0 109
7 296 426 367 193 108 240 109 0

Tabela 1. Matriz de distância entre os objetos da imagem

Passo 4: Criação de descrição simples em áudio

De acordo com o que foi feito no passo 1 já é possível criar uma descrição textual do que pode ser encontrado na imagem e uma sonora também. Todos os tipos de objetos identificáveis pelo modelo foram traduzidos para que um dos principais diferenciais do projeto pudesse ser feito: descrição textual e sonora em português. A seguir é possível escutar o áudio gerado automaticamente depois da identificação dos objetos:

Audio 1. Descrição simples da cena

Passo 5: Criação de descrição com localização em áudio

A partir do passo 2 é possível melhorar a descrição textual e sonora. Por isso foram criados dois tipos de descrição, uma simples (descrição anterior) e outra mais detalhada a respeito da licalização dos objetos. A descrição um pouco mais detalhada pode ser vista a seguir:

Qries

Audio 2. Descrição com localização na cena

Novas funcionalidades

A partir do passo 3, com a criação da matriz de distância seria possível, através da identificação do objeto e a distância entre eles, estimar a distância entre cada um em métricas reais (metro) e a distância do objeto até o observador. Com isso seria possível criar uma descrição complexa e detalhada para o deficiente visual, entretanto não seria viável implementar isso durante as lives, visto que iria demandar muito tempo e ainda há muito o que aprender por aí em outros projetos!

2. Primeiros Passos

Siga estas instruções para rodar o projeto na sua máquina.

Pré-requisitos

  • Python 3.7 ou superior
  • Máquina com GPU (Pode ser feito sem GPU, será apenas mais lento)

Instalação

Com o python 3.7.x instalado, basta instalar com o gerenciador de pacotes do python o pipenv:

pip3 install pipenv

Clone o repositório para obter o código necessário:

git clone https://github.com/mateustoin/DetectMyScene

O arquivo de modelos utilizado para a identificações do projeto é o resnet50_coco_best_v2.0.1.h5, pode ser encontrado o link de download na documentação do ImageAI. Cole ele na pasta raiz do projeto. Depois todas as dependências necessárias para a execução do projeto podem ser instaladas automaticamente com o comando:

pipenv install

3. Uso

Para utilizar o projeto, basta entrar no ambiente criado pelo pipenv.

pipenv shell

Depois que estiver rodando dentro do ambiente virtual, a execução do código é realizada através de uma simples API para facilitar a entrada de dados. Pode ser iniciada com:

uvicorn main:app

Um servidor se iniciará em 127.0.0.1:500.

Figura 5. Entrada de imagens na API

Escolha uma imagem e clique em Enviar. Após o processamento será retornado as descrições textuais como corpo da resposta e os áudios serão gerados na mesma pasta do projeto.

Figura 6. Resultado do processamento

About

Detecção de cenas para que deficientes visuais consigam saber tudo que tem ao seu redor e suas respectivas posições no ambiente.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages