Загрузка аудиоданных
Эта инструкция поможет вам загрузить в SpeechSense данные для распознавания и анализа речи с помощью API. В примере заданы параметры:
- формат аудио — WAV;
- метаданные диалога хранятся в файле
metadata_example.json
.
Аутентификация происходит от имени сервисного аккаунта с помощью IAM-токена или API-ключа.
Если вы хотите загрузить переписку из чата вместо аудиозаписи разговора, обратитесь к инструкции.
Перед началом работы
Для работы с API Yandex Cloud потребуется Git, Python 3.6 или старше и пакет grpcio-tools
. Узнайте, как установить Python
Чтобы подготовиться к загрузке аудиоданных:
-
Создайте подключение типа Двухканальное аудио.
-
Создайте проект с новым подключением.
В созданные проект и подключение будут загружены аудиозаписи разговоров.
-
В консоли управления создайте сервисный аккаунт.
-
Добавьте сервисный аккаунт в пространство с ролью
Data editor
. Это позволит сервисному аккаунту загружать данные в SpeechSense. -
Чтобы аутентифицироваться в API Yandex Cloud, создайте API-ключ или IAM-токен для сервисного аккаунта.
-
Склонируйте репозиторий API Yandex Cloud
:git clone https://github.com/yandex-cloud/cloudapi
-
Установите пакет
grpcio-tools
с помощью менеджера пакетов pip :pip install grpcio-tools
Загрузить данные
-
Перейдите в папку с репозиторием API Yandex Cloud, создайте папку
upload_data
, сгенерируйте в ней код интерфейса клиента и перейдите в папкуupload_data
:Bashcd <путь_к_папке_cloudapi> && \ mkdir upload_data && \ python3 -m grpc_tools.protoc -I . -I third_party/googleapis \ --python_out=./upload_data/ \ --grpc_python_out=./upload_data/ \ google/api/http.proto \ google/api/annotations.proto \ yandex/cloud/api/operation.proto \ google/rpc/status.proto \ yandex/cloud/operation/operation.proto \ yandex/cloud/validation.proto \ yandex/cloud/speechsense/v1/*.proto \ yandex/cloud/speechsense/v1/*/*.proto cd upload_data
-
В папке
upload_data
создайте Python-скриптupload_grpc.py
, который загрузит данные в подключение SpeechSense одним сообщением:import argparse import json from typing import Dict import grpc import datetime from yandex.cloud.speechsense.v1 import talk_service_pb2 from yandex.cloud.speechsense.v1 import talk_service_pb2_grpc from yandex.cloud.speechsense.v1 import audio_pb2 # Для аутентификации с IAM-токеном замените параметр api_key на iam_token def upload_talk(connection_id: int, metadata: Dict[str, str], api_key: str, audio_bytes: bytes): credentials = grpc.ssl_channel_credentials() channel = grpc.secure_channel('api.speechsense.yandexcloud.net:443', credentials) talk_service_stub = talk_service_pb2_grpc.TalkServiceStub(channel) # Формирование запроса к API request = talk_service_pb2.UploadTalkRequest( metadata=talk_service_pb2.TalkMetadata( connection_id=str(connection_id), fields=metadata ), # Формат аудио — WAV audio=audio_pb2.AudioRequest( audio_metadata=audio_pb2.AudioMetadata( container_audio=audio_pb2.ContainerAudio( container_audio_type=audio_pb2.ContainerAudio.ContainerAudioType.CONTAINER_AUDIO_TYPE_WAV ) ), audio_data=audio_pb2.AudioChunk(data=audio_bytes) ) ) # Тип аутентификации — API-ключ response = talk_service_stub.Upload(request, metadata=( ('authorization', f'Api-Key {api_key}'), # Для аутентификации с IAM-токеном передавайте заголовок # ('authorization', f'Bearer {iam_token}'), )) # Вывести идентификатор диалога print(f'Dialog ID: {response.talk_id}') if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--key', required=True, help='API key or IAM token', type=str) parser.add_argument('--connection-id', required=True, help='Connection ID', type=str) parser.add_argument('--audio-path', required=True, help='Audio file path', type=str) parser.add_argument('--meta-path', required=False, help='JSON with the dialog metadata', type=str, default=None) args = parser.parse_args() # Значения по умолчанию, если метаданные не указаны if args.meta_path is None: now = datetime.datetime.now().isoformat() metadata = { 'operator_name': 'Operator', 'operator_id': '1111', 'client_name': 'Client', 'client_id': '2222', 'date': str(now), 'date_from': '2023-09-13T17:30:00.000', 'date_to': '2023-09-13T17:31:00.000', 'direction_outgoing': 'true', } else: with open(args.meta_path, 'r') as fp: metadata = json.load(fp) with open(args.audio_path, 'rb') as fp: audio_bytes = fp.read() upload_talk(args.connection_id, metadata, args.key, audio_bytes)
-
Задайте API-ключ сервисного аккаунта:
export API_KEY=<API-ключ_сервисного_аккаунта>
Если вы используете IAM-токен, передайте его вместо API-ключа:
export IAM_TOKEN=<IAM-токен_сервисного_аккаунта>
-
Запустите скрипт
upload_grpc.py
, передав нужные параметры:python3 upload_grpc.py \ --audio-path <аудиофайл> \ --meta-path <метаданные> \ --connection-id <идентификатор_подключения> \ --key ${API_KEY}
Где:
--audio-path
— путь к файлу с аудио диалога.--meta-path
— путь к файлу с метаданными диалога.--connection-id
— идентификатор подключения, в которое вы загружаете данные.--key
— API-ключ для аутентификации. Если вы используете IAM-токен, укажите переменную окруженияIAM_TOKEN
вместоAPI_KEY
.