Galène に接続し, Whisper.cpp の Speach To Text で文字起こししたテキストをテキストチャット欄に投稿する galene-stt を少し試してみました.
最近,自分のホストする勉強会などでは Galène というビデオカンファレンスサーバーをセルフホストして利用しています.
これは WebRTC の SFU を利用しているのでサーバーのリソースがとても少なくて済みます.Linux/armv7 やLinux/mips の OpenWRT でも動作して少人数であれば Raspberry Pi 初代くらいのスペックでも十分動作します.
よく利用される Jitsi meet や BigBlueButton などは大量のリソースが必要なのでセルフホストするのはちょっと辛いです.
Note
|
Jitsi Meet では 8×8 がスポンサーしている https://meet.jit.si/ を使ったり,Google Compute Engine などに導入して,ミーティング字だけ起動して費用を抑えるという使い方をしている人も居ます. |
Note
|
今年の LibrePlanet ではビデオサーバーに BigBlueButton に代わり Galène が使われたそうです. |
galene-stt の導入
galene-stt は Galene に接続してオーディを Whisper.cpp を使って文字起こしをし,結果を Galene のテキストチャットに投稿するもののようです.サーバーでは利用者がひとり増えるだけなのであまり負荷がかからないのが良さそうです.
Whisper.cpp の導入
galene-stt は Whisper.cpp を使い文字起こしを行うので先ずは Whisper.cpp を導入します.
$ git clone https://github.com/ggerganov/whisper.cpp $ cd whisper.cpp $ cmake -Bbuild $ cd build $ make -j`nproc` $ sudo make install $ cd ..
$ make base (1) $ cd ..
-
モデルのダウンロード.ここでは
base
をダウンロードしている.マシンスペックなどにより選択する.
galene-stt のビルド
次に galene-stt をビルドします.
$ git clone https://github.com/jech/galene-stt $ cd galene-stt $ go build
いくつかエラーが出ました.
エラー1,opus ライブラリが不足していた
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 (1)
-
>Debian パッケージから導入
エラー2,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.
エラー3.Whosper のライブラリが見つからない
build が終わったので実行すると Whisper.cpp の共有ライブラリが見つからず動きませんでした.
$ ./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
Whisper.cpp のライブラリは /usr/local/lib
に導入されているので LD_LIBRARY_PATH
で指定してみると動きました.
$ LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib ./galene-stt https://127.0.0.1:8443/group/test/
毎回指定するのは面倒なのでシステムに設定します. /etc/ld.so.conf
にパスを追記して ldconfig
コマンドで反映します.
$ echo '/usr/local/lib' | sudo tee -a /etc/ld.so.conf (1) /usr/local/lib $ sudo ldconfig (2) $ sudo ldconfig -p | grep -i whisper (3) libwhisper.so.1 (libc6,x86-64) => /usr/local/lib/libwhisper.so.1 libwhisper.so (libc6,x86-64) => /usr/local/lib/libwhisper.so
-
Whisper.cpp のライブラリの含まれる
/usr/local/lib
を/etc/ld.so.conf
に追記 -
ldconfig コマンドで
/etc/ld.so.cache
に反映 -
Whisper.cpp のライブラリを確認
Galene-stt 動作確認
help はこんな感じです.
$ ./galene-stt --help Usage: ./galene-stt group [file...] -debug enable protocol logging -discard-silence discard segments of silence early -insecure don't check server certificates -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) -username username username to use for login (default "speech-to-text")
適当な Galene group に接続します.
今回はローカルで起動した Galene の test group に接続しました.
$ ./galene-stt https://127.0.0.1:8443/group/test/ 2024/07/30 20:10:20 Get group status: Get "https://127.0.0.1:8443/group/test/.status.json": tls: failed to verify certificate: x509: cannot validate certificate for 127.0.0.1 because it doesn't contain any IP SANs
証明書がいわゆるオレオレ証明書なので接続に失敗します.
-insecure
オプションを付けて証明書の確認をしないようにします.
もう一つ.規定値のモデルは英語専用の small.bin
なので日本語も利用できるかつもう少し精度のいい base モデルを指定します.
$ ./galene-stt -insecure -model models/ggml-base.bin https://127.0.0.1:8443/group/test/
該当グループに speech-to-text
が現れます.
この状態でしゃべると文字起こし結果がテキストチャットに投稿されていきます.
ここで問題が発生.
Whisper.cpp の英語への翻訳が有効になっており日本語を文字起こししても英語で結果が投稿されてしまいます.恐らく他の言語でも同じでしょう.これが修正されないと英語以外の環境では辛い感じ.
とりあえず issue に投げました.
08-11 の 622de1914d049ce403d4e51ec0f2df4fa365a42a
で -lang
と -translate
が追加されました.
$ git log -1 622de1914d049ce403d4e51ec0f2df4fa365a42a commit 622de1914d049ce403d4e51ec0f2df4fa365a42a Author: Juliusz Chroboczek <jch@irif.fr> 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
-lang ja
を付けることで日本語が日本語として出力されるようになりました :)
しかし, base
モデルだといまいちな文字起こし,それ以上のモデルだとcpuが足を引っ張って追いつかない感じです.Whisper.cpp は 4core しか使ってくれないようなのでそれをどうにかするか,NVIDIA GPU を使わないとダメそうです.
$ git remote -v origin https://github.com/jech/galene-stt (fetch) origin https://github.com/jech/galene-stt (push) $ git log -1 commit ae763df9372405a85ed55a52f45f8ea32c74501f (HEAD -> master, origin/master, origin/HEAD) Author: Juliusz Chroboczek <jch@irif.fr> Date: Wed Jul 31 18:06:32 2024 +0200 Rename drop-silence to discard-silence. $ git remote -v origin https://github.com/ggerganov/whisper.cpp.git (fetch) origin https://github.com/ggerganov/whisper.cpp.git (push) $ git log -1 commit 6739eb83c3ca5cf40d24c6fe8442a761a1eb6248 (HEAD -> master, origin/master, origin/HEAD) Author: Georgi Gerganov <ggerganov@gmail.com> Date: Sat Jul 27 20:35:04 2024 +0300 whisper : handle empty mel (#2324) $ dpkg-query -W golang cmake build-essential build-essential 12.10 cmake 3.30.2-1 golang:amd64 2:1.22~3 $ lsb_release -dr Description: Debian GNU/Linux trixie/sid Release: n/a $ arch x86_64 $ cpu-info Packages: 0: Intel Core i7-10510U Microarchitectures: 4x Sky Lake Cores: 0: 2 processors (0-1), Intel Sky Lake 1: 2 processors (2-3), Intel Sky Lake 2: 2 processors (4-5), Intel Sky Lake 3: 2 processors (6-7), Intel Sky Lake Logical processors (System ID): 0 (0): APIC ID 0x00000000 1 (4): APIC ID 0x00000001 2 (1): APIC ID 0x00000002 3 (5): APIC ID 0x00000003 4 (2): APIC ID 0x00000004 5 (6): APIC ID 0x00000005 6 (3): APIC ID 0x00000006 7 (7): APIC ID 0x00000007 $ grep ^MemTotal: /proc/meminfo MemTotal: 15986772 kB