AI関連

【AI入門】PHPでWhisperAPIを利用し音声データを文字起こししてみる(音声認識AI)

こんにちは、石飛です。

今回はOpenAIが提供する音声認識技術のAPI「WhisperAPI」を使い、音声データから文字お起こしをしてみようと思います。

はじめに

以下の条件で実装します。

・言語はPHP(v8系)
・Composer(v2.7.7)はインストール済み
・実行基盤はAWS EC2(Amazon Linux2)※AWS環境の構築は省略
・OpenAIの疎通はできる状態(以下、参考にどうぞ)

実装

GuzzleHTTPをインストール

HTTPリクエスト用のライブラリGuzzleHTTPをインストールします。

$ composer require guzzlehttp/guzzle

実装

以下ソースです。
叩き台となるソースはChatGPTで作成しています。

<?php
require 'vendor/autoload.php'; 

use GuzzleHttp\Client; 

function transcribeAudioWithGuzzle($apiKey, $filePath) { 
  // Guzzleクライアントを作成 
  $client = new Client([ 
   'base_uri' => 'https://api.openai.com/v1/', 
   'headers' => [ 
    'Authorization' => 'Bearer ' . $apiKey, 
   ], 
  ]); 

  try { 
    // Whisper APIへのPOSTリクエストを送信 
    $response = $client->request('POST', 'audio/transcriptions', [ 
      'multipart' => [ 
        [ 
          'name' => 'file', 
          'contents' => fopen($filePath, 'r'), 
          'filename' => basename($filePath) 
        ], 
        [ 
          'name' => 'model',
          'contents' => 'whisper-1'
        ], 
        [  
          'name' => 'response_format',
          'contents' => 'text'
        ], 
      ], 
    ]); 

    // レスポンスのボディを取得して表示 
    $body = $response->getBody();
    
    return $body;
  } catch (\Exception $e) {
    // エラーメッセージ
    return 'Error: ' . $e->getMessage();
  }
}

// APIキーと音声ファイルのパスを設定
$apiKey = 'XXXXXX'; // ※普段使っているOpenAIのAPIキーで問題ない
$filePath = '/XXXX/XXXX/xxxx.mp3'; // ※任意の箇所に置いた音声データ

// 関数を呼び出して結果を表示
$response = transcribeAudioWithGuzzle($apiKey, $filePath);
echo "Transcription Result: " . $response;

上記、$apiKey はOpenAIで発行されたAPIキーを、$filePath は文字起こししたい音声データを配置してください。音声データは.mp3を以下よりダウンロードして使っています。

※今回使った音声データがあるサイト
https://pro-video.jp/voice/announce/
このサイトの以下「G-01」の音声をダウンロードして使っています。

各ファイルは以下のように設置しています。

挙動確認

実行し挙動確認しようと思います。
まず、先ほどの「今回使った音声データがあるサイト」で「G-01」を再生してみてください。
石鹸のCMのようなナレーションだったと思います。

そして、excute.phpを実行します。
(すみません、ファイル名のスペルが違いました(笑))

$ php excute.php

結果確認すると…

期待通り文字お起こしに成功しています。

まとめ

いかがでしたでしょうか?
ナレーションがプロの方なので精度高く文字お起こしができていますが、ぼそぼそ声だったりするとどの程度の精度になるか気になります。

なので次回は恐らくですが、、、
①マイクから任意の音声入力(何かしら質問する)
②WhisperAPIを経由してChatGPTに回答してもらう
③返却値をWhisperAPIで実際の音声で読み上げてもらう
を他のサイトを参考に試してみたいと思います。

ABOUT ME
代表取締役CEO 石飛 貴彦
スカイブルーデジタル代表取締役CEOの石飛 貴彦と申します!

IT・DX関連の話をするときは、どなたにもわかりやすく伝えれるよう心がけています。

【保有資格】
DXアドバイザー検定スペシャリスト

趣味は漫画、猫と遊ぶ、サッカー観戦。

一緒に働いてくれる熱い仲間を常時募集中!