8-900-374-94-44
[email protected]
Slide Image
Меню

Список голосовые api – Yandex SpeechKit | Яндекс.Облако

Содержание

Потоковый режим для распознавания коротких аудио | Яндекс.Облако

Потоковый режим позволяет вам одновременно отправлять аудио на распознавание и получать результаты распознавания в рамках одного соединения.

В отличие от других способов распознавания, вы сможете получать промежуточные результаты распознавания, пока фраза еще незакончена. После паузы сервис вернет финальные результаты и начнет распознавание новой фразы.

Например, как только пользователь начинает говорить с Яндекс.Станцией, она начинает передавать его речь на сервер для распознавания. Сервер обрабатывает данные и возвращает промежуточные и финальные результаты распознавания каждой фразы. Промежуточные результаты используются, чтобы показать пользователю ход распознавания, а после финальных результатов Яндекс.Станция выполняет действие, например включает фильм.

Чтобы использовать сервис, создайте приложение, которое будет осуществлять потоковое распознавания речи: отправлять аудиофрагменты и обрабатывать ответ с результатами распознавания.

Использование сервиса

Создание клиентского приложения

Для распознавания речи приложение сначала должно отправить сообщение с настройками распознавания, а потом отправлять сообщения с аудиофрагментами.

Параллельно с тем как отправляются аудиофрагменты, в ответ сервис будет возвращать фрагменты распознанного текста, которые необходимо обрабатывать, например выводить их в консоль.

Чтобы приложение смогло обращаться к сервису, необходимо сгенерировать код интерфейса клиента для используемого языка программирования. Сгенерируйте этот код из файла stt_service.proto из репозитория Yandex.Cloud API.

Ниже представлены примеры клиентских приложений. Помимо этого, в документации gRPC вы можете найти подробные инструкции по генерации интерфейсов и реализации клиентских приложений для различных языков программирования.

Авторизация в сервисе

В каждом запросе приложение должно передавать идентификатор каталога, на который у вас есть роль editor или выше. Подробнее в разделе Управление доступом.

Также приложение должно аутентифицироваться при каждом запросе, например при помощи IAM-токенаПодробнее об аутентификации в сервисе.

Результат распознавания

В процессе распознавания речь делится на фразы. Фраза — это фрагмент речи из одного и более слов, после которого был период тишины. Фраза может состоять из предложений, если между ними не было паузы.

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

Финальные результаты распознавания формируются, когда система распознавания обнаруживает конец фразы. При этом вы можете отправить несколько сообщений с аудиофрагментом и это будет одной фразой.

Промежуточные результаты распознавания формируются в процессе распознавания фразы. Получение промежуточных результатов позволит быстрее реагировать на распознаваемую речь, не дожидаясь окончания фразы для получения финального результата.

Вы можете указать, чтобы сервис возвращал промежуточные результаты распознавания. Для этого в сообщении с настройками распознавания укажите

config.specification.partial_results=true. В ответе для промежуточных результатов final=false, а для финальных final=true.

Ограничения сессии распознавания речи

После получения сообщения с настройками распознавания сервис начнет сессию распознавания. Для каждой сессии действуют следующие ограничения:

  • Время между отправкой сообщений в сервис не должно превышать 5 секунд.
  • Максимальная длительность переданного аудио за всю сессию — 5 минут.
  • Максимальный размер переданных аудиоданных — 10 МБ.

Если в течение 5 секунд в сервис не отправлялись сообщения или достигнут лимит по длительности или размеру данных, сессия обрывается. Чтобы продолжить распознавание речи, надо заново установить соединение и отправить новое сообщение с настройками распознавания.

API сервиса

Сервис располагается по адресу: stt.api.cloud.yandex.net:443

Сообщение с настройками распознавания

ПараметрОписание
configobject
Поле с настройками распознавания и идентификатором каталога.
config
.specification
object
Настройки распознавания.
config
.specification
.languageCode
string
Язык, для которого будет выполнено распознавание.
Допустимые значения:
  • ru-RU (по умолчанию) — русский язык,
  • en-US — английский язык.
  • tr-TR — турецкий язык.
config
.specification
.model
string
Языковая модель, которую следует использовать при распознавании.
Чем точнее выбрана модель, тем лучше результат распознавания. В одном запросе можно указать только одну модель.
Допустимые значения зависят от выбранного языка. Значение параметра по умолчанию:
general
.
config
.specification
.profanityFilter
boolean
Фильтр ненормативной лексики.
Допустимые значения:
  • true — исключать ненормативную лексику из результатов распознавания.
  • false (по умолчанию) — не исключать ненормативную лексику.
config
.specification
.partialResults
boolean
Фильтр промежуточных результатов.
Допустимые значения:
  • true — возвращать промежуточные результаты (часть распознанного высказывания). Для промежуточных результатов final равно false.
  • false (по умолчанию) — возвращать только финальные результаты (распознанное высказывание целиком).
config
.specification
.audioEncoding
string
Формат передаваемого аудио.
Допустимые значения:
config
.specification
.sampleRateHertz
integer (int64)
Частота дискретизации передаваемого аудио.
Этот параметр обязателен, если значение format равно LINEAR16_PCM. Допустимые значения:
  • 48000 (по умолчанию) — частота дискретизации 48 кГц;
  • 16000 — частота дискретизации 16 кГц;
  • 8000 — частота дискретизации 8 кГц.
folderIdstring

Идентификатор каталога, к которому у вас есть доступ. Требуется для авторизации с пользовательским аккаунтом (см. ресурс UserAccount ). Не используйте это поле, если вы делаете запрос от имени сервисного аккаунта.

Максимальная длина строки в символах — 50.

Сообщение с аудиофрагментом

Структура ответа

При успешном распознавании фрагмента речи придет сообщение, содержащее список результатов распознавания chunks[]. Каждый результат содержит поля:

  • alternatives[] — список вариантов распознанного текста. Каждый вариант содержит поля:
    • text — распознанный текст.
    • confidence — достоверность определения. Сейчас сервис всегда возвращает значение 1, которое эквивалентно 100%.
  • final — равно true, если результат окончательный, и false, если промежуточный.

Коды ошибок, возвращаемые сервером

Соответствия gRPC-статусов с HTTP-кодами описаны в google.rpc.Code.

Список возможных gRPC-ошибок, возвращаемых сервисом:

КодСтатусОписание
3INVALID_ARGUMENTКлиент некорректно указал параметры запроса. Детальная информация представлена в поле details.
16UNAUTHENTICATEDДля выполнения операции необходима авторизация. Проверьте IAM-токен и идентификатор каталога, которые вы передали
13INTERNALВнутренняя ошибка сервера. Ошибка означает, что операция не может быть выполнена из-за технического состояния сервера. Например, из-за нехватки вычислительных ресурсов.

Примеры

Для того чтобы попробовать примеры в этом разделе:

  1. Склонируйте репозиторий Yandex.Cloud API:
    git clone https://github.com/yandex-cloud/cloudapi
    
  2. Узнайте идентификатор каталога, к которому у вашего аккаунта есть доступ.
  3. Для аутентификации в примерах используется IAM-токен (о других способах аутентификации). Получите IAM-токен:
  4. Выберите аудиофайл для распознавания. В примерах используется файл speech.pcm в формате LPCM с частотой дискретизации 8000.

    Примечание

    Нет аудиофайла для распознавания? Скачайте готовый пример.

После этого приступите к созданию клиентского приложения.

  1. Установите пакет grpcio-tools с помощью менеджера пакетов pip:

    $ pip install grpcio-tools
    
  2. Перейдите в директорию с репозиторием Yandex.Cloud API, создайте директорию output и сгенерируйте в ней код интерфейса клиента:

    $ cd cloudapi
    $ mkdir output
    $ python -m grpc_tools.protoc -I . -I third_party/googleapis --python_out=output --grpc_python_out=output google/api/http.proto google/api/annotations.proto yandex/api/operation.proto google/rpc/status.proto yandex/cloud/operation/operation.proto yandex/cloud/ai/stt/v2/stt_service.proto
    

    В результате в директории output будут созданы файлы с интерфейсом клиента: stt_service_pb2.py, stt_service_pb2_grpc.py и файлы зависимостей.

  3. Создайте файл в корне директории output, например test.py, и добавьте в него следующий код:

    
    import argparse
    
    import grpc
    
    import yandex.cloud.ai.stt.v2.stt_service_pb2 as stt_service_pb2
    import yandex.cloud.ai.stt.v2.stt_service_pb2_grpc as stt_service_pb2_grpc
    
    
    CHUNK_SIZE = 16000
    
    def gen(folder_id, audio_file_name):
        
        specification = stt_service_pb2.RecognitionSpec(
            language_code='ru-RU',
            profanity_filter=True,
            model='general',
            partial_results=True,
            audio_encoding='LINEAR16_PCM',
            sample_rate_hertz=8000
        )
        streaming_config = stt_service_pb2.RecognitionConfig(specification=specification, folder_id=folder_id)
    
        
        yield stt_service_pb2.StreamingRecognitionRequest(config=streaming_config)
    
        
        with open(audio_file_name, 'rb') as f:
            data = f.read(CHUNK_SIZE)
            while data != b'':
                yield stt_service_pb2.StreamingRecognitionRequest(audio_content=data)
                data = f.read(CHUNK_SIZE)
    
    
    def run(folder_id, iam_token, audio_file_name):
        
        cred = grpc.ssl_channel_credentials()
        channel = grpc.secure_channel('stt.api.cloud.yandex.net:443', cred)
        stub = stt_service_pb2_grpc.SttServiceStub(channel)
    
        
        it = stub.StreamingRecognize(gen(folder_id, audio_file_name), metadata=(('authorization', 'Bearer %s' % iam_token),))
    
        
        try:
            for r in it:
                try:
                    print('Start chunk: ')
                    for alternative in r.chunks[0].alternatives:
                        print('alternative: ', alternative.text)
                    print('Is final: ', r.chunks[0].final)
                    print('')
                except LookupError:
                    print('Not available chunks')
        except grpc._channel._Rendezvous as err:
            print('Error code %s, message: %s' % (err._state.code, err._state.details))
    
    
    if __name__ == '__main__':
        parser = argparse.ArgumentParser()
        parser.add_argument('--token', required=True, help='IAM token')
        parser.add_argument('--folder_id', required=True, help='folder ID')
        parser.add_argument('--path', required=True, help='audio file path')
        args = parser.parse_args()
    
        run(args.folder_id, args.token, args.path)
    
  4. Выполните созданный файл, передав в аргументах IAM-токен, идентификатор каталога и путь к аудиофайлу, который необходимо распознать:

    $ export FOLDER_ID=b1gvmob95yysaplct532
    $ export IAM_TOKEN=CggaATEVAgA...
    $ python test.py --token ${IAM_TOKEN} --folder_id ${FOLDER_ID} --path speech.pcm
    Start chunk:
    alternative: привет
    Is final: False
    
    Start chunk:
    alternative: привет мир
    Is final: True
    

cloud.yandex.ru

Правила тарификации для SpeechKit | Яндекс.Облако

Из чего складывается стоимость использования SpeechKit

Использование синтеза речи

Стоимость использования SpeechKit API для синтеза речи рассчитывается исходя из суммарного количества символов, которые были отправлены для генерации речи из текста за календарный месяц (Отчетный период).

Количество символов в запросе определяется с учетом пробелов и служебных символов. Стоимость пустого запроса равна стоимости одного символа.

Использование распознавания речи

Стоимость использования зависит от длительности распознанного аудио. Стоимость рассчитывается за календарный месяц (Отчетный период).

Распознавание коротких аудио

Эти правила действуют при использовании распознавания коротких аудио с помощью запроса или в потоковом режиме.

Единица тарификации — отрезок одноканального аудио длительностью 15 секунд. Отрезки меньшей длительности округляются в большую сторону (1 секунда превращается в 15 секунд).

Примеры:

  • 1 аудиофрагмент 37 секунд тарифицируется как 45 секунд.

    Объяснение: аудио разбивается на 2 отрезка по 15 секунд и один отрезок 7 секунд. Длительность последнего отрезка будет округлена до 15 секунд. Итого, 3 отрезка по 15 секунд.

  • 2 аудиофрагмента по 5 и 8 секунд тарифицируются как 30 секунд.

    Объяснение: длительность каждого аудио будет округлена до 15 секунд. Итого, 2 отрезка по 15 секунд.

Распознавание длинных аудио

Эти правила действуют при использовании распознавания длинных аудио.

Единица тарификации — 1 секунда двухканального аудио. Отрезки меньшей длительности округляются в большую сторону. Количество каналов округляется до четного числа.

Минимум начисляется 15 секунд за каждые два канала. Аудио меньшей длительности тарифицируется, как 15 секунд.

Примеры с округлением длительности аудио:

ДлительностьКоличество каналовНачислено секунд
1 секунда115
1 секунда215
1 секунда330
15.5 секунд216
15.5 секунд432

Цены

Синтез речи

УслугаЦена за 1 млн символов,
вкл. НДС
Синтез речи183,0508 ₽

Распознавание речи

cloud.yandex.ru

Яндекс.Облако — Технологии Яндекса

Yandex Compute Cloud

Создание виртуальных машин любой конфигурации и подключение к ним дисков.

Yandex Object Storage

Универсальное масштабируемое хранилище для данных любого формата до 5 ТБ.

Yandex Virtual Private Cloud

Создание сетей для передачи информации между облачными ресурсами и для связи облачных ресурсов с интернетом.

Yandex Identity and Access Management

Управление правами доступа к облачным ресурсам.

Yandex Load Balancer

Настройка балансировщиков для обеспечения отказоустойчивости и распределения сетевого трафика по облачным ресурсам.

Yandex Instance Groups

Компонент сервиса Yandex Compute Cloud, предназначенный для развёртывания и горизонтального масштабирования виртуальных машин. 

Yandex DDoS Protection

Компонент сервиса Yandex Virtual Private Cloud, предназначенный для защиты от DDoS-атак приложений, размещённых в инфраструктуре Яндекс.Облака.

Yandex Managed Service for PostgreSQL

Развертывание объектно-реляционной СУБД и поддержка серверов и баз данных в инфраструктуре Яндекс.Облака.

Yandex Managed Service for ClickHouse

Развертывание столбцовой аналитической СУБД с открытым кодом и поддержка серверов и баз данных в инфраструктуре Яндекс.Облака.

Yandex Managed Service for MongoDB

Развертывание документоориентированной бессхемной СУБД и поддержка серверов и баз данных в инфраструктуре Яндекс.Облака.

Yandex Managed Service for MySQL®

Развёртывание объектно-реляционной СУБД и поддержка серверов и баз данных в инфраструктуре Яндекс.Облака.

Yandex Managed Service for Redis™

Развёртывание СУБД в формате ключ-значение и поддержка серверов и баз данных в инфраструктуре Яндекс.Облака.

Yandex SpeechKit

Речевые технологии Яндекса: распознавание и синтез речи через HTTP API.

Yandex Translate

Облачный сервис машинного перевода: поддерживает 90+ языков, доступен через API.

Yandex Vision

OCR технологии Яндекса: распознавание текста с помощью моделей машинного обучения.

tech.yandex.ru

Обработка голосовых запросов в Telegram с помощью Yandex SpeechKit Cloud / Habr

Как все начиналось

Этим летом я участвовал в разработке бота Datatron, предоставляющего доступ с открытыми финансовыми данными РФ. В какой-то момент я захотел, чтобы бот мог обрабатывать голосовые запросы, и для реализации этой задачи решил использовать наработками Яндекса.

После долгих поисков хоть какой-то полезной информации на эту тему, я наконец-то встретил человека, который написал voiceru_bot и помог мне разобраться с этой темой (в источниках приведена ссылка на его репозиторий). Теперь я хочу поделиться этими знаниями с вами.


От слов к практике

Ниже будет по фрагментам приведен код полностью готовый к применению, который практически можно просто скопировать и вставить в ваш проект.


Шаг 1. С чего начать?

Заведите аккаунт на Яндексе (если у вас его нет). Затем прочтите условия использования SpeechKit Cloud API. Если вкратце, то для некоммерческих проектов при количестве запросов не более 1000 в сутки использование бесплатное. После зайдите в Кабинет разработчика и закажите ключ на требуемый сервис. Обычно его активируют в течение 3 рабочих дней (хотя один из моих ключей активировали через неделю). И наконец изучите документацию.


Шаг 2: Сохранение отправленной голосовой записи

Перед тем, как отправить запрос к API, нужно получить само голосовое сообщение. В коде ниже в несколько строчек получаем объект, в котором хранятся все данные о голосовом сообщении.

import requests
@bot.message_handler(content_types=['voice'])
def voice_processing(message):
    file_info = bot.get_file(message.voice.file_id)
    file = requests.get('https://api.telegram.org/file/bot{0}/{1}'.format(TELEGRAM_API_TOKEN, file_info.file_path)) 

Сохранив в переменную file объект, нас в первую очередь интересует поле content, в котором хранится байтовая запись отправленного голосового сообщения. Она нам и нужна для дальнейшей работы.


Шаг 3. Перекодирование

Голосовое сообщение в Telegram сохраняется в формате OGG с аудиокодеком Opus. SpeechKit умеет обрабатывать аудиоданные в формате OGG с аудиокодеком Speex. Таким образом, необходимо конвертировать файл, лучше всего в PCM 16000 Гц 16 бит, так как по документации этот формат обеспечивает наилучшее качество распознавания. Для этого отлично подойдет FFmpeg. Скачайте его и сохраните в директорию проекта, оставив только папку bin и ее содержимое. Ниже реализована функция, которая с помощью FFmpeg перекодирует поток байтов в нужный формат.

import subprocess
import tempfile
import os

def convert_to_pcm16b16000r(in_filename=None, in_bytes=None):
    with tempfile.TemporaryFile() as temp_out_file:
        temp_in_file = None
        if in_bytes:
            temp_in_file = tempfile.NamedTemporaryFile(delete=False)
            temp_in_file.write(in_bytes)
            in_filename = temp_in_file.name
            temp_in_file.close()
        if not in_filename:
            raise Exception('Neither input file name nor input bytes is specified.')

        # Запрос в командную строку для обращения к FFmpeg
        command = [
            r'Project\ffmpeg\bin\ffmpeg.exe',  # путь до ffmpeg.exe
            '-i', in_filename,
            '-f', 's16le',
            '-acodec', 'pcm_s16le',
            '-ar', '16000',
            '-'
        ]

        proc = subprocess.Popen(command, stdout=temp_out_file, stderr=subprocess.DEVNULL)
        proc.wait()

        if temp_in_file:
            os.remove(in_filename)

        temp_out_file.seek(0)
        return temp_out_file.read()

Шаг 4. Передача аудиозаписи по частям

SpeechKit Cloud API принимает на вход файл размером до 1 Мб, при этом его размер нужно указывать отдельно (в Content-Length). Но лучше реализовать передачу файла по частям (размером не больше 1 Мб с использованием заголовка Transfer-Encoding: chunked). Так безопаснее, и распознавание текста будет происходить быстрее.

def read_chunks(chunk_size, bytes):
    while True:
        chunk = bytes[:chunk_size]
        bytes = bytes[chunk_size:]

        yield chunk

        if not bytes:
            break

Шаг 5. Отправка запроса к Yandex API и парсинг ответа

Наконец, последний шаг – написать одну единственную функцию, которая будет служить «API» к этому модулю. То есть, сначала в ней будет происходить вызов методов, ответственных за конвертирование и считывание байтов по блокам, а затем идти запрос к SpeechKit Cloud и чтение ответа. По умолчанию, для запросов топик задан notes, а язык — русский.

import xml.etree.ElementTree as XmlElementTree
import httplib2
import uuid
from config import YANDEX_API_KEY

YANDEX_ASR_HOST = 'asr.yandex.net'
YANDEX_ASR_PATH = '/asr_xml'
CHUNK_SIZE = 1024 ** 2

def speech_to_text(filename=None, bytes=None, request_id=uuid.uuid4().hex, topic='notes', lang='ru-RU',
                   key=YANDEX_API_KEY):
    # Если передан файл
    if filename:
        with open(filename, 'br') as file:
            bytes = file.read()
    if not bytes:
        raise Exception('Neither file name nor bytes provided.')

    # Конвертирование в нужный формат
    bytes = convert_to_pcm16b16000r(in_bytes=bytes)

    # Формирование тела запроса к Yandex API
    url = YANDEX_ASR_PATH + '?uuid=%s&key=%s&topic=%s&lang=%s' % (
        request_id,
        key,
        topic,
        lang
    )

    # Считывание блока байтов
    chunks = read_chunks(CHUNK_SIZE, bytes)

    # Установление соединения и формирование запроса 
    connection = httplib2.HTTPConnectionWithTimeout(YANDEX_ASR_HOST)

    connection.connect()
    connection.putrequest('POST', url)
    connection.putheader('Transfer-Encoding', 'chunked')
    connection.putheader('Content-Type', 'audio/x-pcm;bit=16;rate=16000')
    connection.endheaders()

    # Отправка байтов блоками
    for chunk in chunks:
        connection.send(('%s\r\n' % hex(len(chunk))[2:]).encode())
        connection.send(chunk)
        connection.send('\r\n'.encode())

    connection.send('0\r\n\r\n'.encode())
    response = connection.getresponse()

    # Обработка ответа сервера
    if response.code == 200:
        response_text = response.read()
        xml = XmlElementTree.fromstring(response_text)

        if int(xml.attrib['success']) == 1:
            max_confidence = - float("inf")
            text = ''

            for child in xml:
                if float(child.attrib['confidence']) > max_confidence:
                    text = child.text
                    max_confidence = float(child.attrib['confidence'])

            if max_confidence != - float("inf"):
                return text
            else:
                # Создавать собственные исключения для обработки бизнес-логики - правило хорошего тона
                raise SpeechException('No text found.\n\nResponse:\n%s' % (response_text))
        else:
            raise SpeechException('No text found.\n\nResponse:\n%s' % (response_text))
    else:
        raise SpeechException('Unknown error.\nCode: %s\n\n%s' % (response.code, response.read()))

# Создание своего исключения
сlass SpeechException(Exception):
    pass

Шаг 6. Использование написанного модуля

Теперь дополним главный метод, из которого будем вызывать функцию speech_to_text. В ней нужно только дописать обработку того случая, когда пользователь отправляет голосовое сообщение, в котором нет звуков или распознаваемого текста. Не забудьте сделать импорт функции speech_to_text и класса SpeechException, если необходимо.

@bot.message_handler(content_types=['voice'])
def voice_processing(message):
    file_info = bot.get_file(message.voice.file_id)
    file = requests.get(
        'https://api.telegram.org/file/bot{0}/{1}'.format(API_TOKEN, file_info.file_path))

    try:
        # обращение к нашему новому модулю
        text = speech_to_text(bytes=file.content)
    except SpeechException:
        # Обработка случая, когда распознавание не удалось
    else:
        # Бизнес-логика

Вот и все. Теперь вы можете легко реализовывать обработку голоса в ваших проектах. Причем не только в Telegram, но и на других платформах, взяв за основу эту статью!


Источники:

» @voiceru_bot: https://github.com/just806me/voiceru_bot
» Для работы с API Telegram на Python использовалась библиотека telebot

habr.com

Google открывает API для распознавания речи на 80 языках / Habr

Компания Google сделала подарок сторонним разработчикам — и открыла доступ к программным интерфейсам Cloud Speech API. В первое время доступ предоставляется на бесплатной основе, тарифы объявят позже.

Распознавание речи работает для 80 языков. Возможно распознавание речи в прямом эфире через микрофон или аудиозаписей из файлов (вероятно, до 2 минут). Поддерживаются многочисленные форматы, в том числе FLAC, AMR и PCMU.

Теперь для любой программы можно встроить, например, голосовое управление через Cloud Speech API. Система выдаёт распознанный текст мгновенно в процессе работы.

Google утверждает, что Speech API достаточно точно работает даже с зашумлённым фоном, так что материал не требуется предварительно очищать, обрабатывая фильтрами или используя дорогое оборудование и микрофоны для шумоподавления.

Для некоторых языков поддерживается автоматическая фильтрация нежелательного контента.

Слухи об открытии интерфейсов ходили в последнее несколько недель. Эксперты выражали мнение, что Google собирается выйти на рынок, где сейчас работает Nuance и некоторые другие компании, специализирующиеся на распознавании речи. Теперь тягаться с Google им будет тяжело, в её системе используются последние разработки в области самообучаемых нейросетей — тот же движок, что и в голосовом поиске Google и голосовом наборе с клавиатуры Google. С каждым месяцем Cloud Speech API будет распознавать текст всё точнее.

Новость о Cloud Speech API компания объявила вчера на конференции NEXT. Кроме распознавания речи, теперь разработчикам открыт доступ к платформе машинного обучения Cloud Machine Learning.

Открытие Google API для распознавания речи ударит не только по специализированным компаниям, но и по Apple, у которой голосовой помощник Siri значительно уступает нейросети Google по точности распознавания и функциональности.

habr.com

Api.ai упрощает голосовое управление для приложений

Хотите добавить коммуникационный интерфейс в стиле Siri в ваше приложение или устройство? Тогда вы попадаете в целевую аудиторию api.ai, открытого в Пало-Альто стартапа, который работает совместно с российской командой над Speaktoit Assistant – голосовым помощником для Android, iOS and Windows Phone.

Но сейчас компания улучшила свое предложение, сделав возможным использование их технологии при разработке приложений для IoT, включая умные дома и носимые устройства.

api.ai в прошлом сентябре запустили свою технологию искусственного интеллекта и распознавания естественного языка, которая находится в основе Speaktoit, так что разработчики получили возможность добавлять коммуникационные интерфейсы в свои приложения. Около 5,000 разработчиков подписалось на платформу, а полученный от них фидбек позволил команде api.ai понять две вещи.

Первая, к их продукту возник большой интерес не только среди мобильных разработчиков, но и в сфере IoT, особенно умных домов и носимых устройств вроде умных часов – эти области компания изначально планировала покрыть.

Вторая, для многих разработчиков оказалось слишком сложно встраивать платформу напрямую; несмотря на огромную работу по созданию технологии машинного обучения, разработчикам нужны был готовый к употреблению продукт, который можно было бы просто встроить в свое приложение.

В результате, команда api.ai сделала свой UI более контекстным, добавив так называемые “предопределенные домены”, включая разные категории IoT. Это значит, что платформа заранее знает, в каких областях расположены какие устройства и что можно с ними делать.

Например, если разработчик хочет добавить распознавание голоса в умную систему управления светом, api.ai знает заранее, что она работает внутри умного дома, и позволит подключить существующую специальную библиотеку.

“Разработчики могут теперь потреблять продукт прямо из коробки”, – расказал TechCrunch со-основатель и СЕО Илья Гельфенбейн. – “Можно использовать домены вроде новостей, погоды или умного дома и т.д.”

Еще разработчики могут предлагать свои варианты коммуникации и сценарии, просто добавляя несколько примеров на основе возможностей устройства, а платформа api.ai будет использовать их для более полного коммуникационного UI.

“Наша система самообучается на основе этих примеров, находя общие семантические единицы, которые делают возможным понимание следующих примеров, которые не учел разработчик”, – объясняет Илья.

Вот примеры из api.ai, которые можно попробовать на практике:

Человек: Здесь очень темно
Умный дом: Давайте тогда включим свет
Человек: Переключи в романтичный режим
Умный дом: Ок, я понял. Вот.
Человек: Все еще слишком ярко.
Умный дом: Уменьшил до минимума.
Человек: И в кухне.
Умный дом: Свет на кухне включен.
Человек: Включи еще отопление.
Умный дом: Термостат включен только на кухне.

Вот как могло бы выглядеть усиленное api.ai приложение для умных часов Magic:

Тем временем, технологии компании поддерживают 13 языков, включая китайский, английский, французский, корейский, португальский и испанский. С точки зрения разработки: поддерживается несколько платформ и языков программирования, включая iOS, Android, HTML, Cordova, Python, C#, Xamarin и Unity.

Если вы нашли опечатку — выделите ее и нажмите Ctrl + Enter! Для связи с нами вы можете использовать [email protected].

apptractor.ru

5 лучших синтезаторов речи с русскими голосами

Все чаще в повседневной жизни стали использовать синтезаторы речи. Синтезаторы речи, как становится видно уже по одному названию, осуществляют синтез речи, то есть форматируют письменный текст в устный.

Благодаря этому можно учить новые иностранные слова с правильным произношением, читать книги не отвлекаясь от своих дел или, например, находясь в транспорте. Изначально разработкой таких программ занимались организации, специализирующиеся на технике для людей с проблемами зрения.

Сейчас же, любой пользователь может скачать одну из программ, установить ее на свой компьютер или телефон и синтезировать речь, в том числе и русскую.

Для этого было разработано множество различных программ, приложенный и даже целых систем. К сожалению, не все из них предназначены для русскоязычной аудитории.

Содержание статьи:

Список синтезаторов речи:

1. Acapela

Acapela — один из самых распространенных речевых синтезаторов во всем мире. Программа распознает и озвучивает тексты более, чем на тридцати языках. Русский язык поддерживается двумя голосами: мужской голос — Николай, женский — Алена.
Женский голос появился значительно позднее мужского и является более усовершенствованным.

Прослушать, как звучат голоса, можно на официальном сайте программы. Достаточно лишь выбрать язык и голос, и набрать свой небольшой текст.

Кстати, для мужского голоса был разработан отдельный словарь ударений, что позволяет достичь еще большей четкости произношения.

Установка программы проходит без проблем. Разработаны версии для операционных систем Windows, Linux, Mac, а также для мобильных ОС Android u IOS.

Программа платная, скачать ее можно с официального сайта Acapela.

2. Vokalizer

Вторым в нашем списке, но не по популярности является движок Милена от разработчика программы Vocalizer компании Nuance.
Голос звучит очень естественно, речь чистая. Есть возможность установить различные словари, а также подкорректировать громкость, скорость и ударение, что не маловажно.
Как и в случае с Акапелой, программа имеет различные версии для мобильных, автомобильных и компьютерных приложений. Прекрасно подходит для чтения книг.

Скачать все версии Vokalizer и русскоязычный движок Милена можно на официальном сайте производителя программы.

3. RHVoice

Синтезатор речи RHVoice был разработан Ольгой Яковлевой. Программа озвучивает русские тексты тремя голосами: Елена, Ирина и Александр. Подробнее об установке и применении, а также прослушать голоса Вы сможете в прошлой статье

Код синтезатора открыт для всех, программы же абсолютно бесплатны.
RHVoice выпущена в двух вариантах: как отдельная программа, так и как приложение к NVDA.
Все версии можно скачать с официального сайта разработчика.

4. ESpeak

Первая версия бесплатного синтезатора речи eSpeak была выпущена в 2006 году. С тех пор компания-разработчик постоянно выпускает все более усовершенствованные версии. Последняя версия была представлена в конце весны две тысячи тринадцатого года.

eSpeak можно установить под следующие операционные системы:

  • Microsoft Windows,
  • Mac OS X,
  • Linux,
  • RISC OS

Возможна также компиляция кода для Windows Mobile, но делать ее придется самостоятельно.
А вот с мобильной ОС Android программа работает без проблем, хотя русские словари еще не до конца разработаны. Русскоязычных голосов много, можно выбрать на свой вкус.

Для разработчиков будет интересно узнать, что C++ код программы доступен в сети. Скачать программу, а также посмотреть ее код можно на официальном сайте.

5. Festival

Festival — это целая система распознавания и синтеза речи, которая была разработана в эдинбургском университете.
Программы и все модули абсолютно бесплатно и распространяются по системе open source. Скачать их и ознакомиться с демо-версиями можно на официальном сайте университета Эдинбурга.

Русский голос представлен в одном варианте, но звучание довольно хорошее и ясное, без акцента и с правильной расстановкой ударений.
К сожалению, программа пока может быть установлена только в среде API, Linux. Также есть модуль для работы в Mac OS, но русский язык пока поддерживается не очень хорошо.

Вместо послесловия

Стоит отметить, что любой из вышеприведённых синтезаторов отлично исполнен, но  выбор программы индивидуален. Всё объясняется   различным произношением голосов. Смею посоветовать второй вариант  с голосом Милена. ОЧень выразительный голос, насыщенное звучание и приятная во всех смыслах интонация  голоса!