简体   繁体   English

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

[英]Google Cloud Speech recognition API (PHP) - file encoding issue

I am playing with google speech recognition API and have some trouble with file encoding. 我正在使用Google语音识别API,并且在文件编码方面遇到了一些麻烦。

Firstly, I tried the API using the Google's HTML form ( https://cloud.google.com/speech-to-text/ ) by file uploading a mp3. 首先,我通过上传mp3文件,使用Google的HTML表单( https://cloud.google.com/speech-to-text/ )尝试了API。 It worked nicely, so I have created a Google Cloud project and tried to do that by API using PHP. 它工作得很好,所以我创建了一个Google Cloud项目,并尝试使用PHP通过API做到这一点。 However, I can't get it to work, it always return empty response. 但是,我无法使其正常工作,它总是返回空响应。

I am using Google's example code: 我正在使用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;
}

When I looked deeper, I noticed, that when I am uploading the mp3 file through the browser, the same file is encoded differently than when using the API. 当我看得更深时,我注意到,当我通过浏览器上传mp3文件时,与使用API​​时相同的文件编码方式有所不同。

These are the first 615 characters of encoded audio data sent to API by browser (working): 这些是浏览器(正在运行)发送给API的编码音频数据的前615个字符:

UklGRiQoEABXQVZFZm10IBAAAAABAAEARKwAAIhYAQACABAAZGF0YQAoEAAFAAQAAgD8//b/8P/q/+r/7P/u//L//f8EAAkAEQAaACMALgA1AD4ATABNAE0AUwBLADoALwAeAAoA/P/o/9n/z/+6/6D/iv9n/zr/FP/z/tv+1/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/g//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 UklGRiQoEABXQVZFZm10IBAAAAABAAEARKwAaihYAQACABAAZGF0YQAoEAAFAAQAAgD8 // b / 8P / q / + r / 7P / u // L // f8EAAkAEQAaACMALgA1AD4ATABNAE0AUwBLADoALwAA / Q / 94 / 6z / 4f8DAAwACADz / 8z / p / + N / 4D / hf + S / 67 / 0P / c / 9b / xf + l / 37 / Xf9Q / 1z / Z / 90 / 5j / wf / g / / 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

And this is made by Google's PHP library (not working): 这是由Google的PHP库(不起作用)完成的:

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

The Google's PHP library is using base64_encode method to format the request, but I don't know what type of encoding uses the browser. Google的PHP库使用base64_encode方法格式化请求,但是我不知道浏览器使用哪种编码类型。

When I modify the Google's PHP libraries and force the API to send the correct data (as was sent by browser), it works and I am getting correct results. 当我修改Google的PHP库并强制API发送正确的数据(如浏览器发送的数据)时,它可以工作,并且得到正确的结果。

So the question is, why is the Google's example not working for me and how to correctly encode the file? 所以问题是,为什么Google的示例对我不起作用,以及如何正确编码文件?

Solved, the file needs to be converted to WAV. 解决后,文件需要转换为WAV。 It's probably happening by javascript when uploading the mp3 by form. 通过表单上传mp3时,可能是JavaScript发生的。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM