rmayormartins commited on
Commit
03a7dca
1 Parent(s): 12077d2

Subindo arquivos

Browse files
Files changed (4) hide show
  1. README.md +43 -5
  2. app.py +72 -0
  3. example1.JPG +0 -0
  4. requirements.txt +9 -0
README.md CHANGED
@@ -1,13 +1,51 @@
1
  ---
2
- title: Inclusion Visually Impaired Image2speech
3
- emoji: 👀
4
- colorFrom: pink
5
  colorTo: pink
6
  sdk: gradio
7
- sdk_version: 4.31.5
8
  app_file: app.py
9
  pinned: false
10
  license: ecl-2.0
11
  ---
12
 
13
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+