andgrt commited on
Commit
55b76ac
·
1 Parent(s): 36e06f1

udp: voice input

Browse files
Files changed (1) hide show
  1. app.py +29 -9
app.py CHANGED
@@ -4,23 +4,28 @@ from transformers import (
4
  AutoModelForSeq2SeqLM,
5
  AutoProcessor,
6
  AutoModelForDocumentQuestionAnswering,
 
7
  )
8
  import torch
 
9
 
10
  processor = AutoProcessor.from_pretrained(
11
- "MariaK/layoutlmv2-base-uncased_finetuned_docvqa_v2"
12
  )
13
  model = AutoModelForDocumentQuestionAnswering.from_pretrained(
14
- "MariaK/layoutlmv2-base-uncased_finetuned_docvqa_v2"
15
  )
16
 
17
  tokenizer_ru2en = AutoTokenizer.from_pretrained("Helsinki-NLP/opus-mt-ru-en")
18
  model_ru2en = AutoModelForSeq2SeqLM.from_pretrained("Helsinki-NLP/opus-mt-ru-en")
19
-
20
  tokenizer_en2ru = AutoTokenizer.from_pretrained("Helsinki-NLP/opus-mt-en-ru")
21
  model_en2ru = AutoModelForSeq2SeqLM.from_pretrained("Helsinki-NLP/opus-mt-en-ru")
22
 
 
 
 
23
 
 
24
  def translate_ru2en(text):
25
  inputs = tokenizer_ru2en(text, return_tensors="pt")
26
  outputs = model_ru2en.generate(**inputs)
@@ -35,8 +40,8 @@ def translate_en2ru(text):
35
  return translated_text
36
 
37
 
 
38
  def generate_answer_git(image, question):
39
-
40
  with torch.no_grad():
41
  encoding = processor(
42
  images=image,
@@ -68,25 +73,40 @@ def generate_answer(image, question):
68
  return answer_ru
69
 
70
 
71
- examples = [
72
- ["doc.png", чем данный документ?"],
73
- ]
 
 
 
 
 
 
 
 
 
 
 
 
 
74
 
 
75
  interface = gr.Interface(
76
  fn=generate_answer,
77
  inputs=[
78
  gr.Image(type="pil"),
79
  gr.Textbox(label="Вопрос (на русском)", placeholder="Ваш вопрос"),
 
80
  ],
81
  outputs=gr.Textbox(label="Ответ (на русском)"),
82
- examples=examples,
83
  title="Демо визуального ответчика на вопросы (на русском)",
84
  description=(
85
  "Gradio демо для модели doc-qa с переводом вопросов и ответов"
86
  "на русский язык. Загрузите изображение и задайте вопрос, чтобы"
87
  "получить ответ. Вы также можете использовать голосовой ввод!"
88
  ),
89
- allow_flagging="never",
90
  )
91
 
92
  interface.launch(debug=True, share=True)
 
4
  AutoModelForSeq2SeqLM,
5
  AutoProcessor,
6
  AutoModelForDocumentQuestionAnswering,
7
+ pipeline,
8
  )
9
  import torch
10
+ import numpy as np
11
 
12
  processor = AutoProcessor.from_pretrained(
13
+ "andgrt/layoutlmv2-base-uncased_finetuned_docvqa"
14
  )
15
  model = AutoModelForDocumentQuestionAnswering.from_pretrained(
16
+ "andgrt/layoutlmv2-base-uncased_finetuned_docvqa"
17
  )
18
 
19
  tokenizer_ru2en = AutoTokenizer.from_pretrained("Helsinki-NLP/opus-mt-ru-en")
20
  model_ru2en = AutoModelForSeq2SeqLM.from_pretrained("Helsinki-NLP/opus-mt-ru-en")
 
21
  tokenizer_en2ru = AutoTokenizer.from_pretrained("Helsinki-NLP/opus-mt-en-ru")
22
  model_en2ru = AutoModelForSeq2SeqLM.from_pretrained("Helsinki-NLP/opus-mt-en-ru")
23
 
24
+ # Load the speech recognition model
25
+ transcriber = pipeline("automatic-speech-recognition", model="openai/whisper-base.en")
26
+
27
 
28
+ # Functions for translation
29
  def translate_ru2en(text):
30
  inputs = tokenizer_ru2en(text, return_tensors="pt")
31
  outputs = model_ru2en.generate(**inputs)
 
40
  return translated_text
41
 
42
 
43
+ # Function to generate answers
44
  def generate_answer_git(image, question):
 
45
  with torch.no_grad():
46
  encoding = processor(
47
  images=image,
 
73
  return answer_ru
74
 
75
 
76
+ def transcribe(stream, new_chunk):
77
+ sr, y = new_chunk
78
+
79
+ # Convert to mono if stereo
80
+ if y.ndim > 1:
81
+ y = y.mean(axis=1)
82
+
83
+ y = y.astype(np.float32)
84
+ y /= np.max(np.abs(y))
85
+
86
+ if stream is not None:
87
+ stream = np.concatenate([stream, y])
88
+ else:
89
+ stream = y
90
+ return stream, transcriber({"sampling_rate": sr, "raw": stream})["text"]
91
+
92
 
93
+ # Gradio Interface
94
  interface = gr.Interface(
95
  fn=generate_answer,
96
  inputs=[
97
  gr.Image(type="pil"),
98
  gr.Textbox(label="Вопрос (на русском)", placeholder="Ваш вопрос"),
99
+ gr.Audio(source="microphone", streaming=True, label="Голосовой ввод"),
100
  ],
101
  outputs=gr.Textbox(label="Ответ (на русском)"),
102
+ examples=[["doc.png", "О чем данный документ?"]],
103
  title="Демо визуального ответчика на вопросы (на русском)",
104
  description=(
105
  "Gradio демо для модели doc-qa с переводом вопросов и ответов"
106
  "на русский язык. Загрузите изображение и задайте вопрос, чтобы"
107
  "получить ответ. Вы также можете использовать голосовой ввод!"
108
  ),
109
+ live=True,
110
  )
111
 
112
  interface.launch(debug=True, share=True)