alonsosilva commited on
Commit
03485f2
·
1 Parent(s): 6d38cdf
Files changed (1) hide show
  1. app.py +37 -24
app.py CHANGED
@@ -4,11 +4,14 @@ import numpy as np
4
  from ipywebrtc import AudioRecorder, CameraStream, AudioStream
5
  from tempfile import NamedTemporaryFile
6
  from pywhispercpp.model import Model
 
7
 
8
- whisper_models = ['tiny.en-q8_0', "base.en-q5_1", "small.en-q5_1"]
9
  whisper_model = solara.reactive("tiny.en-q8_0")
 
10
  transcription = solara.reactive("")
11
  generation_time = solara.reactive("")
 
12
  @solara.component
13
  def Page():
14
  with solara.Sidebar():
@@ -19,29 +22,39 @@ def Page():
19
  solara.Markdown(f"#{title}")
20
  solara.Markdown("## Send a voice message")
21
  solara.Markdown("### Recorder")
22
- w = Model(whisper_model.value)
 
 
 
 
 
 
 
 
 
 
 
23
  camera = CameraStream(constraints={'audio': True,'video':False})
24
  recorder = AudioRecorder(stream=camera)
 
25
  display(recorder)
26
- def MyButton():
27
- def transcribe_voice():
28
- transcription.value = ""
29
- generation_time.value = ""
30
- with NamedTemporaryFile(suffix=".webm") as temp:
31
- with open(f"{temp.name}", 'wb') as f:
32
- f.write(recorder.audio.value)
33
- start_time = time.time()
34
- segments = w.transcribe(f"{temp.name}")
35
- for segment in segments:
36
- transcription.value += segment.text
37
- end_time = time.time()
38
- generation_time.value = np.round(end_time - start_time, 2)
39
- transcription.value += " "
40
- with solara.Row():
41
- solara.Button("Send voice message", on_click=transcribe_voice)
42
- solara.Select(label="Select model:", value=whisper_model, values=whisper_models, style="width: 10%")
43
- MyButton()
44
- solara.Markdown(f"### Transcription:")
45
- solara.Text(f"{transcription.value}", style="color: blue; font-size: 1.5rem")
46
- if generation_time.value != "":
47
- solara.Text(f"Generation time: {generation_time.value} seconds", style="color: blue; position: fixed; bottom: 8rem")
 
4
  from ipywebrtc import AudioRecorder, CameraStream, AudioStream
5
  from tempfile import NamedTemporaryFile
6
  from pywhispercpp.model import Model
7
+ from solara.lab import use_task, Task
8
 
9
+ whisper_models = ["tiny.en-q5_1", "tiny.en-q8_0","tiny.en", "base.en-q5_1", "base.en", "small.en-q5_1", "small.en"]
10
  whisper_model = solara.reactive("tiny.en-q8_0")
11
+ current_whisper_model = solara.reactive("tiny.en-q8_0")
12
  transcription = solara.reactive("")
13
  generation_time = solara.reactive("")
14
+ w = Model('tiny.en-q8_0')
15
  @solara.component
16
  def Page():
17
  with solara.Sidebar():
 
22
  solara.Markdown(f"#{title}")
23
  solara.Markdown("## Send a voice message")
24
  solara.Markdown("### Recorder")
25
+ with solara.Row():
26
+ def load_model():
27
+ w = Model(whisper_model.value)
28
+ current_whisper_model.value = whisper_model.value
29
+ return 1
30
+ solara.Select(label="Select model:", value=whisper_model, values=whisper_models, style="width: 10%")
31
+ #solara.Button("Load model", on_click=load_model)
32
+ result : Task[int] = use_task(load_model, dependencies=[whisper_model.value])
33
+ if result.finished:
34
+ solara.Success(f"Current model: {current_whisper_model.value}")
35
+ else:
36
+ solara.ProgressLinear(result.pending)
37
  camera = CameraStream(constraints={'audio': True,'video':False})
38
  recorder = AudioRecorder(stream=camera)
39
+ recorder.playing = False
40
  display(recorder)
41
+ def transcribe_voice():
42
+ transcription.value = ""
43
+ generation_time.value = ""
44
+ with NamedTemporaryFile(suffix=".webm") as temp:
45
+ with open(f"{temp.name}", 'wb') as f:
46
+ f.write(recorder.audio.value)
47
+ start_time = time.time()
48
+ segments = w.transcribe(f"{temp.name}")
49
+ for segment in segments:
50
+ transcription.value += segment.text
51
+ end_time = time.time()
52
+ generation_time.value = np.round(end_time - start_time, 2)
53
+ transcription.value += " "
54
+ with solara.Row():
55
+ solara.Button("Send voice message", on_click=transcribe_voice)
56
+ with solara.Column(style="padding: 50px"):
57
+ solara.Markdown(f"### Transcription:")
58
+ solara.Text(f"{transcription.value}", style="color: blue; font-size: 1.5rem")
59
+ if generation_time.value != "":
60
+ solara.Text(f"Generation time: {generation_time.value} seconds", style="color: blue; position: fixed; bottom: 8rem")