👻

Streamlit と Whisper で簡単文字起こしアプリ作ってみた

2023/12/20に公開

cover

はじめに

皆さん、こんにちは!今日は、「音声ファイルから手軽に文字起こしできるアプリ」を作るというものです。

というのも、先日社内で 30 分程度の会議の録画動画を文字起こしする業務を頼まれたのですが、議事録の作成って、思った以上に時間がかかるんですよね。そこで簡単に文字起こしできる方法を調べて Google ドキュメントの音声入力機能を試してみたのですが、期待したほどの精度は得られず、結局 4 割くらいは手作業で行いました。こんな経験、いろんな人がしているんじゃないでしょうか?

frustrated man

そこで前々から気になっていた OpenAI の Whisper を使って、音声から文字起こしする機能作ってみたらどれくらい使えるんだろうと思い、今回の記事のテーマにしてみました。

この記事を通じて、議事録作成に苦労されている方々に、Whisper と Streamlit を使ったアプリ開発の魅力をお伝えできればと思います。手軽に試せる技術で日常の作業を効率化する楽しさを、皆さんにも感じていただけたら嬉しいです。

https://zenn.dev/kanaotto/articles/f515309f1582be

Whisper(OpenAI API)とは

https://openai.com/research/whisper

「Whisper」とは、OpenAI によって開発された革新的な音声認識技術です。この技術の最大の特徴は、その驚異的な精度と多言語対応能力にあります。Whisper は、日本語を含む多くの言語での音声をテキストに変換することが可能で、さまざまなアクセントや方言にも対応しています。

この技術は、特に音声をテキストに変換する際の正確性に優れており、バックグラウンドノイズが存在する環境下でも高い認識精度を保ちます。このため、会議やセミナーなど、さまざまな状況での議事録作成に非常に有効です。

Whisper を使用することで、従来の手作業に頼っていた議事録作成のプロセスを大幅に効率化できます。また、その多言語対応能力は、国際的なビジネスシーンにおいても大きな利点となり得ます。このように、Whisper は音声からテキストへの変換をシンプルかつ高効率に行うことを可能にします。

Streamlit とは

https://streamlit.io/

次に紹介するのは「Streamlit」です。これは、Python で簡単かつ迅速に Web アプリケーションを開発できるオープンソースのフレームワークです。特に、データサイエンスや機械学習のプロジェクトにおいて、その効果を発揮します。

Streamlit の大きな魅力は、そのシンプルさにあります。複雑なフロントエンドの知識がなくても、わずかな Python コードでインタラクティブな Web アプリを作成できる点が特筆されます。データの可視化やユーザー入力の処理を簡単に組み込めるため、データ駆動型のアプリケーションを手早く構築できるのです。

さらに、Streamlit は迅速なプロトタイピングに最適です。短時間でアイデアを形にし、フィードバックを受けながら改善を重ねることが可能。この柔軟性は、開発のスピードと効率を大きく向上させます。

このプロジェクトでは、Whisper で得たテキストデータを利用し、Streamlit を通じて使いやすいアプリケーションに仕上げることを目指します。技術的な深い知識がなくても、Streamlit を用いれば、直感的かつ迅速にアプリを開発することができるのです。

Whisper で文字起こししてみる

ステップ 1: 事前準備

必要なライブラリをインストール

pip install openai
pip install streamlit
pip install langchain
pip install python-dotenv

OpenAI API キーの取得

OpenAI のウェブサイトにアクセスし、API キーを取得します。OpenAI のアカウントを持っていない場合は、アカウントを作成し、API キーを生成する必要があります。API キーは、アプリケーションから OpenAI のサービスにアクセスするための重要な認証情報です。

環境変数への API キーの設定

API キーは環境変数として保存することを推奨します。これにより、コード内に直接キーを記述するリスクを避けることができます。以下のコマンドを使用して、API キーを環境変数に設定します。

  1. プロジェクトのルートディレクトリに .env ファイルを作成します。
  2. .env ファイルに API キーを次の形式で保存します。
OPENAI_API_KEY=your_api_key_here

それでは、実際に手を動かしながら試してみましょう。ここでは、基本的な文字起こしのプロセスと、それを実行するためのサンプルコードをご紹介します

ステップ 2: 音声ファイルの準備

まず、文字起こしを行いたい音声ファイルを準備します。これは会議の録音やインタビューなど、任意の音声を含むファイルで構いません。ファイルは.wav、.mp3 などの一般的な音声形式である必要があります。

今回はこちらの「あみたろの声素材工房」から、留守番電話の音声をお借りしました。

https://amitaro.net/voice/voice_dl/

ステップ 3: 文字起こしの実行

次に、準備した音声ファイルを Whisper に送信し、文字起こしを行います。以下のコードは、音声ファイルを読み込み、テキストへの変換を行う簡単な例です。

https://platform.openai.com/docs/guides/speech-to-text/speech-to-text

test_whisper.py
import os

from dotenv import load_dotenv
from openai import OpenAI

load_dotenv()  # .env から環境変数を読み込む

# 環境変数からAPIキーを読み込む
api_key = os.getenv("OPENAI_API_KEY")

client = OpenAI(api_key=api_key)

audio_file = open("../audio/rusuden_04.wav", "rb")
transcript = client.audio.transcriptions.create(
    model="whisper-1", file=audio_file, response_format="text"
)

print(transcript)

このコードを実行すると、指定した音声ファイルの内容がテキストに変換され、コンソールに出力されます。

お電話ありがとうございます 大変申し訳ございませんが本日の営業はすべて終了させていただきました またのお電話をお待ちしております

この簡単なハンズオンを通じて、Whisper の強力な文字起こし機能を体験できます。
複雑な知識は不要で、サンプルコードを使ってすぐに音声認識をできるのが素晴らしいですね。

Streamlit でアプリ化してみる

Whisper による文字起こし機能を持つアプリを、Streamlit を使って構築してみましょう。Streamlit は Python の知識があれば、直感的に Web アプリケーションを作成できる素晴らしいフレームワークです。

ステップ 1: 基本的な Streamlit アプリの作成

Streamlit を使用して基本的な Web アプリケーションのスケルトンを作成します。
以下のサンプルコードは、簡単な Streamlit による音声文字起こしアプリの例です。

simple_app.py
import base64
import os

import streamlit as st
from dotenv import load_dotenv
from openai import OpenAI

load_dotenv()  # 環境変数を読み込む

# 環境変数からAPIキーを読み込む
api_key = os.getenv("OPENAI_API_KEY")

client = OpenAI(api_key=api_key)

st.title("音声文字起こしアプリ")

audio_file = st.file_uploader(
    "音声ファイルをアップロードしてください", type=["m4a", "mp3", "webm", "mp4", "mpga", "wav"]
)

if audio_file is not None:
    st.audio(audio_file, format="audio/wav")

    if st.button("音声文字起こしを実行する"):
        with st.spinner("音声文字起こしを実行中です..."):
            transcript = client.audio.transcriptions.create(
                model="whisper-1", file=audio_file, response_format="text"
            )
        st.success("音声文字起こしが完了しました!")
        st.write(transcript)

        # 文字起こしをバイトに変換し、それをbase64でエンコードする
        transcript_encoded = base64.b64encode(transcript.encode()).decode()
        # ダウンロードリンクを作成する
        st.markdown(
            f'<a href="data:file/txt;base64,{transcript_encoded}" download="transcript.txt">Download Result</a>',
            unsafe_allow_html=True,
        )

このコードは、Streamlit で基本的な UI を作成し、音声ファイルをアップロードする機能を提供します。

ステップ 2: アプリの実行

以下のコマンドで Streamlit アプリを起動します。

streamlit run ./app/simple_app.py

これにより、ブラウザ上でアプリが開き、ユーザーは音声ファイルをアップロードして文字起こしを行うことができます。
※ デフォルトの設定(localhost)で実行すると、アプリケーションはローカルマシンからのみアクセス可能となります。安全なローカルネットワーク内で使用してください。

実行画面

demo

まとめ

この記事では、Whisper と Streamlit を使った議事録文字起こしアプリの開発についてご紹介しました。Whisper の高精度な音声認識機能と、Streamlit の直感的なアプリ開発フレームワークが、議事録作成の効率化にどのように貢献するかを見てきました。

まず、Whisper による音声からテキストへの変換の精度の高さは、会議内容の文字起こしに利用が可能です。

次に、Streamlit を使ったアプリ開発の手軽さと柔軟性が、技術的な深い知識がなくても迅速なプロトタイピングを実現します。これにより、自分だけのカスタマイズされたアプリを簡単に作成できることが分かりました。

このように、Whisper と Streamlit を組み合わせることで、議事録作成の時間と労力を大幅に削減し、より効率的で生産的なワークフローを実現することができます。技術的な挑戦に興味がある方にとって、このプロジェクトは新たな可能性を開く一歩となるでしょう。

次回に向けて

基本的な議事録起こしなら、Whisper と Streamlit で十分ですが、以下の機能があるとより汎用性が高い文字起こしアプリになります。

  1. 長時間の音声を分割して文字起こし可能な機能
  2. 文字起こし結果を構成する機能
  3. 話者分離機能

次回は、これらの機能を実装したアプリを作成したいと思います。

https://zenn.dev/kanaotto/articles/f515309f1582be

Github リポジトリ

https://github.com/y-tsuritani/streamlit-audio-transcribe

参考記事

https://zenn.dev/tsuzukia/articles/eb116703b71c5f

https://www.sato-susumu.com/entry/2023/04/30/131338

GitHubで編集を提案
ギックス

Discussion