Google Cloud语音识别API(PHP)-文件编码问题

时间:2018-07-27 13:39:57

标签: php google-api cloud

我正在使用Google语音识别API,并且在文件编码方面遇到了一些麻烦。

首先,我通过Google的HTML格式(https://cloud.google.com/speech-to-text/)通过上传mp3文件来尝试API。它工作得很好,所以我创建了一个Google Cloud项目,并尝试使用PHP通过API做到这一点。但是,我无法使其正常工作,它总是返回空响应。

我正在使用Google的示例代码:

$projectId = 'xx';

# Instantiates a client
$speech = new SpeechClient([
    'projectId' => $projectId,
    'languageCode' => 'sk-SK',
]);

# The name of the audio file to transcribe
$fileName = 'D:\ts\all.mp3';

# The audio file's encoding and sample rate
$options = [
    'encoding' => 'LINEAR16',
    'model' => 'default',
    'sampleRateHertz' => 44100,
];

# Detects speech in the audio file
$results = $speech->recognize(fopen($fileName, 'r'), $options);

var_dump($results); // array(0)

foreach ($results as $result) {
    echo 'Transcription: ' . $result->alternatives()[0]['transcript'] . PHP_EOL;
}

当我看得更深时,我注意到,当我通过浏览器上传mp3文件时,与使用API​​时相同的文件编码方式有所不同。

以下是浏览器(正在运行)发送给API的编码音频数据的前615个字符:

  

UklGRiQoEABXQVZFZm10IBAAAAABAAEARKwAAIhYAQACABAAZGF0YQAoEAAFAAQAAgD8 // b / 8P / q / + r / 7P / u // L // f8EAAkAEQAaACMALgA1AD4ATABnE / AU / FP / A9w / AFP / A9w / FP9A 7p / g7 / Q / 94 / 6z / 4f8DAAwACADz / 8z / p / + N / 4D / hf + S / 67 / 0P / c / 9b / xf + l / 37 / Xf9Q / 1z / Z / 90 / 5j / wf /克// P // f8QACgAJwA4AF4AfgCmAMoA0ADBAHgA + / + B / + J + Mv6x / VD9 // ZL / Nj80fzd / ML8N / YH / IT8Yfx9 / LT8E / 2Y / W3 + Vf9dAEUBFwLHAjMDfQO8A / MDMwRoBJwEzgTLBJ8EYwQMBLgDbQM5A0wDZQNPA0MDLwPyAq0CTQL3Ad8BugGPAZoBkQFVAf0AfAAAAIj / 6P54 / MH + ZF5 + / QL + yv4I / yH / Dv8T / y7 / VP + R / + P / VwDNABUBSAFqAWUBQAH + ALYAcAAmAAoACADj / 9X / 3P + 6 / 4b / SP / 7 / r3 + Z / 4W / gL + 5P28 / dD98 / 0P / kL + gf7M / gD / Bv8P // X + nv5E / tv9eP1D / RP9Cv08 / V79jf3o / Sf

这是由Google的PHP库(不起作用)完成的:

  

SUQzBAAAAAABClRYWFgAAAASAAADbWFqb3JfYnJhbmQAaXNvbQBUWFhYAAAAEwAAA21pbm9yX3ZlcnNpb24ANTEyAFRYWFgAAAAkAAADY29tcGF0aWJsZV9icmFuZHMAaXNvbWlzbzJhdmMxbXA0MQBUU1NFAAAADwAAA0xhdmY1OC4xNy4xMDEAAAAAAAAAAAAAAP / 7UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEluZm8AAAAPAAABzQAC8XcAAwUICw0PExUXGh0fISQnKSwuMTQ2ODs + QEJGSEpNUFJUV1pcX2FkZ2lrbnFzdXl7fYCDhYeKjY + SlJeanJ6hpKaorK6wtLa4ur3AwsXHys3P0dTX2dvf4ePn6evt8fP1 + Pv9AAAAAExhdmM1OC4yMQAAAAAAAAAAAAAAACQEQAAAAAAAAvF3QasUAQAAAAAAAAAAAAAAAAAAAAD / + + 5BkAAAC xrGhWMAAAAADSCgAAEbxZlRuYwAEAAANIMAAACKNzL / lp0F4GTkLOAIBnGAjoLsTctnbL2xAAh3udXmkKV8XqUkofxnbO3fo4gwxdjqQGoAoI1x / HYaw1yTMrLkIONMqw2

Google的PHP库正在使用base64_encode方法格式化请求,但是我不知道浏览器使用哪种编码类型。

当我修改Google的PHP库并强制API发送正确的数据(如浏览器发送的数据)时,它可以工作,并且我得到正确的结果。

问题是,为什么Google的示例对我不起作用?如何正确编码文件?

1 个答案:

答案 0 :(得分:0)

已解决,该文件需要转换为WAV。通过表单上传mp3时,可能是JavaScript发生的。