0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

faster whisperをdocker composeにまとめたのでサクッと文字起こしをしてみよう!

Last updated at Posted at 2024-09-08

TL;DR

文字起こしができるfaster-whisperdocker composeで実行できるようにしました。(repository)
NVIDIA周りの環境構築をあまりしないでサクッと文字起こしができます。
また、GPUがなくても実行可能です。

「文字起こしの自動化」を試してみたいと思っていた方は、この機会に初めてみてはいかがでしょうか?

動作サンプル

音声ファイルを入れて(動画ファイルでも可)
image.png

docker composeで立ち上げると
image.png

文字起こしができます!
image.png

めっちゃ楽!

リポジトリ

動作環境

  • 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

使い方

  1. ./mediaにメディアファイルを入れる
    • 対応拡張子は mp3 , mp4 , mpeg , mpga , m4a , wav , webmです
  2. ファイル名を指定する
main.py
AUDIO_FILE_NAME = "./media/voice01_A.mp3"
  1. ルートディレクトリでdocker compose up --buildを実行
  2. Consoleと./outputに文字起こしが吐き出されます

これだけです。

技術解説

ライブラリ管理

poetryを使ってライブラリを管理しています。

pyproject.toml
[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しています。

Dockerfile
# 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で直接インストールしています。

Dockerfile
# CUDA関連パッケージのインストール。Poetryだとコケるので直接インストールする。
RUN pip install nvidia-pyindex
RUN pip install nvidia-cublas

非GPU向け環境への対応

main.py
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で推論します。

その他

ライブラリのディレクトリへの参照が解決できないことがあるので以下のおまじないを入れています。

Dockerfile
# 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__))'

参考:faster-whisperのissue

最後に

Zoomの文字起こしはキャプションが無駄に出て有効にできなかったり、iPhoneで音声を録画したり、文字起こしが必要な機会は多いのではないでしょうか?

faster-whisperの文字起こしはなかなかの精度でかなり助けられています。

みなさま、良い文字起こしライフを~~!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?