Reputation: 11
So I wanted to use the Amazon Transcribe Medical model for streaming in Python. Is there any SDK which makes it possible for me to stream this? I looked at boto as well, but it only involves batching not streaming. I was only able to find this but not sure how to use Amazon Transcribe medical in this SDK.
import asyncio import sounddevice from amazon_transcribe.client import TranscribeStreamingClient
from amazon_transcribe.handlers import TranscriptResultStreamHandler from amazon_transcribe.model import TranscriptEvent import boto3 from botocore.credentials import Credentials
class MyEventHandler(TranscriptResultStreamHandler):
async def handle_transcript_event(self, transcript_event: TranscriptEvent):
results = transcript_event.transcript.results
for result in results:
for alt in result.alternatives:
print(alt.transcript)
async def mic_stream():
loop = asyncio.get_event_loop()
input_queue = asyncio.Queue()
def callback(indata, frame_count, time_info, status):
loop.call_soon_threadsafe(input_queue.put_nowait, (bytes(indata), status))
stream = sounddevice.RawInputStream(
channels=1,
samplerate=16000,
callback=callback,
blocksize=1024 * 2,
dtype="int16",
)
with stream:
while True:
indata, status = await input_queue.get()
yield indata, status
async def write_chunks(stream):
async for chunk, status in mic_stream():
await stream.input_stream.send_audio_event(audio_chunk=chunk)
await stream.input_stream.end_stream()
async def basic_transcribe():
region = "us-east-1"
# Initialize the TranscribeStreamingClient with the async credentials provider
client = TranscribeStreamingClient(
region=region
)
# Start the transcription stream
stream = await client.start_stream_transcription(
language_code="en-US",
media_sample_rate_hz=16000,
media_encoding="pcm"
)
handler = MyEventHandler(stream.output_stream)
await asyncio.gather(write_chunks(stream), handler.handle_events())
if __name__ == "__main__":
loop = asyncio.get_event_loop()
loop.run_until_complete(basic_transcribe())
loop.close()
Upvotes: 0
Views: 53