今回は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で作成しました。英会話の練習などに応用することができそうです。ぜひカスタマイズなどを試してみてください。