Loading
BLOG 開発者ブログ

2023年9月19日

議事録生成を自動化してみた

一週間の内に何度もある打ち合わせで、議事録をとることは非常に大変な作業ですよね

なので今回は流行りに乗って議事録の自動作成をしてみたのでその内容をまとめてみました。


こんにちは。クラウドソリューショングループのnakamura.tです。

OpenAIが出しているSpeech to text APIとPythonを使用して音声ファイルから文字起こしをしていきます。
参考になれば幸いです。

目次

Speech to text APIとは

OpenAIが提供しているWhisperと呼ばれるモデルを使用したAPIとなります。

出来る事は以下2点で

  • 音声を、その音声が使用されている言語に書き起こす
  • 音声を英語に翻訳して書き起こす

注意点として一度に扱えるファイルサイズは25MBまでとなっています。(2023/9/16現在時点)

対応ファイルタイプは「mp3, mp4, mpeg, mpga, m4a, wav, webm」です。

APIを使用する際はOpenAIにサインインしマイページよりAPI Keyの取得と有料のためクレジット支払いの登録が必要となります。

支払いに関しては初回は無料のクレジットが取得できますが有効期限がありますので切れている場合は設定が必要になります。

料金は音声データ1分あたり0.006ドルと非常に安価なので無料クレジットでも十分に試すことができます。

動画ファイルから文字起こし

それではここから本題である音声ファイルから自動で文字起こしの実装をしていきます。

ファイル構成は以下のようにしています。

議事録自動作成
├─create-minutes.py
└─テスト動画.m4a
# ライブラリインストール 
pip install openai
import openai
openai.api_key = "取得したAPI Key"
# 音声文字起こし関数(引数:音声ファイルパス)
def speech_to_text(filepath):
    # ファイルを開く
    audio_file= open(filepath, "rb")
    # Speech to Text変換
    response = openai.Audio.transcribe(model = "whisper-1", file  = audio_file)
    # 変換後のテキスト出力
    return response.text
# 音声ファイルのパスを指定
file = "テスト動画.m4a"
# 関数実行
result = speech_to_text(file)
path = 'minutes.txt' # 出力したいファイルパスを指定
f = open(path, 'w+')
f.write(result)
f.close()

実行すると同フォルダ内にminutes.txtが作成されテスト動画.m4aの内容が記載されます。
これでまず音声ファイルを文字起こしすることができました。

動画ファイルをGUIベースで取得

上記ソースまでは実行するファイルと同じパスに動画ファイルを配置する前提になっていますが、これだと毎回ファイルを変える必要があり面倒くさいのでGUIでファイルを指定できるようにしていきたいと思います。
今回はPySideモジュールを使用して行きます。
初めはtkinterを使用して実装していたんですが非推奨になっていたので変更しました。

pip install PySide2

先ほどのソースを以下のように修正します。

import openai
import sys
# PySideの読み込み
from PySide2.QtWidgets import (
  QApplication,
  QFileDialog,
)

openai.api_key      = "取得したAPI Key"

# 音声文字起こし関数(引数:音声ファイルパス)
def speech_to_text(filepath):

    # ファイルを開く
    audio_file= open(filepath, "rb")

    # Speech to Text変換
    response = openai.Audio.transcribe(model = "whisper-1", file  = audio_file)

    # 変換後のテキスト出力
    return response.text

# 音声ファイルのパスを指定
caption = "Select a file"
dir = ""
filter = "動画ファイル (*.mp3 *.mp4 *.mpeg *.mpga *.m4a *.wav *.webm)"
selectedFilter = ""
options = QFileDialog.Options()
# アプリケーションの作成
app = QApplication(sys.argv)

# ダイアログオブジェクトの作成
file = QFileDialog.getOpenFileName(
    None,
    caption,
    dir,
    filter,
    selectedFilter,
    options
)

# 関数実行
result = speech_to_text(file[0])

path = 'minutes.txt' # 出力したいファイルパスを指定
f = open(path, 'w+')
f.write(result)
f.close()

これを実行するとGUIでファイルを選択する画面が表示さるようになり、より便利になります。

ダブルクリックで実行するための手順

最後に実行方法をもう少し手軽なものにしていきます。
上記まではコンソール上で実行する必要がありましたが、毎回それをするのは面倒なので今回はbatファイルを作成します。(macの場合はcommandファイル)

windowsを使用している方は例1の通りbatファイルを作成してください。

# 例1:batファイルの設定
@echo off
python create-minutes.py
pause

macを使用している方は例2の通りcommandファイルを作成してください。

# 例2:commandファイルの設定
# python3のパス 実行ファイルのパスで記載
/Users/nakamurat/.pyenv/python3 /Users/nakamurat/Desktop/議事録自動作成/create-minutes.py

macの場合実行権限がなくて最初は実行出来ないことがありますのでその場合は以下のコマンドを実行してください。

chmod u+x {バッチコマンドファイル名.command}

ここまで出来れば後はバッチファイルをダブルタップで実行することができます。

おわりに

どうでしたでしょうか。想像よりも簡単に実装できたと思います。
今回使用したAPIのように面倒くさい作業の一助になるような機能はたくさんでているのでこれからも触っていこうと思います。

少しでも参考になっていれば幸いです。

お付き合いありがとうございました。

nakamuratのブログ