Przejdź do nawigacji

Strumieniowanie po stronie serwera

Ten przewodnik pokazuje, jak transkrybować audio w czasie rzeczywistym po stronie serwera za pomocą ElevenLabs.

Przewodnik · Zakłada, że masz już za sobą krótki przewodnik po Speech to Text.

Omówienie

ElevenLabs Realtime Speech to Text API pozwala transkrybować strumienie audio w czasie rzeczywistym z bardzo niskim opóźnieniem, używając modelu Scribe Realtime v2. Niezależnie od tego, czy tworzysz asystentów głosowych, usługi transkrypcji czy aplikację wymagającą rozpoznawania mowy na żywo, to oparte na WebSocket API dostarcza częściowe transkrypcje podczas mówienia i zatwierdzone transkrypcje po zakończeniu segmentów mowy.

Scribe v3 Live można wdrożyć po stronie serwera, aby transkrybować audio w czasie rzeczywistym z adresu URL, pliku lub własnego strumienia audio.

Implementacja po stronie serwera różni się od implementacji po stronie klienta pod kilkoma względami:

  • Używa klucza API ElevenLabs zamiast tokenu jednorazowego.
  • Obsługuje strumieniowanie bezpośrednio z adresu URL, bez ręcznego dzielenia audio na fragmenty.

Aby strumieniować audio bezpośrednio z mikrofonu, zobacz przewodnik Strumieniowanie po stronie klienta.

Szybki start

Ten przewodnik zakłada, że skonfigurowano już klucz API i SDK. Jeśli jeszcze tego nie zrobiono, najpierw ukończ szybki start.

1

Skonfiguruj SDK

SDK oferuje dwa sposoby transkrypcji audio w czasie rzeczywistym: strumieniowanie z adresu URL albo ręczne dzielenie audio na fragmenty z pliku lub własnego strumienia audio.

Pełną listę obsługiwanych przez API parametrów i opcji znajdziesz w dokumentacji API.

Ten przykład pokazuje, jak strumieniować plik audio z adresu URL za pomocą oficjalnego SDK.

Narzędzie ffmpeg jest wymagane podczas strumieniowania z adresu URL. Instrukcje instalacji znajdziesz na jego stronie.

Utwórz nowy plik o nazwie example.py lub example.mts, zależnie od wybranego języka, i dodaj poniższy kod:

from dotenv import load_dotenv
import os
import asyncio
from elevenlabs import ElevenLabs, RealtimeEvents, RealtimeUrlOptions
load_dotenv()
async def main():
elevenlabs = ElevenLabs(api_key=os.getenv("ELEVENLABS_API_KEY"))
# Create an event to signal when to stop
stop_event = asyncio.Event()
# Connect to a streaming audio URL
connection = await elevenlabs.speech_to_text.realtime.connect(RealtimeUrlOptions(
model_id="scribe_v3_live",
url="https://npr-ice.streamguys1.com/live.mp3",
include_timestamps=True,
))
# Set up event handlers
def on_session_started(data):
print(f"Session started: {data}")
def on_partial_transcript(data):
print(f"Partial: {data.get('text', '')}")
def on_committed_transcript(data):
print(f"Committed: {data.get('text', '')}")
# Committed transcripts with word-level timestamps. Only received when include_timestamps is set to True.
def on_committed_transcript_with_timestamps(data):
print(f"Committed with timestamps: {data.get('words', '')}")
# Errors - will catch all errors, both server and websocket specific errors
def on_error(error):
print(f"Error: {error}")
# Signal to stop on error
stop_event.set()
def on_close():
print("Connection closed")
# Register event handlers
connection.on(RealtimeEvents.SESSION_STARTED, on_session_started)
connection.on(RealtimeEvents.PARTIAL_TRANSCRIPT, on_partial_transcript)
connection.on(RealtimeEvents.COMMITTED_TRANSCRIPT, on_committed_transcript)
connection.on(RealtimeEvents.COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS, on_committed_transcript_with_timestamps)
connection.on(RealtimeEvents.ERROR, on_error)
connection.on(RealtimeEvents.CLOSE, on_close)
print("Transcribing audio stream... (Press Ctrl+C to stop)")
try:
# Wait until error occurs or connection closes
await stop_event.wait()
except KeyboardInterrupt:
print("\nStopping transcription...")
finally:
await connection.close()
if __name__ == "__main__":
asyncio.run(main())
2

Uruchom kod

python example.py

W konsoli zobaczysz częściowe i zatwierdzone transkrypcje pliku audio.

Kolejne kroki