Spaces:
Runtime error
Runtime error
Alexander Seifert
commited on
Commit
·
8fc7f5c
1
Parent(s):
8753f92
add app
Browse files- app.py +76 -0
- 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
|