Slide 1

Slide 1 text

Galene用SpeachToTextのgalene-stt を試す Kenichiro Matohara(matoken) 1

Slide 2

Slide 2 text

matoken @ 鹿児島の右下の山奥から参加 好きなLinuxディストリビューションは Debian map: © OpenStreetMap contributors Kenichiro Matohara(matoken) https://matoken.org [email protected] 2

Slide 3

Slide 3 text

最近 地震 小江戸らぐに久々に参加 去年に続きDebCon24のビデオアーカイブ文字起こし&翻訳 Laptop 購入 3

Slide 4

Slide 4 text

Galenの文字起こしツールのGalene-stt Go製MIT license Whisper.cpp を使い,Galene の文字起こしをして text-chat に投稿 サーバーではなくユーザー側で動かすのでサーバーには参加者がひとり増えるだけの負荷しか 掛からない :) jech/galene-stt: Speech-to-text support for Galene https://github.com/jech/galene-stt 4

Slide 5

Slide 5 text

5

Slide 6

Slide 6 text

導入 Whisper.cpp の導入 Whisper.cpp モデルデータの入手 galene-stt の導入 6

Slide 7

Slide 7 text

☓ https://inari.opencocon.org/@matoken/112903258808553065 7

Slide 8

Slide 8 text

○ 8

Slide 9

Slide 9 text

Whisper/Whisper.cpp? WhisperはOpenAIの音声認識モデル.Python製MIT license Whisper.cpp は c++ で cpu でも動くようにしたもの.MIT license 今回のようなリアルタイム文字起こしにはどちらにせよCUDA 対応のGPU が欲しい 9

Slide 10

Slide 10 text

Whisper.cpp の導入 $ git clone https://github.com/ggerganov/whisper.cpp $ cd whisper.cpp $ cmake -Bbuild $ cd build $ make -j`nproc` $ sudo make install $ cd .. 10

Slide 11

Slide 11 text

Whisper.cpp モデルデータの入手 base モデルのダウンロード例 or  make は download-ggml-model.sh を呼ぶ $ make base $ bash ./models/download-ggml-model.sh base $ cd .. 11

Slide 12

Slide 12 text

Whisper.cpp モデルデータの種類 *.en は英語用 下に行くほど大きく精度は上がるがリソースを消費する 使いたいものをダウンロードしておく tiny.en tiny base.en base small.en small medium.en medium large-v1 large-v2 large-v3(large) 12

Slide 13

Slide 13 text

ダウンロードtips モデルダウンロード中に失敗してしまうと再度実行してももうファイルあるよと言われすぐダウン ロード終了してしまう. models 以下にファイルが置かれる ダウンロードURL sha1 hash URL wget -c で続きからダウンロード & hash 確認 Model base already exists. Skipping download. https://huggingface.co/ggerganov/whisper.cpp/tree/main https://huggingface.co/ggerganov/whisper.cpp $ wget -c "https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-base.bin?download=true" \ -O models/ggml-medium.bin --snip-- moodels/ggml-medium.bin 23%[+++++++++++++======> ] 341.88M 632KB/s $ sha1sum models/ggml-medium.bin fd9727b6e1217c2f614f9b698455c4ffd82463b4 models/ggml-medium.bin 13

Slide 14

Slide 14 text

galene-stt の導入 Whisper.cpp のモデルデータを galene-stt から呼べるようシンボリックリンクを貼る $ git clone https://github.com/jech/galene-stt $ cd galene-stt $ go build $ ls -l galene-stt -rwxrwxr-x 1 matoken matoken 12533056 Aug 11 07:43 galene-stt $ ln -s ../whisper.cpp/models . 14

Slide 15

Slide 15 text

いくつかのエラー opus ライブラリが見つからない Whisper.cpp のヘッダーファイルが見つからない Whosper のライブラリが見つからない 15

Slide 16

Slide 16 text

opus ライブラリが見つからない Debian パッケージから導入 $ go build # gopkg.in/hraban/opus.v2 # [pkg-config --cflags -- opus opus opus opus opusfile opusfile] Package opusfile was not found in the pkg-config search path. Perhaps you should add the directory containing `opusfile.pc' to the PKG_CONFIG_PATH environment variable Package 'opusfile', required by 'virtual:world', not found Package 'opusfile', required by 'virtual:world', not found $ sudo apt install libopus-dev libopusfile-dev 16

Slide 17

Slide 17 text

Whisper.cpp のヘッダーファイルが見つからない Whisper.cpp を build した後システムにインストールしていなかったのでインストールした. $ go build # galene-stt ./whisper.go:13:10: fatal error: whisper.h: No such file or directory 13 | #include "whisper.h" | ^~~~~~~~~~~ compilation terminated. 17

Slide 18

Slide 18 text

Whosper のライブラリが見つからない Whisper.cpp のライブラリは /usr/local/lib に導入されているので LD_LIBRARY_PATH で指定してみると動いた $ ./galene-stt https://127.0.0.1:8443/group/test/ ./galene-stt: error while loading shared libraries: libwhisper.so.1: cannot open shared object file: No such file or directory $ LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib ./galene-stt https://127.0.0.1:8443/group/test/ 18

Slide 19

Slide 19 text

システムワイド設定 /etc/ld.so.conf にパスを追記して ldconfig コマンドで反映 1 Whisper.cpp のライブラリの含まれる /usr/local/lib を /etc/ld.so.conf に追記 2 ldconfig コマンドで /etc/ld.so.cache に反映 3 Whisper.cpp のライブラリを確認 $ echo '/usr/local/lib' | sudo tee -a /etc/ld.so.conf /usr/local/lib $ sudo ldconfig $ sudo ldconfig -p | grep -i whisper libwhisper.so.1 (libc6,x86-64) => /usr/local/lib/libwhisper.so.1 libwhisper.so (libc6,x86-64) => /usr/local/lib/libwhisper.so 1 2 3 19

Slide 20

Slide 20 text

galene-stt Usage $ ./galene-stt Usage: ./galene-stt group [file...] -debug enable protocol logging -insecure don't check server certificates -keep-silence don't discard segments of silence, pass them to the engine -lang language language of input, or "auto" for autodetection (default "en") -model filename whisper model filename (default "models/ggml-small.bin") -password password password to use for login -silence volume maximum volume required to start a new phrase (default 0.025) -silence-time seconds seconds of silence required to start a new phrase (default 0.3) -translate translate foreign languages -username username username to use for login (default "speech-to-text") 20

Slide 21

Slide 21 text

1 参加グループURL を指定 2 モデルを指定(既定値は small) 3 日本語を指定 $ ./galene-stt https://galene.org:8443/group/public/stt $ ./galene-stt -model models/ggml-base.bin https://galene.org:8443/group/public/stt $ ./galene-stt -lang ja -model models/ggml-base.bin https://galene.org:8443/group/public/stt 1 2 3 21

Slide 22

Slide 22 text

BUG 日本語の利用可能なモデルを指定して日本語を文字起こしすると英語に翻訳されたテキストが 投稿される. 英語以外の言語は英語に翻訳される(Whisperの機能で今の所英語への一方通行) issue #1(!) で報告,オプションが追加され指定言語で出力できるようになった 22

Slide 23

Slide 23 text

日本語が英語に翻訳されて投稿されている 23

Slide 24

Slide 24 text

修正 08-11 の 622de1914d049ce403d4e51ec0f2df4fa365a42a で -lang と - translate が追加された Usage 抜粋 $ git log -1 622de1914d049ce403d4e51ec0f2df4fa365a42a commit 622de1914d049ce403d4e51ec0f2df4fa365a42a Author: Juliusz Chroboczek Date: Sun Aug 11 00:33:02 2024 +0200 Add flags -lang and -translate. -lang language language of input, or "auto" for autodetection (default "en") -translate translate foreign languages 24

Slide 25

Slide 25 text

日本語が日本語で投稿されるように 25

Slide 26

Slide 26 text

モデルの精度とCPU の制限 規定値のモデルだと日本語の精度はいまいち 精度を上げると drop してしまう CPU だと 4core しか使ってくれないよう CUDA 対応の NVIDIA GPU が無いと実用的ではないかも…… Whisper-Medusa?(x1.5!) cloud? 26

Slide 27

Slide 27 text

テキストチャットが埋まってしまう 現在文字起こしの結果は現在Galeneのテキストチャットに投稿される テキストチャットが文字起こしテキストで埋まってしまう Galene ウィンドウの下部に表示されるようになるよう? フルスクリーンやPIPビデオのソリューションはまだない 27

Slide 28

Slide 28 text

まとめ Galene の文字起こしをしてくれる galene-stt galene-stt 実行端末で Whisper.cpp を使い文字起こしをするのでサーバにはほとんど負 荷がかからない galene-stt 実行端末は CUDA 対応 NVIDIA GPU が必須そう 誰か試してみませんか? Whisper 高速化の Whisper-Medusa やクラウドも使えるかもしれないので試してみたい 28

Slide 29

Slide 29 text

奥付 発表 2024-08-17(sun) 発表者 利用ソフトウェア + ライセンス 鹿児島Linux勉強会 2024.08(オンライン開催) Kenichiro Matohara(matoken) Neovim Asciidoctor Reveal.js CC BY 4.0 29