ChatGPTとWhisperで文字起こしアプリをアップデートしたけどさらにアップデートするのでソースを残しておく
みなさん、こんにちは。前回はChatGPTとWhisperを使った会議録の自動生成についてご紹介しました。役立つツールとしてフィードバックをいただきましたが、一方でいくつか改良すべき点も見つけました。今回はそれらのアップデートをご紹介します。
特に、長時間の会議を一つのファイルで処理することが難しかったため、それを改善するために音声ファイルの分割機能を追加しました。また、将来的には話者分離の機能も実装しようと考えています。
ソースコードの更新
まずは更新したapp.pyのソースコードを見てみましょう。
import gradio as gr
import openai
import os
from io import BytesIO
import tempfile
from pydub import AudioSegment
import shutil
def create_meeting_summary(openai_key, prompt, uploaded_audio, max_transcribe_seconds):
openai.api_key = openai_key
# 音声ファイルを開く
audio = AudioSegment.from_file(uploaded_audio)
# 文字起こしする音声データの上限を設定する
if len(audio) > int(max_transcribe_seconds) * 1000:
audio = audio[:int(max_transcribe_seconds) * 1000]
# ファイルサイズを削減するために音声ファイルを圧縮する
compressed_audio = audio.set_frame_rate(16000).set_channels(1)
# 圧縮した音声ファイルをmp3形式で一時ファイルに保存する
with tempfile.NamedTemporaryFile(delete=True, suffix=".mp3") as tmp:
compressed_audio.export(tmp.name, format="mp3")
transcript = openai.Audio.transcribe("whisper-1", open(tmp.name, "rb"), response_format="verbose_json")
transcript_text = ""
for segment in transcript.segments:
transcript_text += f"{segment['text']}\n"
system_template = prompt
completion = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": system_template},
{"role": "user", "content": transcript_text}
]
)
summary = completion.choices[0].message.content
return summary, transcript_text
inputs = [
gr.Textbox(lines=1, label="openai_key", type="password"),
gr.TextArea(label="プロンプト", value="""会議の文字起こしが渡されます。
この会議のサマリーをMarkdown形式で作成してください。サマリーは、以下のような形式で書いてください。
- 会議の目的
- 会議の内容
- 会議の結果"""),
gr.Audio(type="filepath", label="音声ファイルをアップロード"),
gr.Textbox(lines=1, label="最大文字起こし時間(秒)", type="text"),
]
outputs = [
gr.Textbox(label="会議サマリー"),
gr.Textbox(label="文字起こし")
]
app = gr.Interface(
fn=create_meeting_summary,
inputs=inputs,
outputs=outputs,
title="会議サマリー生成アプリ",
description="音声ファイルをアップロードして、会議のサマリーをMarkdown形式で作成します。"
)
app.launch(debug=True)
これらのコードはPythonのGradio、OpenAI、PyDubなどを使っています。必要なライブラリは以下の通りです。(requirements.txt)
codeopenai==0.27.2
まとめ
この改善により、より長い会議録も簡単に文字起こしできるようになりました。これからも更なる改善を目指して進めていきますので、ご意見やフィードバックをお待ちしています。今後のアップデートにご期待ください。
この記事が気に入ったらサポートをしてみませんか?