whisperとgpt4oで音声認識+要約

import openai
import os
from dotenv import load_dotenv
load_dotenv()

# OpenAI APIキーの設定
# 環境変数から読み込むか、直接文字列を入力してください
client = openai.OpenAI(api_key=os.environ.get("OPENAI_API_KEY"))

def process_voice_to_summary(audio_file_path):
    try:
        print("1. 音声ファイルをテキスト化中(Whisper)...")
        # 1. Whisper APIで音声からテキストを抽出
        with open(audio_file_path, "rb") as audio_file:
            transcript = client.audio.transcriptions.create(
                model="whisper-1", 
                file=audio_file
            )
        
        raw_text = transcript.text
        print(f"抽出されたテキスト:\n{raw_text[:100]}...\n")

        print("2. テキストを要約中(GPT)...")
        # 2. GPT APIで要約を生成
        response = client.chat.completions.create(
            model="gpt-4o",  # または "gpt-3.5-turbo"
            messages=[
                {"role": "system", "content": "あなたは優秀な要約アシスタントです。提供された音声書き起こし文から、話し手が最も伝えたい核心的なメッセージを抽出し、簡潔な箇条書きで要約してください。"},
                {"role": "user", "content": f"以下のテキストを要約してください:\n\n{raw_text}"}
            ],
            temperature=0.7
        )

        summary = response.choices[0].message.content
        return raw_text, summary

    except Exception as e:
        return None, str(e)

# 実行部分
if __name__ == "__main__":
    file_path = "voice.mp3"  # ファイル名を指定
    
    # ファイルが存在するか確認
    if os.path.exists(file_path):
        original_text, summarized_text = process_voice_to_summary(file_path)
        
        if original_text:
            print("--- 要約結果 ---")
            print(summarized_text)
        else:
            print(f"エラーが発生しました: {summarized_text}")
    else:
        print("指定された音声ファイルが見つかりません。")

$ python3 app.py
1. 音声ファイルをテキスト化中(Whisper)…
抽出されたテキスト:
おい今月も汗水晒して働いて給料袋を受け取ったか その重みを感じているかそれは単なる紙切れではないお前の時間をお前の命を削って 変えた対価だ だが多くのサラリーマンはこのせっかくの対価をどう使えばいいか…

2. テキストを要約中(GPT)…
— 要約結果 —
– 給料は単なる紙ではなく、働いた時間と命の対価であり、賢く使うべき。
– お金を効果的に使う7つの方法を提案している。
– 自分の体と健康に投資し、知識を増やすために本や経験にお金を使う。
– 後輩や部下に食事を奢ることで信頼を積む。
– 時間を節約するためにお金を使い、時間を有効活用する。
– 身なりに気を使い、第一印象を良くする。
– 家族との時間に投資し、愛を示す。
– 失敗を恐れず挑戦し、経験を得ることにお金を使う。

リアルタイム処理じゃないとそこそこ時間がかかりますね。
要約自体は4oでやれば普通にいい精度が出ます。