Используйте pydub с файлами, хранящимися в AWS - PullRequest
1 голос
/ 15 апреля 2019

Я хочу объединить два файла, хранящиеся в AWS, сохранить их как .wav и передать их в IBM Speech-to-Text API.Вот как выглядит обычный вызов в IBM.

with open(join(dirname(__file__), './.', 'audio-file.wav'),
               'rb') as audio_file:
    recognition_job = speech_to_text.create_job(
        audio_file,
        content_type='audio/wav',
        timestamps=True
    ).get_result()

Может ли pydub экспортировать напрямую в AWS, так как онлайн я не могу сохранить его локально?

Заранее спасибо!

1 Ответ

1 голос
/ 16 апреля 2019

Когда вы говорите «экспорт в AWS», я предполагаю, что вы имеете в виду Amazon S3 .Оттуда вы хотите вызывать API преобразования речи в текст IBM.Для взаимодействия с Amazon S3 в python вы должны использовать boto3 SDK.

Вам не нужно экспортировать данные во временный локальный файл, если он вам не нужен.Вы можете хранить данные в памяти на python.

import os
import io

import boto3
from pydub import AudioSegment
from ibm_watson import SpeechToTextV1

speech_to_text = SpeechToTextV1()

s3r = boto3.resource("s3")
bucket = "randall-stackoverflow"

file1 = io.BytesIO()
s3r.Object(bucket, "file1.wav").download_fileobj(file1)
file2 = io.BytesIO()
s3r.Object(bucket, "file2.wav").download_fileobj(file2)

sound1 = AudioSegment.from_wav(file1)
sound2 = AudioSegment.from_wav(file2)

combined = sound1.append(sound2) # maybe add crossfade
recognition_job = speech_to_text.create_job(
    combined.raw_data,
    content_type='audio/wav',
    timestamps=True
)

Я был бы упущен, если бы не упомянул Amazon Transcribe , который позволил бы вам делать все это в облаке AWS.

transcribe = boto3.client("transcribe")
url = "{}/{}/{}".format(
    s3r.meta.client.meta.endpoint_url,
    bucket,
    "file1.wav"
)
transcribe.start_transcription_job(
    TranscriptionJobName="ExampleJob",
    Media={"MediaFileUri": url},
    LanguageCode="en-US",
    MediaFormat="wav"
)
...