LoginSignup
7
7

More than 5 years have passed since last update.

Google Cloud Speech API を使って音声ファイルをバッチ処理で文字化する

Last updated at Posted at 2018-01-29

概要

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した音声を文字化する
7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7