2017-01-02 26 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());