|
import numpy as np |
|
|
|
import librosa |
|
import torch |
|
from .init import pipe |
|
|
|
LIMIT = 90 |
|
TASK = "transcribe" |
|
|
|
class A2T: |
|
def __init__(self, mic): |
|
self.mic = mic |
|
|
|
def __preprocces(self, audio, frame_rate): |
|
try: |
|
print("Audio before : ", audio) |
|
audio = audio / 32678.0 |
|
print("Audio div : ", audio) |
|
|
|
if len(audio.shape) > 1: |
|
audio = librosa.to_mono(audio.T) |
|
|
|
print("Audio mono : ", audio) |
|
|
|
if frame_rate != 16_000: |
|
audio = librosa.resample(audio, orig_sr=frame_rate, target_sr=16000) |
|
|
|
print("Audio resample : ", audio) |
|
|
|
audio = audio[:16_000*LIMIT] |
|
|
|
print("Audio cut : ", audio) |
|
|
|
audio = torch.tensor(audio) |
|
|
|
print("Audio torch : ", audio) |
|
return audio |
|
except Exception as e: |
|
print("Preprocces error", e) |
|
return None |
|
|
|
def __transcribe(self, inputs, task: str = None): |
|
if inputs is None: |
|
print("Inputs None") |
|
|
|
transcribed_text = pipe(inputs, generate_kwargs={"task": task}, return_timestamps=True)["text"] |
|
return transcribed_text |
|
|
|
|
|
def predict(self): |
|
if self.mic is not None: |
|
audio = self.mic |
|
|
|
else: |
|
return "please provide audio" |
|
|
|
try: |
|
|
|
|
|
|
|
|
|
|
|
return self.__transcribe(inputs=audio, task=TASK) |
|
except Exception as e: |
|
print("Predict error", e) |
|
return "Oops some kinda error" |
|
|