我正在尝试创建一个PHP应用程序,我可以将.flac文件发送到谷歌语音服务并获得文本作为回报。
这是验证码:
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" }}
我只是想做一个简单的查询。任何帮助将不胜感激。
答案 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 );