dubai / modules /register.py
fountai's picture
mimic
1fe2f2f
from models.whisper import model
import modules.audio as audio
import os
from modules.r2 import upload_to_s3,get_url
import json
import os
import redis
redis_host = os.getenv('REDIS_HOST', 'localhost')
redis_pass = os.getenv('REDIS_PASS', 'localhost')
redis_port = os.getenv('REDIS_PORT', 6379)
cache = redis.Redis(host=redis_host, port=redis_port, password=redis_pass)
isOnline = os.environ.get("IS_ONLINE")
isOnline = "True" if isOnline == "True" else "False"
def prepare_audio(audio_path, key):
"""Prepara o áudio"""
audio_duration = audio.get_audio_duration(audio_path)
audio_duration = round(audio_duration, 2)
cuted = False
if audio_duration > 15:
audio_path = audio.cut_audio(audio_path, start_time="0", end_time="12", output_path=f"{key}_cut.wav")
cuted = True
if audio_duration < 8:
raise ValueError("audio_too_short")
audio_path = audio.add_silence_to_audio(audio_path, start_silence=0.5, end_silence=0.8, output_path=f"{key}.wav")
if cuted:
os.remove(f"{key}_cut.wav")
return audio_path
def get_audio_transcription(key):
"""Obtém a transcrição do áudio usando o Redis"""
if(isOnline == "True"):
data = cache.get(f"mimic:audio:translation:{key}")
return data
with open(f"{key}.txt", "r") as f:
transcription = f.read()
return transcription
def get_audio_path(key):
"""Obtém o caminho do áudio usando o Redis"""
if(isOnline == "True"):
data = cache.get(f"mimic:audio:url:{key}")
if(data):
return data
new_url = get_url(f"{key}.wav")
cache.set(f"mimic:audio:url:{key}", new_url)
cache.expire(f"mimic:audio:url:{key}", 600000)
return new_url
return f"{key}.wav"
def get_audio(key):
"""Obtém o áudio usando o Redis"""
transcription = get_audio_transcription(key)
audio_path = get_audio_path(key)
return {
"transcription": transcription,
"audio_path": audio_path,
"isOnline": isOnline
}
def process_audio(audio_path, key):
"""Processa o áudio usando o Whisper"""
if(isOnline == "True"):
audio_exists = cache.exists(f"mimic:audio_exists:{key}")
if audio_exists:
return get_audio(key)
audio_path = prepare_audio(audio_path, key)
transcription, info = model.transcribe(audio_path, beam_size=5)
content = ""
for segment in transcription:
content = f"{content} {segment.text}"
url = upload_to_s3(audio_path, f"{key}.wav", "wav")
cache.set(f"mimic:audio:translation:{key}", content)
cache.set(f"mimic:audio:url:{key}", url)
cache.expire(f"mimic:audio:url:{key}", 600000)
cache.set(f"mimic:audio_exists:{key}", "true")
return {"transcription": content, "audio_path": url, "isOnline": isOnline}
audio_exists = os.path.exists(f"{key}.txt")
if audio_exists:
return get_audio(key)
if os.path.exists(f"{key}.wav"):
os.remove(f"{key}.wav")
audio_path = prepare_audio(audio_path, key)
transcription, info = model.transcribe(audio_path, beam_size=5)
content = ""
for segment in transcription:
content = f"{content} {segment.text}"
with open(f"{key}.txt", "w") as f:
f.write(content)
return {"transcription": content, "audio_path": audio_path, "isOnline": isOnline}