验证并使用Google Cloud Speech API

时间:2018-01-05 01:08:36

标签: php google-cloud-platform google-cloud-speech

我正在尝试创建一个PHP应用程序,我可以将.flac文件发送到谷歌语音服务并获得文本作为回报。

关注official guide

这是验证码:

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'   消息' {"错误":{"代码":401,"消息":"请求已   验证凭据无效。预期的OAuth 2访问令牌,   登录cookie或其他有效的身份验证凭据。看到   https://developers.google.com/identity/sign-in/web/devconsole-project。&#34 ;,   " status":" UNAUTHENTICATED" }}

我只是想做一个简单的查询。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

试试这个:

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";
}

你提出了关于文档的一个好点。过去几个月的变化导致了这种有些令人困惑的情况,并且值得用另一种方式来澄清事情。我已创建issue来解决此问题。

ServiceBuilder是一个提供工厂的类,允许您配置一次Google Cloud PHP并创建继承该配置的不同客户端(例如语音或数据存储)。 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'
]);

答案 1 :(得分:0)

或者,您可以在使用api之前先调用 putenv

/** Setting Up Authentication. */
$key_path = '/full/path/to/key-file.json';
putenv( 'GOOGLE_APPLICATION_CREDENTIALS=' . $key_path );