Я попытался воспроизвести вашу проблему и смог успешно выполнить код и другие примеры из документация. Кроме того, поскольку вы заявили, что изучаете, как использовать Speech to Text API от Google, я опишу шаги, которые я предпринял.
Похоже, вы взяли код из документация. Однако у вас нет первых строк и последних строк кода, которые соответственно определяют метод транскрипции и вызов для его выполнения. По этой причине, когда вы выполняете свой код, нет вызова ни к какому методу, ни к API преобразования речи в текст. Ваш код должен быть следующим:
def speech_sync_recognize audio_file_path: nil
# [START speech_transcribe_sync]
# audio_file_path = "Path to file on which to perform speech recognition"
require "google/cloud/speech"
speech = Google::Cloud::Speech.speech
# [START speech_ruby_migration_sync_response]
audio_file = File.binread audio_file_path
config = { encoding: :LINEAR16,
sample_rate_hertz: 16_000,
language_code: "en-US" }
audio = { content: audio_file }
response = speech.recognize config: config, audio: audio
results = response.results
alternatives = results.first.alternatives
alternatives.each do |alternative|
puts "Transcription: #{alternative.transcript}"
end
# [END speech_ruby_migration_sync_response]
# [END speech_transcribe_sync]
end
if $PROGRAM_NAME == __FILE__
command = ARGV.shift
#I have added this part in order to use a command after to define which method to call within the code.
case command
when "recognize"
speech_sync_recognize audio_file_path: ARGV.first
end
end
И для того, чтобы запустить образец,
bundle exec ruby speech_samples.rb
Обратите внимание на аргумент recognize
, который описывает, какой метод выполнять из кода. В приведенном выше случае есть только один. Однако использование аргументов в вызове очень полезно, когда в коде доступны другие методы для вызова.
Кроме того, я опишу шаги, которые я предпринял для правильного выполнения кода. Я выполнил шаги, описанные здесь,
Я запустил код из Cloud Shell. Однако speech.googleapis.com
не поддерживает аутентификацию конечных пользователей из Cloud Shell. По этой причине я предоставил Service Account Token Creator
из консоли IAM своему пользователю, чтобы я мог выдавать себя за службу Учетная запись и вызов API.
Экспортируйте project_id
в переменную среды, например export GOOGLE_CLOUD_PROJECT="YOUR-PROJECT-ID"
.
Загрузите файл Gemfile. из документации и выполните команду: bundle install
Скопируйте код speech_samples.rb в вашу среду.
Скопируйте путь к файлу в переменную audio_file_path
и раскомментируйте его. Обратите внимание, что будет много audio_file_path
локальных переменных, каждая для определенного метода. В моем случае я скопировал путь только к переменной в первой функции audio_file_path = "home/alex/audio.wav"
.
Обратите внимание, что каждая функция имеет определенный сконфигурированный аргумент (начиная со строки 437). В моем случае я хотел использовать recognize
.
Запустите пример кода с помощью bundle exec ruby speech_samples.rb recognize
.
Проверьте свою среду на наличие нового каталога с именем results
. Затем осмотрите выходы.
Пожалуйста, не забудьте скопировать путь к файлу для всех функций, которые вы будете вызывать, с соответствующими аргументами.
ОБНОВЛЕНИЕ:
Как я упоминал в разделе комментариев, код, которым я поделился выше, является частью файла speech_samples.rb
, который содержит различные примеры функций, вызывающих Speech-To-Text API. В моем случае я просто использовал часть образца, который я вставил выше.
Что касается ссылки, которой вы поделились, есть кнопка для исходного репозитория GitHub для кода, такая же, как и в примере, который я использовал. Обратите внимание, что ваш код в GitHub,здесь он заключен в функцию. Кроме того, эта функция должна быть вызвана для выполнения, вы можете вызвать ее, просто написав ее имя после определения функции. Таким образом, код должен выглядеть следующим образом:
def quickstart
# [START speech_quickstart]
# Imports the Google Cloud client library
# [START speech_ruby_migration_import]
require "google/cloud/speech"
# [END speech_ruby_migration_import]
# Instantiates a client
# [START speech_ruby_migration_client]
speech = Google::Cloud::Speech.speech
# [END speech_ruby_migration_client]
# The name of the audio file to transcribe
file_name = "./resources/brooklyn_bridge.raw"
# [START speech_ruby_migration_sync_request]
# [START speech_ruby_migration_config]
# The raw audio
audio_file = File.binread file_name
# The audio file's encoding and sample rate
config = { encoding: :LINEAR16,
sample_rate_hertz: 16_000,
language_code: "en-US" }
audio = { content: audio_file }
# Detects speech in the audio file
response = speech.recognize config: config, audio: audio
# [END speech_ruby_migration_config]
results = response.results
# [END speech_ruby_migration_sync_request]
# Get first result because we only processed a single audio file
# Each result represents a consecutive portion of the audio
results.first.alternatives.each do |alternatives|
puts "Transcription: #{alternatives.transcript}"
end
# [END speech_quickstart]
end
#call the function defined above
quickstart
ПРИМЕЧАНИЕ. Должен отметить, что я также смог выполнить код из вашего вопроса, не оборачивая его в функцию. Я выполнил шаги, описанные в документации, и успешно получил выходные данные. .
person
Alexandre Moraes
schedule
20.10.2020