DrishtiSharma commited on
Commit
68a08f2
1 Parent(s): 3bcffb5

Upload app.py

Browse files
Files changed (1) hide show
  1. app.py +85 -0
app.py ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from io import BytesIO
2
+ from typing import Tuple
3
+ import wave
4
+ import gradio as gr
5
+ import numpy as np
6
+ from pydub.audio_segment import AudioSegment
7
+ import requests
8
+ from os.path import exists
9
+ from stt import Model
10
+
11
+
12
+ # download model
13
+ storage_url = "https://coqui.gateway.scarf.sh/mixtec/jemeyer/v1.0.0"
14
+ model_name = "model.tflite"
15
+ model_link = f"{storage_url}/{model_name}"
16
+
17
+
18
+ def client(audio_data: np.array, sample_rate: int, use_scorer=False):
19
+ output_audio = _convert_audio(audio_data, sample_rate)
20
+
21
+ fin = wave.open(output_audio, 'rb')
22
+ audio = np.frombuffer(fin.readframes(fin.getnframes()), np.int16)
23
+
24
+ fin.close()
25
+
26
+ ds = Model(model_name)
27
+ if use_scorer:
28
+ ds.enableExternalScorer("kenlm.scorer")
29
+
30
+ result = ds.stt(audio)
31
+
32
+ return result
33
+
34
+
35
+ def download(url, file_name):
36
+ if not exists(file_name):
37
+ print(f"Downloading {file_name}")
38
+ r = requests.get(url, allow_redirects=True)
39
+ with open(file_name, 'wb') as file:
40
+ file.write(r.content)
41
+ else:
42
+ print(f"Found {file_name}. Skipping download...")
43
+
44
+
45
+ def stt(audio: Tuple[int, np.array]):
46
+ sample_rate, audio = audio
47
+ use_scorer = False
48
+
49
+ recognized_result = client(audio, sample_rate, use_scorer)
50
+
51
+ return recognized_result
52
+
53
+
54
+ def _convert_audio(audio_data: np.array, sample_rate: int):
55
+ source_audio = BytesIO()
56
+ source_audio.write(audio_data)
57
+ source_audio.seek(0)
58
+ output_audio = BytesIO()
59
+ wav_file = AudioSegment.from_raw(
60
+ source_audio,
61
+ channels=1,
62
+ sample_width=2,
63
+ frame_rate=sample_rate
64
+ )
65
+ wav_file.set_frame_rate(16000).set_channels(
66
+ 1).export(output_audio, "wav", codec="pcm_s16le")
67
+ output_audio.seek(0)
68
+ return output_audio
69
+
70
+
71
+ iface = gr.Interface(
72
+ fn=stt,
73
+ inputs=[
74
+ gr.inputs.Audio(type="numpy",
75
+ label=None, optional=False),
76
+ ],
77
+ outputs=gr.outputs.Textbox(label="Output"),
78
+ title="Coqui STT Yoloxochitl Mixtec",
79
+ theme="huggingface",
80
+ description="Prueba de dictado a texto para el mixteco de Yoloxochitl, usando [el modelo entrenado por Josh Meyer](https://coqui.ai/mixtec/jemeyer/v1.0.0/) con [los datos recopilados por Rey Castillo y sus colaboradoes](https://www.openslr.org/89). Esta prueba es basada en la de [Ukraniano](https://huggingface.co/spaces/robinhad/ukrainian-stt). \n\n"
81
+ "Speech-to-text demo for Yoloxochitl Mixtec, using [the model trained by Josh Meyer](https://coqui.ai/mixtec/jemeyer/v1.0.0/) on [the corpus compiled by Rey Castillo and collaborators](https://www.openslr.org/89). This demo is based on the [Ukrainian STT demo](https://huggingface.co/spaces/robinhad/ukrainian-stt).",
82
+ )
83
+
84
+ download(model_link, model_name)
85
+ iface.launch()