Lcarrot commited on
Commit
697571c
·
verified ·
1 Parent(s): 4720f78

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +145 -0
app.py ADDED
@@ -0,0 +1,145 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from transformers import pipeline
2
+ asr = pipeline(task="automatic-speech-recognition", model="openai/whisper-base")
3
+
4
+ def get_text_from_audio(audio):
5
+ output = asr(audio, max_new_tokens=256,chunk_length_s=30,batch_size=8)
6
+ return output['text']
7
+
8
+
9
+ from transformers import MarianMTModel, MarianTokenizer
10
+
11
+ # Загрузка модели и токенизатора для перевода с русского на английский
12
+ tr_ru_model_name = "Helsinki-NLP/opus-mt-ru-en"
13
+ tr_ru_tokenizer = MarianTokenizer.from_pretrained(tr_ru_model_name)
14
+ tr_ru_model = MarianMTModel.from_pretrained(tr_ru_model_name)
15
+
16
+ # Функция для перевода текста
17
+ def translate_ru_to_en(text):
18
+ # Токенизация входного текста
19
+ tokenized_text = tr_ru_tokenizer.prepare_seq2seq_batch([text], return_tensors="pt")
20
+
21
+ # Перевод текста
22
+ translated = tr_ru_model.generate(**tokenized_text)
23
+
24
+ # Декодирование переведенного текста
25
+ translated_text = tr_ru_tokenizer.decode(translated[0], skip_special_tokens=True)
26
+
27
+ return translated_text
28
+
29
+
30
+ import requests
31
+ from PIL import Image
32
+
33
+ сurrent_images = []
34
+
35
+ def load_image(image_url):
36
+ image = Image.open(requests.get(image_url, stream=True).raw)
37
+ if сurrent_images:
38
+ сurrent_images.pop(0)
39
+ сurrent_images.append(image)
40
+ return image
41
+
42
+
43
+ from transformers import ViltProcessor, ViltForQuestionAnswering
44
+
45
+ # Загрузка процессора и модели VQA
46
+ img_processor = ViltProcessor.from_pretrained("dandelin/vilt-b32-finetuned-vqa")
47
+ img_model = ViltForQuestionAnswering.from_pretrained("dandelin/vilt-b32-finetuned-vqa")
48
+
49
+ # Функция для получения ответа на вопрос по изображению
50
+ def ask_question_about_image(question):
51
+ # Подготовка входных данных для модели
52
+ encoding = img_processor(сurrent_images[0], text=question, return_tensors="pt")
53
+
54
+ # Получение ответа от модели
55
+ outputs = img_model(**encoding)
56
+ logits = outputs.logits
57
+ idx = logits.argmax(-1).item()
58
+
59
+ # Декодирование ответа
60
+ answer = img_model.config.id2label[idx]
61
+
62
+ return answer
63
+
64
+
65
+ from transformers import MarianMTModel, MarianTokenizer
66
+
67
+ # Загрузка модели и токенизатора для перевода с русского на английский
68
+ tr_en_model_name = "Helsinki-NLP/opus-mt-en-ru"
69
+ tr_en_tokenizer = MarianTokenizer.from_pretrained(tr_en_model_name)
70
+ tr_en_model = MarianMTModel.from_pretrained(tr_en_model_name)
71
+
72
+ # Функция для перевода текста
73
+ def translate_en_to_ru(text):
74
+ # Токенизация входного текста
75
+ tokenized_text = tr_en_tokenizer.prepare_seq2seq_batch([text], return_tensors="pt")
76
+
77
+ # Перевод текста
78
+ translated = tr_en_model.generate(**tokenized_text)
79
+
80
+ # Декодирование переведенного текста
81
+ translated_text = tr_en_tokenizer.decode(translated[0], skip_special_tokens=True)
82
+
83
+ return translated_text
84
+
85
+
86
+ from transformers import pipeline
87
+ import torch
88
+ import IPython.display as ipd
89
+ import io
90
+ import soundfile as sf
91
+ import numpy as np
92
+
93
+ # Загружаем TTS-модель для русского языка
94
+ tts_pipe = pipeline("text-to-speech", model="facebook/mms-tts-rus")
95
+
96
+ def text_to_speech(text, output_file="output.wav"):
97
+ output = tts_pipe(text)
98
+ print(output)
99
+ sf.write(output_file, output['audio'][0], samplerate=output['sampling_rate'])
100
+
101
+ return output_file
102
+
103
+
104
+ def transcribe_long_form(filepath):
105
+ if filepath is None:
106
+ gr.Warning("No audio found, please retry.")
107
+ return ""
108
+
109
+ gradio_audio.append(filepath)
110
+ ru_text = get_text_from_audio(gradio_audio[0])
111
+ eng_text = translate_ru_to_en(ru_text)
112
+ answer = ask_question_about_image(eng_text)
113
+ ru_text_ans = translate_en_to_ru(answer)
114
+ speech_filename = text_to_speech(ru_text_ans)
115
+ return speech_filename
116
+
117
+
118
+ import os
119
+ import gradio as gr
120
+
121
+ import gradio as gr
122
+ demo = gr.Blocks()
123
+
124
+ mic_transcribe = gr.Interface(
125
+ fn=transcribe_long_form,
126
+ inputs=gr.Audio(sources="microphone",
127
+ type="filepath"),
128
+ outputs="audio",
129
+ allow_flagging="never")
130
+
131
+ file_load = gr.Interface(
132
+ fn=load_image,
133
+ inputs="text",
134
+ outputs="image",
135
+ allow_flagging="never",
136
+ )
137
+
138
+ with demo:
139
+ gr.TabbedInterface(
140
+ [mic_transcribe,
141
+ file_load],
142
+ ["Transcribe Microphone",
143
+ "Transcribe Audio File"],
144
+ )
145
+ demo.launch(share=True)