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()))
|