Alexander Seifert commited on
Commit
8fc7f5c
1 Parent(s): 8753f92
Files changed (2) hide show
  1. app.py +76 -0
  2. requirements.txt +3 -0
app.py ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import base64
2
+ import os
3
+ import time
4
+
5
+ import banana_dev as banana
6
+ import gradio as gr
7
+ from loguru import logger
8
+
9
+ api_key = os.environ["BANANA_API_KEY"]
10
+ model_key = os.environ["BANANA_MODEL_KEY"]
11
+ password = os.environ["PASSWORD"]
12
+
13
+
14
+ def transcribe(email: str, file=None, url=None):
15
+ if file:
16
+ with open(file, "rb") as f:
17
+ audio = f.read()
18
+ audio_b64 = base64.b64encode(audio).decode("ISO-8859-1")
19
+ payload = {"audio_b64": audio_b64}
20
+ else:
21
+ payload = {"url": url}
22
+ payload["email"] = email
23
+ response = banana.run(api_key, model_key, payload)
24
+ print(response)
25
+
26
+ if "error" in response:
27
+ raise gr.Error(response["error"])
28
+
29
+ # TODO: not sure why response dict contains multiple model outputs
30
+ return response["modelOutputs"][0]
31
+
32
+
33
+ def run_demo(email, password, microphone, file_upload):
34
+ if password != os.environ["PASSWORD"]:
35
+ raise gr.Error("Das Kennwort ist falsch.")
36
+
37
+ if (microphone is not None) and (file_upload is not None):
38
+ logger.warning(
39
+ "Achtung: Sie haben sowohl eine Datei hochgeladen als auch über das Mikrofon aufgenommen."
40
+ " Wir verwenden nur die Datei, die Sie hochgeladen haben."
41
+ )
42
+
43
+ elif (microphone is None) and (file_upload is None):
44
+ raise gr.Error(
45
+ "Sie müssen entweder eine Datei hochladen oder über das Mikrofon aufnehmen."
46
+ )
47
+
48
+ file = microphone if microphone is not None else file_upload
49
+
50
+ start = time.time()
51
+ transcription = transcribe(email, file)
52
+ logger.info(f"transcription took {time.time()-start:.3f}s")
53
+ return "\n\n".join([seg["text"].strip() for seg in transcription["segments"]])
54
+
55
+
56
+ demo = gr.Interface(
57
+ fn=run_demo,
58
+ inputs=[
59
+ gr.Textbox(label="Email", type="email"),
60
+ gr.Textbox(label="Zugriffs-Kennwort (siehe oben)"),
61
+ gr.Audio(source="microphone", type="filepath", label="Aufnehmen"),
62
+ gr.Audio(source="upload", type="filepath", label="Datei hochladen"),
63
+ ],
64
+ outputs=gr.Textbox(label="Transkription"),
65
+ title="Transkriptionsservice",
66
+ description="<p>Die untenstehende, automatische Transkription wurde von uns für interne Zwecke entwickelt."
67
+ " Sie liefert die bei weitem beste Transkriptionsqualität bei Aufnahmen nicht-fachspezifischer Gespräche.</p>"
68
+ "<p><strong>Bitte geben Sie Ihre Email-Adresse an, damit wir Ihnen die fertige Transkription per Email zusenden können.</strong>"
69
+ " Wir werden Ihre Email-Adresse nicht für andere Zwecke verwenden.</p>"
70
+ "",
71
+ article="",
72
+ allow_flagging="never",
73
+ css="footer {visibility: hidden}",
74
+ )
75
+
76
+ demo.launch(share=True)
requirements.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ banana-dev
2
+ gradio
3
+ loguru