概要
16khz16bitのPCM音声ファイルをGoogle Cloud Speech APIで文字化する方法です。
Google Cloud Speech APIは以下の利用方法があるようです。
① Google Cloud Storage の音声を文字化する方法
② HTTPSでPOSTした音声を文字化する方法
今回はお手軽に利用できるように「②HTTPSでPOSTした音声を文字化する方法」でやってみます
API key の取得とサービスのアクティブ化
上記資料を参考にCloud Speech APIの有効化とAPI keyの取得を行う
※上記資料ではGoogle Cloud Storageの音声を文字化していますが、request.jsonのaudio->url を利用せずにaudio->contentにbase64エンコードした音声データを入れることで、Google Cloud Storage を利用しなくても音声文字化が可能です
サンプルソース
フォルダ内の音声ファイルをBase64エンコードしてGoogle Cloud Speech APIを実行するPHP
<?php
$audioFileFolder = $argv[1];
$audioFiles = array();
foreach(glob($audioFileFolder . '/*') as $file){
if(is_file($file)){
$audioFiles[] = htmlspecialchars($file);
}
}
$jsonArray = array();
$jsonArray["config"]["encoding"] = "LINEAR16";
$jsonArray["config"]["sampleRateHertz"] = 16000;
$jsonArray["config"]["languageCode"] = "ja-JP";
$jsonArray["config"]["enableWordTimeOffsets"] = false;
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "https://speech.googleapis.com/v1/speech:recognize?key=<取得したKey>");
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: application/json"));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, true);
foreach($audioFiles as $audioFile){
$jsonArray["audio"]["content"] = base64_encode(file_get_contents($audioFile));
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($jsonArray));
$response = curl_exec($curl);
$headerSize = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
$header = substr($response, 0, $headerSize);
$body = substr($response, $headerSize);
$result = json_decode($body, true);
echo $audioFile . "\t" . $result["results"][0]["alternatives"][0]["transcript"] . "\n";
}
上記のPHPを実行するsh
#!/bin/bash
php googleCloudSpeechApi.php audio
[おまけ]Google Speech API とGoogle Cloud Speech API
Google Speech APIとGoogle Cloud Speech APIは別物のようです。
Google Speech API
- 研究目的、個人用途
- 利用回数制限あり(1日数百回?)
- 制限に引っかかったらしばらくほっとけば復活(12時間~1日くらい?)
Google Cloud Speech API
- 従量課金
- cloud storage の音声や、HTTPSでPOSTした音声を文字化する