Я пытаюсь создать приложение PHP, с помощью которого я могу отправить файл .flac в речевой сервис Google и получить текст взамен.
После официальный гид
Это код аутентификации:
require 'vendor/autoload.php';
use Google\Cloud\Core\ServiceBuilder;
// Authenticate using keyfile data
$cloud = new ServiceBuilder([
'keyFile' => json_decode(file_get_contents('b.json'), true)
]);
Тогда это речевой код:
use Google\Cloud\Speech\SpeechClient;
$speech = new SpeechClient([
'languageCode' => 'en-US'
]);
// Recognize the speech in an audio file.
$results = $speech->recognize(
fopen(__DIR__ . '/audio_sample.flac', 'r')
);
foreach ($results as $result) {
echo $result->topAlternative()['transcript'] . "\n";
}
Конечно, переменная $ cloud никогда не используется. Куда это должно идти?
Я его запустил тем не менее получил
Неопределенное исключение «Google \ Cloud \ Core \ Exception \ ServiceException»
с сообщением ‘{«error»: {«code»: 401, «message»: «запрос был
неверные учетные данные для аутентификации. Ожидаемый токен доступа OAuth 2,
cookie для входа в систему или другие действительные учетные данные для аутентификации. Увидеть
https://developers.google.com/identity/sign-in/web/devconsole-project.»,
«status»: «UNAUTHENTICATED»}}
Я просто хочу сделать простой запрос. Любая помощь будет оценена.
Попробуй это:
use Google\Cloud\Speech\SpeechClient;
$speech = new SpeechClient([
'languageCode' => 'en-US',
'keyFile' => json_decode(file_get_contents('b.json'), true)
]);
// Recognize the speech in an audio file.
$results = $speech->recognize(
fopen(__DIR__ . '/audio_sample.flac', 'r')
);
foreach ($results as $result) {
echo $result->topAlternative()['transcript'] . "\n";
}
Вы подняли хороший вопрос относительно документации. Изменения за последние несколько месяцев вызвали эту несколько запутанную ситуацию, и она заслуживает другого взгляда, чтобы прояснить ситуацию. Я создал вопрос чтобы решить это.
ServiceBuilder
это класс, который предоставляет фабрики, позволяющие вам настраивать Google Cloud PHP один раз и создавать разных клиентов (таких как Speech или Datastore), которые наследуют эту конфигурацию. Все варианты на ServiceBuilder::__construct()
также доступны в самих клиентах, таких как SpeechClient
с несколькими исключениями.
Если вы хотите использовать ServiceBuilder, вы можете сделать что-то вроде этого:
use Google\Cloud\Core\ServiceBuilder;
$cloud = new ServiceBuilder([
'keyFile' => json_decode(file_get_contents('b.json'), true)
]);
$speech = $cloud->speech([
'languageCode' => 'en-us'
]);
Других решений пока нет …