TL;DR
文字起こしができるfaster-whisperをdocker compose
で実行できるようにしました。(repository)
NVIDIA周りの環境構築をあまりしないでサクッと文字起こしができます。
また、GPUがなくても実行可能です。
「文字起こしの自動化」を試してみたいと思っていた方は、この機会に初めてみてはいかがでしょうか?
動作サンプル
めっちゃ楽!
リポジトリ
動作環境
- Docker
GPUで推論する場合
- NVIDIA Container Toolkit
- NVIDIA Container Toolkitに対応したGPU
動作確認済み
- WSL2(ubuntu)
未確認
- その他Windows, Linux環境(NVIDIA Container Toolkit)があれば動くはず
事前準備
NVIDIA Container Toolkitを入れるだけ。
WSL2の場合は以下の記事で詳細に説明されています。
https://qiita.com/insilicomab/items/681f0b0e1c9ecfe10207
使い方
-
./media
にメディアファイルを入れる- 対応拡張子は
mp3 , mp4 , mpeg , mpga , m4a , wav , webm
です
- 対応拡張子は
- ファイル名を指定する
AUDIO_FILE_NAME = "./media/voice01_A.mp3"
- ルートディレクトリで
docker compose up --build
を実行 - Consoleと
./output
に文字起こしが吐き出されます
これだけです。
技術解説
ライブラリ管理
poetryを使ってライブラリを管理しています。
[tool.poetry.dependencies]
python = "3.12.3"
yt-dlp = "^2024.4.9"
faster-whisper = "^1.0.2"
nvidia-cublas-cu11 = "^11.11.3.6"
nvidia-cudnn-cu11 = "^9.1.1.17"
また、Dockerfileでpoetryで管理しているライブラリをexportしてinstallしています。
# Poetryを使ってrequirements.txtを生成
COPY pyproject.toml poetry.lock /app/
RUN poetry export -f requirements.txt --output requirements.txt
# 依存関係をインストール
RUN pip install -r requirements.txt
以下のライブラリはpoetryだとコケるのでDockerfileで直接インストールしています。
# CUDA関連パッケージのインストール。Poetryだとコケるので直接インストールする。
RUN pip install nvidia-pyindex
RUN pip install nvidia-cublas
非GPU向け環境への対応
def is_cuda_available():
try:
# nvidia-smi コマンドを実行
subprocess.run(["nvidia-smi"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, check=True)
return True
except (subprocess.CalledProcessError, FileNotFoundError):
return False
def get_device_and_compute_type():
if is_cuda_available():
return "cuda", "float16"
else:
return "cpu", "int8"
nvidia-smi
を実行できれば、GPUかつfloat16
を使った推論。
そうでなければint8
で推論します。
その他
ライブラリのディレクトリへの参照が解決できないことがあるので以下のおまじないを入れています。
# LD_LIBRARY_PATHの設定(おまじない)
ENV LD_LIBRARY_PATH `python3 -c 'import os; import nvidia.cublas.lib; import nvidia.cudnn.lib; print(os.path.dirname(nvidia.cublas.lib.__file__) + ":" + os.path.dirname(nvidia.cudnn.lib.__file__))'
最後に
Zoomの文字起こしはキャプションが無駄に出て有効にできなかったり、iPhoneで音声を録画したり、文字起こしが必要な機会は多いのではないでしょうか?
faster-whisperの文字起こしはなかなかの精度でかなり助けられています。
みなさま、良い文字起こしライフを~~!