1. Обзор
В этом практическом занятии вы узнаете, как отправить аудиофайл через API Google Cloud Speech to Text , а затем вывести расшифровку в документ Google. API Speech to Text прост в использовании и использует мощные нейронные сети, позволяя разработчикам преобразовывать аудио в текст! Кроме того, он основан на машинном обучении.
Вы будете использовать API Google Docs для создания и записи в новый документ. Вы создадите Java-приложение командной строки и запустите свой код с помощью системы сборки Gradle, а затем используете API Docs для просмотра результатов.
Что вы узнаете
- Как использовать API преобразования речи в текст Google Cloud
- Как использовать API Google Docs для создания нового документа
- Как использовать API Docs для записи в документ
Что вам понадобится
- Установлена Java (версия 7 или выше).
- Установлен Gradle (версия 5 или выше).
- Доступ к интернету и веб-браузеру.
- Аккаунт Google
- Проект Google Cloud Platform
2. Настройте свой проект.
Создайте свой облачный проект
- Войдите в Cloud Console и создайте новый проект или используйте существующий. (Если у вас еще нет учетной записи Gmail или Workspace, вам необходимо ее создать .)
Запомните идентификатор проекта (Project ID) — уникальное имя для всех проектов Google Cloud (указанное выше имя уже занято и вам не подойдёт, извините!). В дальнейшем в этом практическом занятии оно будет обозначаться как PROJECT_ID .
- Далее вам потребуется включить оплату в Cloud Console, чтобы использовать ресурсы Google Cloud.
Выполнение этого практического задания не должно стоить дорого, если вообще что-либо. Обязательно следуйте инструкциям в разделе «Очистка», где указано, как отключить ресурсы, чтобы избежать дополнительных расходов после завершения этого урока. Новые пользователи Google Cloud имеют право на бесплатную пробную версию стоимостью 300 долларов США .
Получите ключ учетной записи службы для API преобразования речи в текст в облаке.

- Перейдите в консоль GCP и найдите свой новый проект.
- Создайте учетную запись службы
- Скачать ключ учетной записи службы в формате JSON
- Установите переменную среды GOOGLE_APPLICATION_CREDENTIALS, указав путь к JSON-файлу, содержащему ключ вашей учетной записи службы. Если вы перезапустите сеанс оболочки, вам придется установить эту переменную снова.
$ export GOOGLE_APPLICATION_CREDENTIALS="[PATH]"
Например:
$ export GOOGLE_APPLICATION_CREDENTIALS="/home/usr/downloads/ServiceAccount.json"
Получение учетных данных для API документации
- Вернувшись в консоль GCP , перейдите в раздел «Учетные данные».
- Создайте ключ OAuth 2.0 и загрузите его в формате JSON.
- Переименуйте файл
credentials.jsonи убедитесь, что он находится в каталогеsrc/main/resources/вашего кода.
Включить API

- Выберите вкладку «Панель управления» , нажмите кнопку «Включить API и сервисы» и активируйте следующие 2 API:
- Преобразование речи в текст
- Google Документы

Теперь вы готовы приступить к работе над своим кодом.
3. Настройте свой код
Получите пример кода
Чтобы получить пример кода, либо скачайте ZIP-файл на свой компьютер...
...или клонируйте репозиторий GitHub из командной строки.
$ git clone git@github.com:googleworkspace/docs-transcript-codelab.git
Вы будете работать с файлом CreateTranscript.java расположенным в директории start . Файлы Gradle изменять не следует.
В вашей директории перейдите в папку " Пуск" и откройте файл CreateTranscript.java . Прокрутите вниз до объявления класса CreateTranscript .
public class CreateTranscript {
private static final String CREDENTIALS_FILE_PATH = "/credentials.json";
// Specify audio file name below.
private static final String AUDIO_FILENAME = "audioFile.wav";
private static final String TOKENS_DIRECTORY_PATH = "tokens";
private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
private static final String APPLICATION_NAME = "CreateTranscript";
private static final List<String> SCOPES = Collections.singletonList(DocsScopes.DOCUMENTS);
В переменной SCOPES указано, что ваш код сможет просматривать и управлять документами Google Docs ваших пользователей. Если вашему коду требуется авторизация, выходящая за рамки этого доступа или отличающаяся от него, обязательно скорректируйте эту переменную в соответствии с областями действия API Google OAuth 2.0 .
Например, если вы не записываете данные в документ Google Docs, вы можете изменить область действия на DOCUMENTS_READONLY . Переменная SCOPES необходима не только для того, чтобы ваше приложение имело надлежащие права доступа, но и для обеспечения прозрачности для пользователей. Пользователь видит конкретные запрошенные вами области действия на странице подтверждения OAuth, где он должен дать согласие на использование приложения.
Переименование переменных
Убедитесь, что указанные выше переменные правильно объявлены для вашего проекта.
- Убедитесь, что в параметре AUDIO_FILENAME указано имя демонстрационного файла, который вы отправляете в API преобразования речи в текст. В файле CreateTranscript.java это значение уже должно быть правильно установлено.
- Переименуйте CREDENTIALS_FILE_PATH в имя загруженного файла учетных данных (должно быть '
credentials.json'). Убедитесь, что этот файл находится в каталогеsrc/main/resourcesвашей папки, поэтому создайте этот каталог, если клонирование GitHub не делает этого автоматически.
Теперь вы можете приступить к запуску своего кода!
4. Инициализация клиента документации.
В файле CreateTranscript.java найдите объявление метода main и загляните внутрь:
final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
Docs service = new Docs.Builder(HTTP_TRANSPORT, JSON_FACTORY,
getCredentials(HTTP_TRANSPORT))
.setApplicationName(APPLICATION_NAME)
.build();
Авторизация функций
Первая задача, которую вы здесь выполняете, — это создание Docs service (переменная). Сервис представляет собой авторизованного клиента API, хранящего ваши учетные данные и, в данном случае, аутентификацию конечного пользователя.
В вашем коде любая функция, которая вызывает API Docs, должна будет использовать эту service переменную для выполнения задач, связанных с Docs.
5. Создание документа Google
Вам нужно будет создать новый документ Google с указанным заголовком. Поэтому скопируем приведенный ниже код в функцию createDocument .
Document doc = new Document().setTitle("Transcript for " +
AUDIO_FILENAME);
doc = service.documents().create(doc).execute();
String documentId = doc.getDocumentId();
return documentId;
Эта функция возвращает идентификатор файла Google Docs на Google Диске. Этот же идентификатор можно найти в URL-адресе документа .
Далее вам потребуется инициализировать клиент преобразования речи в текст.
6. Вызов API преобразования речи в текст.
Следующая задача, которую вам нужно выполнить в своем коде, — это получить текстовую расшифровку аудиофайла. В файле CreateTranscript.java найдите функцию getTranscript() .
Сначала получите путь к аудиофайлу и его размер в байтах:
SpeechClient speech = SpeechClient.create();
Path path = Paths.get(AUDIO_FILENAME);
byte[] data = Files.readAllBytes(path);
ByteString audioBytes = ByteString.copyFrom(data);
Настройка распознавания речи
Далее необходимо корректно инициализировать переменную RecognitionConfig .
В разделе config содержится информация о том, как именно ваш распознаватель речи должен обрабатывать ваш запрос. Вам потребуется отредактировать функцию setLanguageCode() , если, например, ваш аудиофайл записан на языке, отличном от английского, и изменить функцию setSampleRateHertz() если ваш аудиофайл имеет другую частоту дискретизации в Герцах (оптимальная — 1600).
RecognitionConfig config =
RecognitionConfig.newBuilder()
.setEncoding(AudioEncoding.LINEAR16)
.setLanguageCode("en-US")
.setSampleRateHertz(8000)
.build();
RecognitionAudio audio =
RecognitionAudio.newBuilder().setContent(audioBytes).build();
RecognizeResponse response = speech.recognize(config, audio);
List<SpeechRecognitionResult> results = response.getResultsList();
Подготовка текста
Наконец, обработайте переменную, result транскрипции аудиофайла, и подготовьте её к вставке в документ.
Каждый элемент в результатах представляет собой расшифровку текста типа SpeechRecognitionAlternatives . Таким образом, каждый элемент состоит из двух частей: текстовой расшифровки и соответствующего показателя достоверности, полученного с помощью API.
List<Request> requests = new ArrayList<>();
for (SpeechRecognitionResult result : results) {
// Using the first + most likely alternative transcript
SpeechRecognitionAlternative alternative =
result.getAlternativesList().get(0);
String toInsert = alternative.getTranscript();
// Add requests array list to return.
requests.add(
new Request()
.setInsertText(
new InsertTextRequest()
.setText(toInsert)
.setEndOfSegmentLocation(new
EndOfSegmentLocation().setSegmentId(""))));
}
return requests;
7. Вставка текста в документ
Теперь вы вставите текст стенограммы в документ Google Docs. Для внесения изменений в документ вам потребуется использовать метод BatchUpdate . BatchUpdate — это контейнер для различных типов запросов на запись, и здесь вы будете использовать InsertTextRequest .
Параметр EndOfSegmentLocation важен и указывает, где именно в документе вы хотите вывести текст. В исходном коде вы вставляете текст в тело документа.
Давайте вставим приведенный ниже код в вашу функцию, чтобы увидеть, как результаты работы API преобразования речи в текст в сочетании с вызовами API Google Docs позволяют нам вставить расшифровку аудиофайла в документ Google Docs:
BatchUpdateDocumentRequest body = new BatchUpdateDocumentRequest();
service.documents().batchUpdate(docId,
body.setRequests(insertRequests)).execute();
Создание запроса
При выполнении запроса BatchUpdate вы задаете две очень важные спецификации: что вы хотите вывести ( .setText() ), а также где в вашем документе вы хотите это сделать ( .setIndex(1) ).
Теперь вы вставили расшифровку аудиофайла в созданный вами документ.
8. Запуск кода
Теперь, когда у вас есть весь необходимый код для того, чтобы взять аудиофайл, получить его расшифровку и распечатать её в только что созданном документе Google Docs, давайте начнём!
Поскольку вы собираетесь запускать свой Java-код с помощью системы сборки Gradle, вам необходимо указать в файле build.gradle , что именно нужно собрать и запустить. В этом проекте, как и в других, убедитесь, что имя класса mainClassName соответствует тому Java-классу, который вы хотите запустить.
Отлично! Теперь вы готовы запустить свой код. Для этого введите в командную строку следующее:
$ gradle run
Аутентификация конечного пользователя
При первом запуске этого кода в терминале отобразится URL-адрес, предлагающий войти в свою учетную запись службы и авторизовать доступ к Google Docs. После предоставления доступа вы заметите новый файл, сохраненный в вашей директории.
В вашей рабочей директории вы увидите недавно созданную папку с названием tokens , содержащую файл StoredCredential . Это токен аутентификации , который вы только что предоставили, запрошенный вашим клиентом у сервера аутентификации Google, извлеченный из его ответа и теперь отправляемый в любой вызываемый вами API.
Решение
Если ваш код не работает, загляните в файл CreateTranscript.java , расположенный в папке finish . В этом файле содержится весь необходимый код для успешного выполнения.
Теперь давайте посмотрим на результат.
9. Просмотр результатов
Вы только что создали новый документ Google, содержащий расшифровку вашего аудиофайла, давайте посмотрим на него.
Этот документ был создан через учетную запись, для которой конечный пользователь предоставил разрешение. Одним из возможных расширений является возможность автоматического предоставления доступа к этому документу другим пользователям с помощью API Google Диска .
Используя исходный код и предоставленный аудиофайл, вы должны увидеть следующее:

10. Поздравляем!
Теперь вы научились создавать документ Google Docs, обращаться к API преобразования речи в текст и выводить расшифровку аудиофайла в созданный вами документ.
Возможные улучшения
Вот несколько идей о том, как сделать интеграцию более привлекательной:
- Настройте свой код так, чтобы он отслеживал добавление аудиофайла в ваш сегмент Google Cloud Storage Drive, и запускал функцию Google Cloud Function для выполнения этого кода.
- Поэкспериментируйте с вставкой текста в непустой документ Google Docs.
Узнать больше
- Ознакомьтесь с документацией для разработчиков по API Google Docs.
- Задавайте вопросы и находите ответы на Stack Overflow, используя тег google-docs-api.