2017-01-02 27 views
1

短于1分钟的音频文件转录没有问题,但当我尝试转录较长的文件时,Google语音API会返回空响​​应。Google云语音API将不会返回超过1分钟的音频

我让使用下面的命令SOX我的.wav文件:

sox input.flac --channels=1 --bits=16 --rate=16000 --encoding=signed-integer --endian=little output.wav 

的文件播放预期。运行SoXi,我得到以下信息:

Input File  : 'output.wav' 
Channels  : 1 
Sample Rate : 16000 
Precision  : 16-bit 
Duration  : 00:02:35.71 = 2491408 samples ~ 11678.5 CDDA sectors 
File Size  : 4.98M 
Bit Rate  : 256k 
Sample Encoding: 16-bit Signed Integer PCM 

然后我把它上传到我的谷歌存储,因为文件指出,任何文件大于1分钟都必须能驻留在GS桶抄写它的API。

我然后运行下面的代码段以开始转录操作:

use \Google\Cloud\ServiceBuilder; 

$cloud = new ServiceBuilder([ 
    'keyFilePath' => '/var/www/cert/gcloud_key.json', 
    'projectId' => 'm****n-141000' 
]); 

$speech = $cloud->speech(); 

$operation = $speech->beginRecognizeOperation(
    "gs://m****n-141000.appspot.com/output.wav", [ 
    'encoding' => 'LINEAR16', 
    'sampleRate' => 16000 
]); 

$isComplete = $operation->isComplete(); 

while (!$isComplete) { 
    sleep(1); 
    $operation->reload(); 
    $isComplete = $operation->isComplete(); 
} 

var_dump($operation->results()); 

响应回来是空的。完整响应如下所示:

object(stdClass)#27 (4) { 
    ["name"]=> 
    string(19) "1904326252537199795" 
    ["metadata"]=> 
    object(stdClass)#24 (4) { 
    ["@type"]=> 
    string(70) "type.googleapis.com/google.cloud.speech.v1beta1.AsyncRecognizeMetadata" 
    ["progressPercent"]=> 
    int(100) 
    ["startTime"]=> 
    string(27) "2017-01-02T09:36:45.780425Z" 
    ["lastUpdateTime"]=> 
    string(27) "2017-01-02T09:36:46.720260Z" 
    } 
    ["done"]=> 
    bool(true) 
    ["response"]=> 
    object(stdClass)#26 (1) { 
    ["@type"]=> 
    string(70) "type.googleapis.com/google.cloud.speech.v1beta1.AsyncRecognizeResponse" 
    } 
} 

建议请求运行并成功完成,但没有任何实际响应。我哪里错了?

回答

0

在这里看到的文档:https://cloud.google.com/speech/docs/basics

注意,没有结果目前不存在。语音API将继续处理所提供的音频和使用此操作来存储最终的结果,这将在请求完成时(类型AsyncRecognizeResponse)的操作“的应答字段中出现。

我假定有提供一个回调函数来处理包含转录的实际响应的方法

0

Speech API文档(https://cloud.google.com/speech/docs/encoding)表示不支持wav文件,它应该是没有任何头文件的原始文件(带* .raw扩展名)。sox转换应该有“--type = FILETYPE”的定义,但不幸的是我不确定它是否是“--type = raw”或其他东西。

0

您必须通过Google云端存储对象

所以尝试:

use \Google\Cloud\ServiceBuilder; 

$cloud = new ServiceBuilder([ 
    'keyFilePath' => '/var/www/cert/gcloud_key.json', 
    'projectId' => 'm****n-141000' 
]); 

$storage = $cloud->storage(); 
$bucket = $storage->bucket($bucket_name); 
$object = $bucket->object($audio_filename); 

$speech = $cloud->speech(); 

$operation = $speech->beginRecognizeOperation(
    $object, [ 
    'encoding' => 'LINEAR16', 
    'sampleRate' => 16000 
]); 

$isComplete = $operation->isComplete(); 

while (!$isComplete) { 
    sleep(1); 
    $operation->reload(); 
    $isComplete = $operation->isComplete(); 
} 

var_dump($operation->results());