risqaliyevds commited on
Commit
858fdec
1 Parent(s): dd8ec60

Application files

Browse files
.env ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ LANGUAGE="uz-UZ"
2
+ SUMMARIZER_MODEL="csebuetnlp/mT5_multilingual_XLSum"
3
+ URL="https://studio.mohir.ai/api/v1/stt"
4
+ API="117a9da1-a2e6-42a8-8e58-408dc3919698:204cd977-922f-41e0-8b7a-203b0ca1c479"
.idea/.gitignore ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ # Default ignored files
2
+ /shelf/
3
+ /workspace.xml
.idea/STT-project.iml ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <module type="PYTHON_MODULE" version="4">
3
+ <component name="NewModuleRootManager">
4
+ <content url="file://$MODULE_DIR$" />
5
+ <orderEntry type="inheritedJdk" />
6
+ <orderEntry type="sourceFolder" forTests="false" />
7
+ </component>
8
+ </module>
.idea/inspectionProfiles/Project_Default.xml ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <component name="InspectionProjectProfileManager">
2
+ <profile version="1.0">
3
+ <option name="myName" value="Project Default" />
4
+ <inspection_tool class="PyPackageRequirementsInspection" enabled="true" level="WARNING" enabled_by_default="true">
5
+ <option name="ignoredPackages">
6
+ <value>
7
+ <list size="46">
8
+ <item index="0" class="java.lang.String" itemvalue="scikit-image" />
9
+ <item index="1" class="java.lang.String" itemvalue="scipy" />
10
+ <item index="2" class="java.lang.String" itemvalue="filterpy" />
11
+ <item index="3" class="java.lang.String" itemvalue="opencv-python" />
12
+ <item index="4" class="java.lang.String" itemvalue="PyYAML" />
13
+ <item index="5" class="java.lang.String" itemvalue="torch" />
14
+ <item index="6" class="java.lang.String" itemvalue="requests" />
15
+ <item index="7" class="java.lang.String" itemvalue="torchvision" />
16
+ <item index="8" class="java.lang.String" itemvalue="ultralytics" />
17
+ <item index="9" class="java.lang.String" itemvalue="tqdm" />
18
+ <item index="10" class="java.lang.String" itemvalue="hydra-core" />
19
+ <item index="11" class="java.lang.String" itemvalue="matplotlib" />
20
+ <item index="12" class="java.lang.String" itemvalue="lap" />
21
+ <item index="13" class="java.lang.String" itemvalue="Pillow" />
22
+ <item index="14" class="java.lang.String" itemvalue="networkx" />
23
+ <item index="15" class="java.lang.String" itemvalue="async-timeout" />
24
+ <item index="16" class="java.lang.String" itemvalue="Babel" />
25
+ <item index="17" class="java.lang.String" itemvalue="huggingface-hub" />
26
+ <item index="18" class="java.lang.String" itemvalue="psycopg2" />
27
+ <item index="19" class="java.lang.String" itemvalue="MarkupSafe" />
28
+ <item index="20" class="java.lang.String" itemvalue="numpy" />
29
+ <item index="21" class="java.lang.String" itemvalue="Jinja2" />
30
+ <item index="22" class="java.lang.String" itemvalue="frozenlist" />
31
+ <item index="23" class="java.lang.String" itemvalue="fsspec" />
32
+ <item index="24" class="java.lang.String" itemvalue="filelock" />
33
+ <item index="25" class="java.lang.String" itemvalue="certifi" />
34
+ <item index="26" class="java.lang.String" itemvalue="urllib3" />
35
+ <item index="27" class="java.lang.String" itemvalue="langid" />
36
+ <item index="28" class="java.lang.String" itemvalue="sympy" />
37
+ <item index="29" class="java.lang.String" itemvalue="tokenizers" />
38
+ <item index="30" class="java.lang.String" itemvalue="transformers" />
39
+ <item index="31" class="java.lang.String" itemvalue="magic-filter" />
40
+ <item index="32" class="java.lang.String" itemvalue="aiogram" />
41
+ <item index="33" class="java.lang.String" itemvalue="packaging" />
42
+ <item index="34" class="java.lang.String" itemvalue="attrs" />
43
+ <item index="35" class="java.lang.String" itemvalue="regex" />
44
+ <item index="36" class="java.lang.String" itemvalue="colorama" />
45
+ <item index="37" class="java.lang.String" itemvalue="mpmath" />
46
+ <item index="38" class="java.lang.String" itemvalue="typing_extensions" />
47
+ <item index="39" class="java.lang.String" itemvalue="charset-normalizer" />
48
+ <item index="40" class="java.lang.String" itemvalue="aiohttp" />
49
+ <item index="41" class="java.lang.String" itemvalue="multidict" />
50
+ <item index="42" class="java.lang.String" itemvalue="yarl" />
51
+ <item index="43" class="java.lang.String" itemvalue="pytz" />
52
+ <item index="44" class="java.lang.String" itemvalue="aiosignal" />
53
+ <item index="45" class="java.lang.String" itemvalue="idna" />
54
+ </list>
55
+ </value>
56
+ </option>
57
+ </inspection_tool>
58
+ <inspection_tool class="PyPep8NamingInspection" enabled="true" level="WEAK WARNING" enabled_by_default="true">
59
+ <option name="ignoredErrors">
60
+ <list>
61
+ <option value="N801" />
62
+ <option value="N802" />
63
+ <option value="N806" />
64
+ </list>
65
+ </option>
66
+ </inspection_tool>
67
+ <inspection_tool class="PyUnresolvedReferencesInspection" enabled="true" level="WARNING" enabled_by_default="true">
68
+ <option name="ignoredIdentifiers">
69
+ <list>
70
+ <option value="int.id" />
71
+ <option value="datetime.time.__sub__" />
72
+ </list>
73
+ </option>
74
+ </inspection_tool>
75
+ </profile>
76
+ </component>
.idea/inspectionProfiles/profiles_settings.xml ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ <component name="InspectionProjectProfileManager">
2
+ <settings>
3
+ <option name="USE_PROJECT_PROFILE" value="false" />
4
+ <version value="1.0" />
5
+ </settings>
6
+ </component>
.idea/modules.xml ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="ProjectModuleManager">
4
+ <modules>
5
+ <module fileurl="file://$PROJECT_DIR$/.idea/STT-project.iml" filepath="$PROJECT_DIR$/.idea/STT-project.iml" />
6
+ </modules>
7
+ </component>
8
+ </project>
.idea/vcs.xml ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="VcsDirectoryMappings">
4
+ <mapping directory="" vcs="Git" />
5
+ </component>
6
+ </project>
app.py ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ from gradio.components import Audio
3
+ from model import STT_with_Summary
4
+
5
+ output_1 = gr.Textbox(label="STT:")
6
+ output_2 = gr.Textbox(label="Suhbatning qisqacha mazmuni:")
7
+
8
+ app = gr.Interface(
9
+ title="Audio xabar va uning qisqacha mazmuni.",
10
+ fn=STT_with_Summary,
11
+ inputs=[Audio(source="upload", type="filepath")],
12
+ outputs=[output_1, output_2],
13
+ live=False
14
+ )
15
+
16
+ app.launch(share=False)
17
+
model.py ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import subprocess
2
+
3
+ import speech_recognition as sr
4
+ from transformers import Wav2Vec2FeatureExtractor, Wav2Vec2ForCTC, AutoModelForCTC
5
+ from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
6
+ from utils import WHITESPACE_HANDLER
7
+ from transformers import pipeline
8
+ from settings import settings
9
+ from transformers import AutoProcessor, AutoModelForCTC
10
+ import torchaudio
11
+ import requests
12
+
13
+
14
+ async def create_wav(audio_file):
15
+ wav_audio_path = audio_file.replace(audio_file.split(".")[-1], '.wav')
16
+ subprocess.run(['ffmpeg', '-i', audio_file, wav_audio_path])
17
+ return wav_audio_path
18
+
19
+
20
+ async def speech2text(audio_file):
21
+ if not audio_file.endswith(".wav"):
22
+ audio_file = await create_wav()
23
+
24
+ # recognizer = sr.Recognizer()
25
+ # with sr.AudioFile(audio_file) as audio_file:
26
+ # audio = recognizer.record(audio_file)
27
+ # aligned_transcript = recognizer.recognize_google(audio, language=settings.LANGUAGE)
28
+
29
+ url = settings.URL
30
+ headers = {'Authorization': settings.API}
31
+ files = {'file': (audio_file, open(audio_file, 'rb'))}
32
+ response = requests.post(url, headers=headers, files=files)
33
+ aligned_transcript = response.json()['result']["text"]
34
+
35
+ return aligned_transcript
36
+
37
+ async def summerizer(aligned_transcript):
38
+ model_name = settings.SUMMARIZER_MODEL
39
+ tokenizer = AutoTokenizer.from_pretrained(model_name, use_fast=False)
40
+ model = AutoModelForSeq2SeqLM.from_pretrained(model_name)
41
+
42
+ input_ids = tokenizer(
43
+ [WHITESPACE_HANDLER(aligned_transcript)],
44
+ return_tensors="pt",
45
+ padding="max_length",
46
+ truncation=True,
47
+ max_length=512)["input_ids"]
48
+ output_ids = model.generate(
49
+ input_ids=input_ids,
50
+ max_length=84,
51
+ no_repeat_ngram_size=2,
52
+ num_beams=4
53
+ )[0]
54
+ summary = tokenizer.decode(
55
+ output_ids,
56
+ skip_special_tokens=True,
57
+ clean_up_tokenization_spaces=False
58
+ )
59
+ return summary
60
+
61
+
62
+ async def STT_with_Summary(audio_file):
63
+ aligned_transcript = await speech2text(audio_file)
64
+ summary = await summerizer(aligned_transcript)
65
+ return aligned_transcript, summary
requirements.txt ADDED
Binary file (3.45 kB). View file
 
settings.py ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from pydantic import BaseSettings
2
+
3
+ class Settings(BaseSettings):
4
+ LANGUAGE: str
5
+ SUMMARIZER_MODEL: str
6
+ URL: str
7
+ API: str
8
+
9
+ class Config:
10
+ env_file = ".env"
11
+
12
+
13
+ settings = Settings()
utils.py ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ import re
2
+
3
+ WHITESPACE_HANDLER = lambda k: re.sub('\s+', ' ', re.sub('\n+', ' ', k.strip()))