Skip to main content

Async Python SDK for Amazon Transcribe Streaming

Project description

Amazon Transcribe Streaming SDK

The 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.

Installation

To install from pip:

python -m pip install amazon-transcribe

To install from Github:

git clone https://github.com/awslabs/amazon-transcribe-streaming-sdk.git
cd amazon-transcribe-streaming-sdk
python -m pip install .

To use from your Python application, add amazon-transcribe as a dependency in your requirements.txt file.

NOTE: This SDK is built on top of the AWS 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.

Usage

Prerequisites

If you don't already have local credentials setup for your AWS account, you can follow this guide for 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:

  1. Set the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and optionally the AWS_SESSION_TOKEN environment variables
  2. Set the AWS_PROFILE pointing to your AWS profile directory
  3. Configure the [default] profile in ~/.aws/credentials

For more details on the AWS shared configuration file and credential provider usage, check the following developer guides:

Quick Start

Setup for this SDK will require either live or prerecorded audio. Full details on the audio input requirements can be found in the Amazon Transcribe Streaming documentation.

Here's an example app to get started:

import asyncio
# This example uses aiofile for asynchronous file reads.
# It's not a dependency of the project but can be installed
# with `pip install aiofile`.
import aiofile

from amazon_transcribe.client import TranscribeStreamingClient
from amazon_transcribe.handlers import TranscriptResultStreamHandler
from amazon_transcribe.model import TranscriptEvent

"""
Here's an example of a custom event handler you can extend to
process the returned transcription results as needed. This
handler will simply print the text out to your interpreter.
"""
class MyEventHandler(TranscriptResultStreamHandler):
    async def handle_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.results
        for result in results:
            for alt in result.alternatives:
                print(alt.transcript)


async def basic_transcribe():
    # Setup up our client with our chosen AWS region
    client = TranscribeStreamingClient(region="us-west-2")

    # Start transcription to generate our async stream
    stream = await client.start_stream_transcription(
        language_code="en-US",
        media_sample_rate_hz=16000,
        media_encoding="pcm",
    )

    async def write_chunks():
        # An example file can be found at tests/integration/assets/test.wav
        # 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.
        async with aiofile.AIOFile('tests/integration/assets/test.wav', 'rb') as afp:
            reader = aiofile.Reader(afp, chunk_size=1024 * 16)
            async for chunk in reader:
                await stream.input_stream.send_audio_event(audio_chunk=chunk)
        await stream.input_stream.end_stream()

    # Instantiate our handler and start processing events
    handler = MyEventHandler(stream.output_stream)
    await asyncio.gather(write_chunks(), handler.handle_events())

loop = asyncio.get_event_loop()
loop.run_until_complete(basic_transcribe())
loop.close()

Security

See CONTRIBUTING for more information.

License

This project is licensed under the Apache-2.0 License.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

amazon-transcribe-0.5.0.tar.gz (29.6 kB view details)

Uploaded Source

Built Distribution

amazon_transcribe-0.5.0-py3-none-any.whl (37.9 kB view details)

Uploaded Python 3

File details

Details for the file amazon-transcribe-0.5.0.tar.gz.

File metadata

  • Download URL: amazon-transcribe-0.5.0.tar.gz
  • Upload date:
  • Size: 29.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.6.3 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.6.6

File hashes

Hashes for amazon-transcribe-0.5.0.tar.gz
Algorithm Hash digest
SHA256 8a867db61fffbd2048d8611e31aa7b9d711aaca5a2d14cca6b8c050bd492eff1
MD5 6798475b25bc7f76b656c07516845f36
BLAKE2b-256 04c6b24318bfc38520e43e93170006c2dad15bde1af5b404b2669187aaf6de13

See more details on using hashes here.

File details

Details for the file amazon_transcribe-0.5.0-py3-none-any.whl.

File metadata

  • Download URL: amazon_transcribe-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 37.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.6.3 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.6.6

File hashes

Hashes for amazon_transcribe-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d57a188e8718c302966cb2e5409c976a89b30ba4a24a91c6e90c613a00adaacd
MD5 c385b0a6081569f4e8884d6a3ef1effe
BLAKE2b-256 8808843e7a87c076b65a8129cb3efbaf740160972be4e51b6b7fa8f81e50f106

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page