1. Обзор
В этой лабораторной работе вы узнаете, как отправить аудиофайл через Google Cloud Speech to Text API , а затем вывести расшифровку в документ Google. API речи в текст прост в использовании и использует мощные нейронные сети, позволяющие разработчикам преобразовывать звук в текст! Кроме того, он основан на машинном обучении.
Вы будете использовать API Документов Google для создания и записи нового документа. Вы создадите приложение командной строки Java и запустите свой код с помощью системы сборки Gradle, а затем воспользуетесь API Docs для просмотра результатов.
Что вы узнаете
- Как использовать Google Cloud Speech to Text API
- Как использовать API Документов Google для создания нового документа
- Как использовать API Документов для записи в документ
Что вам понадобится
- Установлена Java (версия 7 или выше)
- Установлен Gradle (версия 5 или выше)
- Доступ к Интернету и веб-браузеру
- Аккаунт Google
- Проект облачной платформы Google
2. Настройте свой проект
Создайте свой облачный проект
- Войдите в Cloud Console и создайте новый проект или повторно используйте существующий. (Если у вас еще нет учетной записи Gmail или Workspace, вам необходимо ее создать .)
Запомните идентификатор проекта — уникальное имя для всех проектов Google Cloud (имя, указанное выше, уже занято и не подойдет вам, извините!). Позже в этой лаборатории он будет называться PROJECT_ID
.
- Далее вам необходимо включить биллинг в Cloud Console, чтобы использовать ресурсы Google Cloud.
Прохождение этой лаборатории кода не должно стоить много, если вообще стоит. Обязательно следуйте всем инструкциям в разделе «Очистка», в которых рассказывается, как отключить ресурсы, чтобы вам не приходилось нести расходы, выходящие за рамки этого руководства. Новые пользователи Google Cloud имеют право на участие в программе бесплатной пробной версии стоимостью 300 долларов США .
Получите ключ сервисного аккаунта для API Cloud Speech-to-Text.
- Перейдите в консоль 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
внутри начального каталога. Файлы 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 OAuth 2.0 Google API .
Например, если вы не писали в документ Google, вы можете изменить область действия на DOCUMENTS_READONLY
. Переменная SCOPES
необходима не только для того, чтобы ваше приложение имело надлежащие права доступа, но и для обеспечения прозрачности для пользователей. Пользователю отображаются конкретные области, которые вы запрашиваете, на странице проверки OAuth, где он должен дать согласие на использование приложения.
Переименовать переменные
Убедитесь, что указанные выше переменные объявлены правильно для вашего проекта.
- Убедитесь, что для параметра AUDIO_FILENAME задано имя демонстрационного файла, который вы отправляете в API речи в текст. В файле CreateTranscript.java вы уже должны видеть, что он настроен правильно.
- Переименуйте CREDENTIALS_FILE_PATH в имя загруженного файла учетных данных (должно быть «/credentials.json
credentials.json'
). Убедитесь, что этот файл находится внутри каталогаsrc/main/resources
вашей папки, поэтому обязательно создайте этот каталог, если клонирование GitHub не поможет вам.
Теперь вы можете приступить к запуску своего кода!
4. Инициализируйте клиент Документов
В файле CreateTranscript.java найдите объявление основного метода и взгляните на то, что находится внутри:
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 Документов, должна будет использовать эту service
переменную для выполнения задач, связанных с Документами.
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 Doc. Этот же идентификатор можно найти в 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. Чтобы внести какие-либо изменения в документ, вам потребуется использовать метод BatchUpdate
. BatchUpdate
— это контейнер для различных типов запросов на запись, и здесь вы будете использовать InsertTextRequest
.
EndOfSegmentLocation
— это важный параметр, который указывает, где в вашем документе вы хотите напечатать текст. В исходном коде вы вставляете текст в тело документа.
Давайте вставим приведенный ниже код в вашу функцию, чтобы увидеть, как результаты вашего API преобразования речи в текст в сочетании с вызовами API Документов могут позволить нам вставить расшифровку аудиофайла в Документ Google:
BatchUpdateDocumentRequest body = new BatchUpdateDocumentRequest();
service.documents().batchUpdate(docId,
body.setRequests(insertRequests)).execute();
Создание запроса
Делая запрос BatchUpdate, вы задаете две очень важные спецификации: что вы хотите напечатать ( .setText()
), а также где в вашем документе вы хотите это сделать ( .setIndex(1)
).
Теперь вы вставили расшифровку аудиофайла в созданный документ.
8. Запуск кода
Теперь, когда у вас есть весь код, необходимый для того, чтобы взять аудиофайл, получить его расшифровку и распечатать ее в новом документе Google, давайте приступим к реализации этого шоу!
Поскольку вы собираетесь запускать свой Java-код с помощью системы сборки gradle, вам нужно указать файлу build.gradle , что именно собирать и запускать. В этом и других проектах убедитесь, что mainClassName
соответствует тому классу Java, который вы хотите запустить.
Большой! Теперь вы готовы запустить свой код. Для этого введите в командную строку следующее:
$ gradle run
Аутентификация конечного пользователя
При первом запуске этого кода вы увидите, что в терминале будет напечатан URL-адрес с просьбой войти в свою учетную запись службы и авторизовать доступ к ее Документам Google. После разрешения доступа вы заметите новый файл, хранящийся в вашем каталоге.
Внутри вашего рабочего каталога вы увидите недавно созданную папку под названием tokens , содержащую файл StoredCredential . Это только что предоставленный вами токен аутентификации , который ваш клиент запросил у сервера Google Auth, извлек из его ответа и теперь отправит через любой API, который вы вызываете.
Решение
Если ваш код не работает, загляните в файл CreateTranscript.java внутри папки завершения . Этот файл содержит весь ваш код именно таким, каким он должен быть для успешной работы.
Теперь посмотрим на результат.
9. Просмотр результатов
Вы только что создали новый документ Google, содержащий расшифровку вашего аудиофайла, поэтому давайте взглянем на него.
Этот документ был создан через учетную запись, с помощью которой конечный пользователь предоставил авторизацию. Одним из возможных расширений является то, что вы можете автоматически делиться этим документом с другими с помощью Drive API .
Используя исходный код и предоставленный аудиофайл, вы должны увидеть вот что:
10. Поздравляем!
Теперь вы узнали, как создать документ Google, выполнить вызов API преобразования речи в текст и вывести расшифровку аудиофайла в созданный документ.
Возможные улучшения
Вот несколько идей о том, как сделать интеграцию более привлекательной:
- Настройте свой код для прослушивания, когда аудиофайл был добавлен в ваш диск сегмента Google Cloud Storage, и активируйте функцию Google Cloud для выполнения этого кода.
- Поэкспериментируйте со вставкой непустого текста в Google Doc.
Узнать больше
- Прочтите документацию для разработчиков API Документов Google.
- Задавайте вопросы и ищите ответы на Stack Overflow под тегом google-docs-api.