通过PHP / cURL发送Base64数据会导致语音转文本仅返回一个空的json字符串?

时间:2018-09-27 17:48:22

标签: php google-cloud-platform speech-to-text google-speech-api

我正在尝试使用PHP将Base64字符串发送到Google的语音文本API。由于烦人的原因,我无法使用composer来获取PHP库,因此我试图通过cURL使用Speech to Text API。

$file = base64_encode( file_get_contents(__DIR__.'/test.ogg') );
$data = array(
  'config' => array(
    "encoding" => 'OGG_OPUS',
    'sampleRateHertz' => 16000,
    "languageCode"=> "en-GB"
  ),
  "audio"=> array (
    "content"=> $file
  )
);

$ch = curl_init("https://speech.googleapis.com/v1/speech:recognize?key=AIzaSyBxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxx");

curl_setopt_array($ch, array(
    CURLOPT_POST => 1,
    CURLOPT_POSTFIELDS => json_encode($data),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 10,
    CURLOPT_HTTPHEADER => array(
        "Content-Type: application/json"
    )
));
$json = curl_exec($ch);

我所知道的:

  • test.ogg是有效的Ogg / Opus文件。
  • API密钥正确
  • 在audio-> uri中使用示例文件可以正常工作。

所以,我希望这是一个简单的问题-我在做什么错了?

2 个答案:

答案 0 :(得分:0)

我获得了您的确切代码,并用PHP 7.1亲自运行了该代码,但从API返回了无效的密钥错误。这表明该代码本身可以正常工作,并且与您的系统,网络或某些配置有关。

关于您可以研究的内容的一些建议;

  • 您是否已正确安装和配置curl扩展?
  • 您可以例如通过PawPostman访问PHP之外的API吗?
  • 您是否尝试过在另一台计算机和另一个网络上测试此代码?

答案 1 :(得分:0)

好的。原来Google API对于Ogg Opus文件确实很挑剔。通过ffmpeg运行文件以将其转换为flac即可对其进行排序。

有些奇怪。 Chrome(Google)创建一个语音转文本系统(Google)无法处理的webm(Google)作品文件。将其转换为API声称可以处理的Ogg Opus文件,并且它会以静默方式失败。将该Ogg Opus转换为flac文件(因此,从有损变为无损,这是很重要的),它突然起作用了。而且效果非常好。

或者将来有人绊倒这个,ffmpeg命令是

key1, key2, key3, key4

这将其设置为16000 bps,但是我一生都无法记住:a的作用。