Spaces:
Sleeping
Sleeping
File size: 2,131 Bytes
c71e312 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
import os
import requests
import time
from tempfile import NamedTemporaryFile
ASSEMBLYAI_API_KEY = "550f6809220c48b29da16e609ab5ae44"
UPLOAD_URL = "https://api.assemblyai.com/v2/upload"
TRANSCRIBE_URL = "https://api.assemblyai.com/v2/transcript"
class TranscriptionService:
def transcribe(self, file_path: str) -> dict:
print(f"[DEBUG] Transcribiendo desde archivo: {file_path}")
if not os.path.exists(file_path):
raise Exception("Archivo no encontrado para transcripci贸n")
if os.path.getsize(file_path) == 0:
raise Exception("El archivo est谩 vac铆o. Verifica que se haya subido correctamente.")
try:
# Paso 1: Subir archivo
with open(file_path, "rb") as f:
upload_res = requests.post(
UPLOAD_URL,
headers={"authorization": ASSEMBLYAI_API_KEY},
data=f
)
upload_res.raise_for_status()
audio_url = upload_res.json()["upload_url"]
# Paso 2: Solicitar transcripci贸n
transcript_res = requests.post(
TRANSCRIBE_URL,
json={"audio_url": audio_url, "language_code": "es"},
headers={"authorization": ASSEMBLYAI_API_KEY}
)
transcript_res.raise_for_status()
transcript_id = transcript_res.json()["id"]
# Paso 3: Polling
while True:
poll_res = requests.get(f"{TRANSCRIBE_URL}/{transcript_id}", headers={"authorization": ASSEMBLYAI_API_KEY})
poll_data = poll_res.json()
if poll_data["status"] == "completed":
return {
"text": poll_data["text"],
"confidence": poll_data.get("confidence", 1.0)
}
elif poll_data["status"] == "error":
raise Exception(f"Error en AssemblyAI: {poll_data['error']}")
time.sleep(3)
except Exception as e:
print(f"[ERROR] Error en transcripci贸n: {e}")
raise
|