better logging
Browse files
App/Transcription/Schemas.py
CHANGED
|
@@ -4,5 +4,13 @@ from passlib.context import CryptContext
|
|
| 4 |
from fastapi import UploadFile
|
| 5 |
|
| 6 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 7 |
class UserDetails(BaseModel):
|
| 8 |
userId: str
|
|
|
|
| 4 |
from fastapi import UploadFile
|
| 5 |
|
| 6 |
|
| 7 |
+
class TranscriptionMetadata(BaseModel):
|
| 8 |
+
duration: int = 0
|
| 9 |
+
language: str = "0"
|
| 10 |
+
logs: str = 0
|
| 11 |
+
percentage: str = "0"
|
| 12 |
+
state: str = "PENDING"
|
| 13 |
+
|
| 14 |
+
|
| 15 |
class UserDetails(BaseModel):
|
| 16 |
userId: str
|
App/Transcription/Utils/audio_transcription.py
CHANGED
|
@@ -1,42 +1,52 @@
|
|
| 1 |
from faster_whisper import WhisperModel
|
| 2 |
from tqdm import tqdm
|
| 3 |
import os
|
|
|
|
| 4 |
|
| 5 |
model_size = "tiny"
|
| 6 |
|
| 7 |
|
| 8 |
def transcribe_file(state, file_path, model_size="tiny"):
|
|
|
|
|
|
|
|
|
|
| 9 |
state.update_state(
|
| 10 |
state="PROGRESS",
|
| 11 |
-
meta=
|
| 12 |
)
|
| 13 |
-
result = {}
|
| 14 |
model = WhisperModel(model_size, device="cpu", compute_type="int8")
|
| 15 |
segments, info = model.transcribe(file_path, beam_size=5)
|
| 16 |
|
| 17 |
total_duration = round(info.duration, 2)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 18 |
state.update_state(
|
| 19 |
state="PROGRESS",
|
| 20 |
-
meta=
|
| 21 |
-
"logs": "Detected language '%s' with probability %f"
|
| 22 |
-
% (info.language, info.language_probability),
|
| 23 |
-
},
|
| 24 |
)
|
| 25 |
|
| 26 |
-
|
| 27 |
-
|
| 28 |
-
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
|
| 34 |
-
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 40 |
|
| 41 |
# delete file
|
| 42 |
os.remove(file_path)
|
|
|
|
| 1 |
from faster_whisper import WhisperModel
|
| 2 |
from tqdm import tqdm
|
| 3 |
import os
|
| 4 |
+
from App.Transcription.Schemas import TranscriptionMetadata
|
| 5 |
|
| 6 |
model_size = "tiny"
|
| 7 |
|
| 8 |
|
| 9 |
def transcribe_file(state, file_path, model_size="tiny"):
|
| 10 |
+
result = {}
|
| 11 |
+
metadata = TranscriptionMetadata()
|
| 12 |
+
metadata.logs = "STARTING"
|
| 13 |
state.update_state(
|
| 14 |
state="PROGRESS",
|
| 15 |
+
meta=metadata.dict(),
|
| 16 |
)
|
|
|
|
| 17 |
model = WhisperModel(model_size, device="cpu", compute_type="int8")
|
| 18 |
segments, info = model.transcribe(file_path, beam_size=5)
|
| 19 |
|
| 20 |
total_duration = round(info.duration, 2)
|
| 21 |
+
metadata.logs = (
|
| 22 |
+
"Detected language '%s' with probability %f"
|
| 23 |
+
% (info.language, info.language_probability),
|
| 24 |
+
)
|
| 25 |
+
metadata.language = info.language
|
| 26 |
+
|
| 27 |
state.update_state(
|
| 28 |
state="PROGRESS",
|
| 29 |
+
meta=metadata.dict(),
|
|
|
|
|
|
|
|
|
|
| 30 |
)
|
| 31 |
|
| 32 |
+
try:
|
| 33 |
+
with tqdm(total=total_duration, unit=" seconds") as pbar:
|
| 34 |
+
for segment in segments:
|
| 35 |
+
segment_duration = segment.end - segment.start
|
| 36 |
+
time_stamp = "[%.2fs -> %.2fs]" % (segment.start, segment.end)
|
| 37 |
+
result[time_stamp] = segment.text
|
| 38 |
+
metadata.logs = "Transcribing.."
|
| 39 |
+
metadata.percentage = f"{((segment.end / total_duration)*100)}"
|
| 40 |
+
state.update_state(state="PROGRESS", meta=metadata.dict())
|
| 41 |
+
pbar.update(segment_duration)
|
| 42 |
+
except Exception as e:
|
| 43 |
+
metadata.logs = f"Falied error {e}"
|
| 44 |
+
state.update_state(
|
| 45 |
+
state="FAILED",
|
| 46 |
+
meta=metadata.dict(),
|
| 47 |
+
)
|
| 48 |
+
os.remove(file_path)
|
| 49 |
+
return
|
| 50 |
|
| 51 |
# delete file
|
| 52 |
os.remove(file_path)
|