0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

音声文字起こしと応答生成ボットの作成

Last updated at Posted at 2024-09-12

イントロ

こんにちは!
今回は、音声を文字起こしし、GPT-3.5を使用して応答を生成し、その応答を音声に変換するPythonベースのボットの作成方法をご紹介します。
このボットは、インタラクティブな音声ベースのアプリケーションを作成するのに役立ちます。

Github

音声文字起こしと音声対話ボット

機能

このボットには以下の機能があります:

  • マイクから音声入力を記録
  • OpenAIのWhisperモデルを使用して音声をテキストに変換
  • GPT-3.5を使用してテキスト応答を生成
  • 生成されたテキストを音声に変換
  • 変換した音声を再生

必要なもの

  • Python 3.9.19
  • OpenAI APIキー

インストール手順

1. リポジトリのクローン

まず、リポジトリをクローンします。

git clone https://github.com/yayoi-exe/audio-chat-bot.git

フォルダに移動します。

cd audio-chat-bot

2. 必要なパッケージをインストール

次に、必要なPythonパッケージをインストールします。

pip install -r requirements.txt

3. OpenAI APIキーの設定

OpenAI APIキーを設定するために、プロジェクトのルートディレクトリに .env ファイルを作成し、以下のようにAPIキーを追加します。

OPENAI_API_KEY="your_openai_api_key_here"

プログラムの説明

1. メインスクリプトの実行

以下のコマンドでメインスクリプトを実行します。

python main.py

2. 音声の記録と応答の生成

スクリプトを実行すると、以下のメッセージが表示されます:

Press Enter to start/stop recording or 'q' to quit...
  • Enterキーを押すと録音が開始されます。
  • 再度Enterキーを押すと録音が停止され、音声ファイルが保存されます。
  • 録音が停止すると、音声がテキストに変換され、GPT-3.5を使用して応答が生成されます。
  • 生成された応答は音声に変換され、再生されます。
  • 終了したい場合は、q を入力してください。

プログラムの詳細

音声の録音

sd.InputStream を使用して音声を録音します。
録音データはキューに保存され、別のスレッドでファイルに書き込まれます。

with sd.InputStream(
    callback=lambda indata,
    frames,
    time,
    status: audio_callback(indata, frames, time, status, q),
    channels=1,
    samplerate=sample_rate,
    dtype='int16'
):
    # 録音処理

音声の文字起こし

録音された音声ファイルをOpenAIのWhisperモデルを使用して文字起こしします。

def transcribe_audio(filename):
    try:
        with open(filename, "rb") as audio_file:
            transcription = openai.audio.transcriptions.create(
                model="whisper-1",
                file=audio_file
            )
        return transcription.text
    except Exception as e:
        print(f"Error transcribing audio: {e}")
        return None

応答の生成

文字起こしされたテキストをGPT-3.5を使用して応答を生成します。

def generate_response(prompt):
    try:
        response = openai.chat.completions.create(
            model="gpt-3.5-turbo",
            messages=[
                {"role": "system", "content": "短文で会話を続けてください。"},
                {"role": "user", "content": prompt},
            ],
            max_tokens=50
        )
        return response.choices[0].message.content
    except Exception as e:
        print(f"Error generating response: {e}")
        return None

テキストの音声変換

生成されたテキストを音声に変換します。

def text_to_speech(speech_file_path, text):
    try:
        with openai.audio.speech.with_streaming_response.create(
            model="tts-1",
            voice="alloy",
            input=text
        ) as response:
            response.stream_to_file(speech_file_path)
    except Exception as e:
        print(f"Error converting text to speech: {e}")

音声の再生

生成された音声ファイルを再生します。

try:
    data, samplerate = sf.read(speech_file_path)
    sd.play(data, samplerate=samplerate)
    sd.wait()
    print("Speaking...")
except Exception as e:
    print(f"Error playing speech: {e}")

プロジェクト構成

プロジェクトのディレクトリ構成は以下の通りです:

  • main.py: ボットを実行するメインスクリプト
  • .env: 主にOpenAI APIキーを保存するための環境変数ファイル
  • requirements.txt: 必要なPythonパッケージのリスト

エラーハンドリング

このスクリプトには、以下のような問題を管理するための包括的なエラーハンドリングが含まれています:

  • 不足または無効なAPIキー
  • 音声記録エラー
  • APIコール失敗
  • ファイルの読み書きエラー

まとめ

このボットを使って、音声ベースのインタラクティブなアプリケーションを簡単に作成してみてください。
ご質問やフィードバックがあれば、コメントでお知らせください!

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?