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.soWhisper.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