Spaces:
Sleeping
Sleeping
Commit
·
858fdec
1
Parent(s):
dd8ec60
Application files
Browse files- .env +4 -0
- .idea/.gitignore +3 -0
- .idea/STT-project.iml +8 -0
- .idea/inspectionProfiles/Project_Default.xml +76 -0
- .idea/inspectionProfiles/profiles_settings.xml +6 -0
- .idea/modules.xml +8 -0
- .idea/vcs.xml +6 -0
- app.py +17 -0
- model.py +65 -0
- requirements.txt +0 -0
- settings.py +13 -0
- utils.py +3 -0
.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()))
|