【ChatGPT】WhisperAPIでAIと音声会話できるPythonアプリを作る

今回はChatGPTとWhisperのAPIを利用して、AI(ChatGPT)と音声で会話できるアプリをPythonで作成してみます。

大まかな手順

①gradioで音声入力・出力のインターフェースを作る

gradioはPythonプログラムにおいて、機械学習のモデルの出力結果を簡単にWebアプリケーションにすることができるライブラリです。

②Whisperで発言を文字起こし

WhisperAPIを使用して、音声を文字起こしします。

③ChatGPTで発言から返答を得る

ChatGPTのAPIを使用して、文字起こしした発言から返答を得ます。

④gTTSで返答を音声にする

gTTSを使用して、返答された文章を音声に変換します。

gTTSとは「Google Text To Speach」の略です。

⑤Pydubで速度調整

Pydubは、Pythonで音声ファイルを編集するためのオープンソースのライブラリです。

自然な会話のスピードになるように調整します。

Whisperとは

Whisperの概要

音声ファイルから非常に高い精度で文字起こしができる、音声認識AIになっています。

APIを使用して音声データを送るだけで文字起こしの結果を返してくれます。

WhisperAPIの料金体系

1分=0.006ドル(0.8円)

10分だと8円です。

OpenAIのアカウントを作成すると18ドルの無料枠があります。

個人利用する際にはこちらで十分でしょう。

WhisperAPIの取得方法

ChatGPTのAPIキーと同様です。

まだ作成されていない方はこちらから「Create new secret key」をクリックしてAPIキーを作成してください。

実際に対話アプリを作ってみる

準備

まずは必要なライブラリをインストールしてください。

pip install openai gradio gtts pydub

環境によってはffmpegのインストールが必要です。

こちらはpydubがオーディオファイルを処理するために必要なものとなっています。

Macの場合、Homebrewを使用するのが最も簡単です。まだインストールしていない場合は、Homebrewの公式サイトからインストールしてください。次に、ターミナルで以下のコマンドを実行してffmpegをインストールします。

brew install ffmpeg

Windowsの場合は、公式のFFmpegダウンロードページからWindowsビルドをダウンロードしてインストールしてください。また、FFmpegの実行ファイルが含まれるディレクトリ(binディレクトリ)をシステムのPATHに追加する必要があります。

Linuxの場合、ディストリビューションに応じたパッケージマネージャを使用してffmpegをインストールします。たとえば、Ubuntuを使用している場合は、次のコマンドを実行します。

sudo apt-get update
sudo apt-get install ffmpeg

プログラムを書く

このようなコードになりました。

実行する際はAPIキーの入力を忘れないでください。

必要に応じて音声のスピードや会話の設定を変更してみてください。

import openai
import gradio as gr
from gtts import gTTS
from pydub import AudioSegment
from pydub.playback import play
import io

# Whisper APIのAPIキーを設定
openai.api_key = "ここにAPIキーを入れてください"

# ChatGPTによる会話の関数
def chat(input_text):
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=[
                {'role': 'system', 'content': 'あなたは私の友達です。あまり知識を持っていないです。返答は必ず20文字以内で短く答えてください。'},
                # ここで設定(会話相手の人格など)を変更できます。
                {"role": "user", "content":input_text}
                # ここにユーザーの発言が入ります。
                ],
                temperature=0.0,
                # 創造性を調整します。1.0が上限です。

    )
    return response["choices"][0]["message"]["content"]

# 音声からテキストへの変換関数
def speech_to_text(input_audio):
    audio_file = open(input_audio, "rb")
    response = openai.Audio.transcribe(
        "whisper-1", audio_file
    )
    return response["text"]

# テキストから音声への変換関数
def text_to_speech(input_text):
    tts = gTTS(text=input_text, lang="ja")
    # テキストから音声に変換
    tts.save("sample.mp3") 
    # 音声ファイルに保存
    sound = AudioSegment.from_mp3("sample.mp3")
    sound_speedup = sound.speedup(playback_speed=1.5)
    # 読み上げスピードを上げる
    sound_speedup.export("sample.mp3", format="mp3")
    return "sample.mp3"

# 音声会話アプリの関数(今までの関数の組み合わせ)
def voice_chat(input_audio):
    text = speech_to_text(input_audio)
    # 音声をテキストに
    response_text = chat(text)
    # テキストから返答を生成
    response_audio = text_to_speech(response_text)
    # 返答を音声に
    return response_audio

# Gradioインターフェース
gr.Interface(
    fn=voice_chat,
    inputs=gr.components.Audio(source="microphone",type="filepath"),
    outputs=gr.components.Audio(type="numpy"),
    examples=[],
).launch()

必要に応じてChatGPTの役割などを変更してみてください。

実行結果

コードをファイルに保存して実行すると、ターミナルにURLが表示されるのでクリックしてUIを表示してください。

「Record from microphone」をクリックして、話し終わったら「Stop recording」を押してから送信しましょう。

処理が完了すると返答が再生できるようになります。

まとめ

今回はChatGPTとWhisperのAPIを利用して、ChatGPTと音声で会話できるアプリをPythonで作成しました。英会話の練習などに応用することができそうです。ぜひカスタマイズなどを試してみてください。