Package: amazon-transcribe
Amazon Transcribe Streaming SDKThe Amazon Transcribe Streaming SDK allows users to directly interface with
the Amazon Transcribe Streaming service and their Python programs. The goal of
the project is to enable users to integrate directly with Amazon Transcribe
without needing anything more than a stream of audio bytes and a basic handler.This project is still in early alpha so the interface is still subject to change
and may see rapid iteration. It's highly advised to pin to strict dependencies
if using this outside of local testing. Please note awscrt is a dependency shared
with botocore (the core module of AWS CLI and boto3). You may need to keep
amazon-transcribe at the latest version when installed in the same environment.InstallationTo install from pip:python-mpipinstallamazon-transcribeTo install from Github:gitclonehttps://github.com/awslabs/amazon-transcribe-streaming-sdk.gitcdamazon-transcribe-streaming-sdk
python-mpipinstall.To use from your Python application, addamazon-transcribeas a dependency in yourrequirements.txtfile.NOTE: This SDK is built on top of theAWS Common Runtime (CRT), a collection of
C libraries we interact with through bindings. The CRT is available on PyPI
(awscrt) as precompiled wheels for common platforms
(Linux, macOS, Windows). Non-standard operating systems may need to compile these
libraries themselves.UsagePrerequisitesIf you don't already have local credentials setup for your AWS account, you can follow
thisguidefor configuring them using the AWS CLI.In essence you'll need one of these authentication configurations setup in order for
the SDK to successfully resolve your API keys:Set theAWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEYand optionally theAWS_SESSION_TOKENenvironment variablesSet theAWS_PROFILEpointing to your AWS profile directoryConfigure the[default]profile in~/.aws/credentialsFor more details on the AWS shared configuration file and credential provider
usage, check the following developer guides:Shared Config OverviewShared Config FormatExample Credential SetupsQuick StartSetup for this SDK will require either live or prerecorded audio. Full details
on the audio input requirements can be found in theAmazon Transcribe Streaming
documentation.Here's an example app to get started:importasyncio# This example uses aiofile for asynchronous file reads.# It's not a dependency of the project but can be installed# with `pip install aiofile`.importaiofilefromamazon_transcribe.clientimportTranscribeStreamingClientfromamazon_transcribe.handlersimportTranscriptResultStreamHandlerfromamazon_transcribe.modelimportTranscriptEventfromamazon_transcribe.utilsimportapply_realtime_delay"""Here's an example of a custom event handler you can extend toprocess the returned transcription results as needed. Thishandler will simply print the text out to your interpreter."""SAMPLE_RATE=16000BYTES_PER_SAMPLE=2CHANNEL_NUMS=1# An example file can be found at tests/integration/assets/test.wavAUDIO_PATH="tests/integration/assets/test.wav"CHUNK_SIZE=1024*8REGION="us-west-2"classMyEventHandler(TranscriptResultStreamHandler):asyncdefhandle_transcript_event(self,transcript_event:TranscriptEvent):# This handler can be implemented to handle transcriptions as needed.# Here's an example to get started.results=transcript_event.transcript.resultsforresultinresults:foraltinresult.alternatives:print(alt.transcript)asyncdefbasic_transcribe():# Setup up our client with our chosen AWS regionclient=TranscribeStreamingClient(region=REGION)# Start transcription to generate our async streamstream=awaitclient.start_stream_transcription(language_code="en-US",media_sample_rate_hz=SAMPLE_RATE,media_encoding="pcm",)asyncdefwrite_chunks():# NOTE: For pre-recorded files longer than 5 minutes, the sent audio# chunks should be rate limited to match the realtime bitrate of the# audio stream to avoid signing issues.asyncwithaiofile.AIOFile(AUDIO_PATH,"rb")asafp:reader=aiofile.Reader(afp,chunk_size=CHUNK_SIZE)awaitapply_realtime_delay(stream,reader,BYTES_PER_SAMPLE,SAMPLE_RATE,CHANNEL_NUMS)awaitstream.input_stream.end_stream()# Instantiate our handler and start processing eventshandler=MyEventHandler(stream.output_stream)awaitasyncio.gather(write_chunks(),handler.handle_events())loop=asyncio.get_event_loop()loop.run_until_complete(basic_transcribe())loop.close()SecuritySeeCONTRIBUTINGfor more information.LicenseThis project is licensed under the Apache-2.0 License.