Spaces:
Sleeping
Sleeping
import time | |
import solara | |
import numpy as np | |
from ipywebrtc import AudioRecorder, CameraStream, AudioStream | |
from tempfile import NamedTemporaryFile | |
from pywhispercpp.model import Model | |
from solara.lab import use_task, Task | |
whisper_models = ["tiny.en-q5_1", "tiny.en-q8_0","tiny.en", "base.en-q5_1", "base.en", "small.en-q5_1", "small.en"] | |
whisper_model = solara.reactive("tiny.en-q8_0") | |
current_whisper_model = solara.reactive("tiny.en-q8_0") | |
transcription = solara.reactive("") | |
generation_time = solara.reactive("") | |
w = Model('tiny.en-q8_0') | |
def Page(): | |
with solara.Sidebar(): | |
title = "Whisper STT" | |
with solara.Head(): | |
solara.Title(f"{title}") | |
with solara.Column(style={"width": "100%", "padding": "50px"}): | |
solara.Markdown(f"#{title}") | |
solara.Markdown("## Send a voice message") | |
solara.Markdown("### Recorder") | |
with solara.Row(): | |
def load_model(): | |
w = Model(whisper_model.value) | |
current_whisper_model.value = whisper_model.value | |
return 1 | |
solara.Select(label="Select model:", value=whisper_model, values=whisper_models, style="width: 10%") | |
#solara.Button("Load model", on_click=load_model) | |
result : Task[int] = use_task(load_model, dependencies=[whisper_model.value]) | |
if result.finished: | |
solara.Success(f"Current model: {current_whisper_model.value}") | |
else: | |
solara.ProgressLinear(result.pending) | |
camera = CameraStream(constraints={'audio': True,'video':False}) | |
recorder = AudioRecorder(stream=camera) | |
recorder.playing = False | |
display(recorder) | |
def transcribe_voice(): | |
transcription.value = "" | |
generation_time.value = "" | |
with NamedTemporaryFile(suffix=".webm") as temp: | |
with open(f"{temp.name}", 'wb') as f: | |
f.write(recorder.audio.value) | |
start_time = time.time() | |
segments = w.transcribe(f"{temp.name}") | |
for segment in segments: | |
transcription.value += segment.text | |
end_time = time.time() | |
generation_time.value = np.round(end_time - start_time, 2) | |
transcription.value += " " | |
with solara.Row(): | |
solara.Button("Send voice message", on_click=transcribe_voice) | |
with solara.Column(style="padding: 50px"): | |
solara.Markdown(f"### Transcription:") | |
solara.Text(f"{transcription.value}", style="color: blue; font-size: 1.5rem") | |
if generation_time.value != "": | |
solara.Text(f"Generation time: {generation_time.value} seconds", style="color: blue; position: fixed; bottom: 8rem") | |