Google Cloud Speech API をPHPで書く

Google Cloud Speech API をPHPで利用するためには、まずGoogle Cloud Platform (GCP) のプロジェクトを作成し、Speech-to-Text APIを有効にする必要があります。また、適切なサービスアカウントを作成し、その認証情報をダウンロードする必要があります。以下は、Google Cloud Speech APIをPHPで使用するための基本的な手順とサンプルコードです。

ステップ 1: GCP の設定

  1. Google Cloud Platform のコンソールにログインします。
  2. 新しいプロジェクトを作成し、選択します。
  3. 「APIとサービス」>「ライブラリ」から Speech-to-Text API を検索し、有効にします。
  4. 「APIとサービス」>「認証情報」で新しいサービスアカウントを作成します。
  5. サービスアカウントに対して新しい秘密鍵を作成し、JSON形式でダウンロードします。

ステップ 2: PHP クライアントライブラリのインストール

Google Cloud Speech APIのPHPクライアントライブラリを使用するために、Composerを使用してインストールします。以下のコマンドを実行します。

composer require google/cloud-speech

ステップ 3: PHP での Speech API の使用

以下は、ローカルの音声ファイルをGoogle Cloud Speech APIに送信し、テキストに変換するPHPスクリプトの例です。

require 'vendor/autoload.php';

use Google\Cloud\Speech\V1\SpeechClient;
use Google\Cloud\Speech\V1\RecognitionConfig\AudioEncoding;

// サービスアカウントの秘密鍵ファイルのパス
putenv('GOOGLE_APPLICATION_CREDENTIALS=/path/to/your/service-account-file.json');

// クライアントのインスタンスを作成
$speechClient = new SpeechClient();

// 音声ファイルの設定
$audioFile = fopen('/path/to/your/audiofile.wav', 'r');
$content = fread($audioFile, filesize('/path/to/your/audiofile.wav'));
fclose($audioFile);

// 設定の構成
$config = (new RecognitionConfig())
    ->setEncoding(AudioEncoding::LINEAR16)
    ->setSampleRateHertz(16000)
    ->setLanguageCode('en-US');

// 音声の認識
$audio = (new RecognitionAudio())->setContent($content);
$response = $speechClient->recognize($config, $audio);

// 結果の表示
foreach ($response->getResults() as $result) {
    $alternatives = $result->getAlternatives();
    $mostLikely = $alternatives[0];
    printf('Transcript: %s' . PHP_EOL, $mostLikely->getTranscript());
}

// リソースの解放
$speechClient->close();

このコードは、指定された音声ファイルを読み込み、Google Cloud Speech APIを使用してテキストに変換し、結果を出力します。サービスアカウントの秘密鍵ファイルのパスと、変換したい音声ファイルのパスを適切に設定してください。

これらの手順に従うことで、PHPを使用してGoogle Cloud Speech APIにアクセスし、音声認識機能を実装することができます。

Webアプリケーションに音声入力の機能を組み込む

Webアプリケーションに音声入力の機能を組み込む場合、ユーザーが音声を録音し、その音声データをサーバーに送信するためのインターフェースが必要です。これには、HTMLとJavaScriptを使用して音声録音ボタンやフォームを作成し、録音された音声をサーバーに送信する機能を実装します。サーバー側では、PHPを使用して受け取った音声データを処理し、必要に応じてGoogle Cloud Speech APIに送信してテキストに変換します。

以下は、音声を録音し、サーバーに送信するための基本的なHTMLとJavaScriptの例です。この例では、MediaRecorder APIを使用してブラウザで音声を録音します。録音された音声は、BlobとしてPHPスクリプトに送信されます。

HTML

<!DOCTYPE html>
<html>
<head>
    <title>音声録音と送信</title>
</head>
<body>
    <button id="startRecord">録音開始</button>
    <button id="stopRecord" disabled>録音停止</button>
    <form id="audioForm" method="post" enctype="multipart/form-data">
        <input type="hidden" name="audioData" id="audioData">
        <input type="submit" value="送信">
    </form>

    <script src="record.js"></script>
</body>
</html>

JavaScript (record.js)

let mediaRecorder;
let audioChunks = [];

document.getElementById("startRecord").onclick = function() {
    navigator.mediaDevices.getUserMedia({ audio: true })
        .then(stream => {
            mediaRecorder = new MediaRecorder(stream);
            mediaRecorder.start();

            mediaRecorder.ondataavailable = function(event) {
                audioChunks.push(event.data);
            };

            mediaRecorder.onstop = function() {
                const audioBlob = new Blob(audioChunks, { 'type' : 'audio/wav; codecs=opus' });
                const formData = new FormData();
                formData.append("audioFile", audioBlob, "recording.wav");

                fetch("upload.php", { method: "POST", body: formData })
                    .then(response => response.text())
                    .then(data => console.log(data))
                    .catch(error => console.error(error));

                audioChunks = [];
            };

            document.getElementById("stopRecord").disabled = false;
        });
};

document.getElementById("stopRecord").onclick = function() {
    mediaRecorder.stop();
    document.getElementById("stopRecord").disabled = true;
};

PHP (upload.php)

<?php

if (isset($_FILES['audioFile']['tmp_name'])) {
    $audioFilePath = "/path/to/save/" . $_FILES['audioFile']['name'];

    // ファイルを保存
    if (move_uploaded_file($_FILES['audioFile']['tmp_name'], $audioFilePath)) {
        echo "ファイルが正常にアップロードされました。";
        // ここでGoogle Cloud Speech APIを呼び出して音声をテキストに変換できます。
    } else {
        echo "ファイルのアップロードに失敗しました。";
    }
} else {
    echo "ファイルが送信されていません。";
}

このコードスニペットは、ブラウザでの音声録音と、録音された音声のサーバーへの送信の基本的な流れを示しています。実際のアプリケーションに組み込む際には、セキュリティ対策(例えば、ユーザー認証やHTTPSを通じた安全なデータ転送)を施すことが重要です。また、Google Cloud Speech APIへの音声データの送信と応答の処理は、上述したPHPコードの例を参考に実装できます。

Bio

田端厚賢

名前:田端厚賢(Atsuyoshi Tabata)

WordPressを中心に企業様から委託を受けてサイトやサーバーの保守・管理、システム開発を行っています。

2024年4月より東大の松尾研でLLLMの開発プロジェクトに参加しています。

プロフィール詳細
Web制作依頼の詳細
お問い合わせはコチラ