rmayormartins
commited on
Commit
•
03a7dca
1
Parent(s):
12077d2
Subindo arquivos
Browse files- README.md +43 -5
- app.py +72 -0
- example1.JPG +0 -0
- requirements.txt +9 -0
README.md
CHANGED
@@ -1,13 +1,51 @@
|
|
1 |
---
|
2 |
-
title: Inclusion Visually Impaired
|
3 |
-
emoji:
|
4 |
-
colorFrom:
|
5 |
colorTo: pink
|
6 |
sdk: gradio
|
7 |
-
sdk_version: 4.
|
8 |
app_file: app.py
|
9 |
pinned: false
|
10 |
license: ecl-2.0
|
11 |
---
|
12 |
|
13 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
---
|
2 |
+
title: Inclusion Visually Impaired - Image2Speech
|
3 |
+
emoji: 👨🏻🦯🦮🤖🔊
|
4 |
+
colorFrom: purple
|
5 |
colorTo: pink
|
6 |
sdk: gradio
|
7 |
+
sdk_version: 4.12.0
|
8 |
app_file: app.py
|
9 |
pinned: false
|
10 |
license: ecl-2.0
|
11 |
---
|
12 |
|
13 |
+
# Inclusão para Deficientes Visuais
|
14 |
+
|
15 |
+
Este projeto utiliza um modelo YOLOv5 para detectar objetos em imagens e descrevê-los em português para pessoas com deficiência visual. A descrição é convertida em áudio, proporcionando uma experiência e interação com a imagem.
|
16 |
+
|
17 |
+
## Desenvolvedor
|
18 |
+
|
19 |
+
Desenvolvido por Ramon Mayor Martins (2024)
|
20 |
+
|
21 |
+
- Email: [[email protected]](mailto:[email protected])
|
22 |
+
- Homepage: [https://rmayormartins.github.io/](https://rmayormartins.github.io/)
|
23 |
+
- Twitter: [@rmayormartins](https://twitter.com/rmayormartins)
|
24 |
+
- GitHub: [https://github.com/rmayormartins](https://github.com/rmayormartins)
|
25 |
+
- my Radio Callsign (PU4MAY) Brazil
|
26 |
+
|
27 |
+
## Tecnologias Utilizadas
|
28 |
+
|
29 |
+
- **YOLOv5:** Modelo de detecção de objetos treinado para identificar 80 classes de objetos comuns em tempo real.
|
30 |
+
- **OpenCV:** Biblioteca de processamento de imagens que auxilia na manipulação e análise de imagens.
|
31 |
+
- **NumPy:** Biblioteca fundamental para computação científica em Python.
|
32 |
+
- **Pillow (PIL):** Biblioteca de processamento de imagens que permite abrir, manipular e salvar arquivos de imagem em muitos formatos diferentes.
|
33 |
+
- **Scikit-Image:** Biblioteca para processamento avançado de imagens, utilizada aqui para calcular a GLCM.
|
34 |
+
- **Transformers (Hugging Face):** Biblioteca que fornece modelos de linguagem e visão, incluindo o BLIP para descrição de imagens e o MarianMT para tradução automática.
|
35 |
+
- **gTTS (Google Text-to-Speech):** Biblioteca para conversão de texto para voz, utilizada para gerar arquivos de áudio em português.
|
36 |
+
- **Gradio:** Biblioteca que facilita a criação de interfaces web interativas para modelos de aprendizado de máquina.
|
37 |
+
|
38 |
+
## Fluxo de Trabalho
|
39 |
+
|
40 |
+
1. **Carregamento da Imagem:** O usuário carrega uma imagem na interface web.
|
41 |
+
2. **Detecção de Objetos:** A imagem é processada pelo YOLOv5 para identificar e descrever objetos presentes.
|
42 |
+
3. **Análise de Cor e Textura:** A temperatura de cor e a textura da imagem são analisadas usando técnicas de média RGB e GLCM, respectivamente.
|
43 |
+
4. **Descrição Semântica:** O modelo BLIP gera uma descrição textual da imagem, que é então traduzida para o português usando MarianMT.
|
44 |
+
5. **Conversão para Voz:** A descrição completa é convertida em áudio usando gTTS.
|
45 |
+
6. **Feedback ao Usuário:** A interface Gradio exibe a descrição textual e fornece o áudio para o usuário.
|
46 |
+
|
47 |
+
## Como Utilizar
|
48 |
+
1. Faça upload de uma imagem.
|
49 |
+
2. O modelo detectará e descreverá os objetos presentes na imagem.
|
50 |
+
3. A saída a descrição textual traduzida e um arquivo de áudio com a descrição.
|
51 |
+
|
app.py
ADDED
@@ -0,0 +1,72 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import gradio as gr
|
2 |
+
import torch
|
3 |
+
from PIL import Image
|
4 |
+
from gtts import gTTS
|
5 |
+
import numpy as np
|
6 |
+
import cv2
|
7 |
+
from skimage.feature import greycomatrix, greycoprops
|
8 |
+
from transformers import BlipProcessor, BlipForConditionalGeneration, MarianMTModel, MarianTokenizer
|
9 |
+
|
10 |
+
# Carregar o modelo YOLOv5
|
11 |
+
model = torch.hub.load('ultralytics/yolov5', 'yolov5s')
|
12 |
+
|
13 |
+
# Função para análise de textura usando GLCM
|
14 |
+
def analyze_texture(image):
|
15 |
+
gray_image = cv2.cvtColor(np.array(image), cv2.COLOR_BGR2GRAY)
|
16 |
+
glcm = greycomatrix(gray_image, distances=[5], angles=[0], levels=256, symmetric=True, normed=True)
|
17 |
+
contrast = greycoprops(glcm, 'contrast')[0, 0]
|
18 |
+
return contrast
|
19 |
+
|
20 |
+
# Função para descrever imagem usando BLIP
|
21 |
+
def describe_image(image):
|
22 |
+
processor = BlipProcessor.from_pretrained("Salesforce/blip-image-captioning-base")
|
23 |
+
model = BlipForConditionalGeneration.from_pretrained("Salesforce/blip-image-captioning-base")
|
24 |
+
inputs = processor(image, return_tensors="pt")
|
25 |
+
out = model.generate(**inputs)
|
26 |
+
description = processor.decode(out[0], skip_special_tokens=True)
|
27 |
+
return description
|
28 |
+
|
29 |
+
# Função para traduzir descrição para português
|
30 |
+
def translate_description(description):
|
31 |
+
model_name = 'Helsinki-NLP/opus-mt-en-pt'
|
32 |
+
tokenizer = MarianTokenizer.from_pretrained(model_name)
|
33 |
+
model = MarianMTModel.from_pretrained(model_name)
|
34 |
+
translated = model.generate(**tokenizer(description, return_tensors="pt", padding=True))
|
35 |
+
translated_text = tokenizer.decode(translated[0], skip_special_tokens=True)
|
36 |
+
return translated_text
|
37 |
+
|
38 |
+
# Função principal para processar imagem e gerar saída de voz
|
39 |
+
def process_image(image):
|
40 |
+
# Detecção de objetos
|
41 |
+
results = model(image)
|
42 |
+
detected_image = results.render()[0]
|
43 |
+
|
44 |
+
# Análise de cor (média RGB)
|
45 |
+
mean_rgb = np.mean(np.array(image), axis=(0, 1))
|
46 |
+
|
47 |
+
# Análise de textura
|
48 |
+
texture_contrast = analyze_texture(image)
|
49 |
+
|
50 |
+
# Descrição da imagem
|
51 |
+
description = describe_image(image)
|
52 |
+
translated_description = translate_description(description)
|
53 |
+
|
54 |
+
# Texto para voz
|
55 |
+
tts = gTTS(text=translated_description, lang='pt')
|
56 |
+
tts.save("output.mp3")
|
57 |
+
|
58 |
+
# Retornar imagem com detecções, descrição e áudio
|
59 |
+
return Image.fromarray(detected_image), translated_description, "output.mp3"
|
60 |
+
|
61 |
+
# Carregar imagem de exemplo
|
62 |
+
example_image = Image.open("/mnt/data/example1.JPG")
|
63 |
+
|
64 |
+
# Interface Gradio
|
65 |
+
iface = gr.Interface(
|
66 |
+
fn=process_image,
|
67 |
+
inputs=gr.inputs.Image(type="pil"),
|
68 |
+
outputs=[gr.outputs.Image(type="pil"), gr.outputs.Textbox(), gr.outputs.Audio(type="file")],
|
69 |
+
examples=[example_image]
|
70 |
+
)
|
71 |
+
|
72 |
+
iface.launch()
|
example1.JPG
ADDED
requirements.txt
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
gradio==4.12.0
|
2 |
+
torch
|
3 |
+
Pillow
|
4 |
+
numpy
|
5 |
+
opencv-python
|
6 |
+
scikit-image
|
7 |
+
transformers
|
8 |
+
gtts
|
9 |
+
|