Bambu Bar
Monitor Bambu Lab printers from your Mac menu bar: print progress, the live camera, AMS filament, alerts and desktop widgets. Bambu Bar for macOS 26+.
翻訳待ち
Loading the full README. The saved excerpt is shown below.
録音(ROCK ON)と文字起こし(MJ)をまとめてこなす、Windows上でローカル完結する音声文字起こしツールです。録音データを外部に送信せず、 すべてお使いのPC内で処理します。用途に応じて2つの版があります。Read the full README ↗
**録音(ROCK ON)と文字起こし(MJ)**をまとめてこなす、Windows上でローカル完結する音声文字起こしツールです。録音データを外部に送信せず、 すべてお使いのPC内で処理します。用途に応じて2つの版があります。
| ソース | 用途 | ビルド後の名称 |
|---|---|---|
whisper_gui_fw.py | 手持ちの音声ファイルを文字起こし | 文字起こしツール |
whisper_gui_meeting.py | 上記に加え、Web会議(相手の声)を録音して文字起こし | 文字起こし/会議録音ツール |
large-v3-turbo(int8量子化)。models/ 配下を kotoba-whisper-v2.0 → large-v3-turbo → large-v3 → medium → small の優先順で自動選択。condition_on_previous_text=False + no_repeat_ngram_size で抑制。辞書.txt に固有名詞・専門用語を1行ずつ書くと認識精度が上がる(起動時に既定テンプレを自動生成)。soundcard によるWASAPIループバックで、スピーカー/ヘッドセットに流れる相手の声を録音 →そのまま文字起こし。管理者権限・ドライバ不要。⚠️ Web会議を録音する際は、参加者への録音の告知・同意を必ず取得してください。
large-v3-turbo(model.bin 0.76GB)での実測は、物理メモリのピークが約1.1GB、
コミット(仮想メモリ)のピークが約1.9GB(ctranslate2==4.7.2)。
4.8.0 以降はモデル読み込み時に約3GBを余分にコミットする回帰がある。 実際に触るのは1GB程度で、確保するだけして使わないため、メモリの大きい開発機では 気付かないが、コミット上限の小さいPC(古いSurface等)では確保に失敗して、 エラーも出さずにプロセスごと落ちる。同一音声・同一モデルでの実測:
| ctranslate2 | モデル読み込み時のピークコミット |
|---|---|
| 4.6.1 | 1,394MB |
| 4.7.2 | 1,392MB |
| 4.8.0 | 4,360MB |
| 4.8.1 | 4,361MB |
compute_type(int8 / default / auto / int8_float32)も cpu_threads(1/2/4) も
beam_size(1/5) もこの山には影響しない。faster-whisper 1.2.1 の要件は
ctranslate2<5,>=4.0 なので 4.7.2 で問題ない。アップグレードするときは
必ずこの計測をやり直すこと。
Python側の例外はすべて画面のログに出るため、無言で終了する場合はネイティブ側の 異常終了(メモリ確保の失敗、ネットワーク越しの読み込み失敗、セキュリティ対策 ソフトによる停止など)を疑う。
exe と同じフォルダ(書き込めない場合は %LOCALAPPDATA%\文字起こしツール)に
診断ログ.txt を出力しているので、まずこれを送ってもらう。
==== 正常終了 ==== が無ければ異常終了。その直前の行が落ちた場所。
WhisperModel 読み込み開始 の後で止まる → モデル読み込み(メモリ不足、
model.bin の破損、ネットワーク越しの読み込み)音声の読み込みとVAD(無音除去)を通過 の前で止まる → 音声デコード、
または onnxruntime(VAD)faulthandler を有効にしているため、アクセス違反等でもPython側のスタックが残る。==== 起動 ==== にPCのメモリ・コア数・実行場所を記録している。開始前に model.bin の有無とサイズ、空きメモリ、ネットワークパス上かどうかを
_preflight() で確認し、危ない場合は落ちる前にダイアログで知らせる。
Windows fatal exception: access violation が transcribe.py の
ctranslate2.models.Whisper(...) で出る場合。メモリではない(空きが十分でも起きる)。
| CPU | AVX-512 | 結果 |
|---|---|---|
| 第11世代 Tiger Lake(Model 140) | あり | 落ちる |
| 第12世代 Alder Lake | 無効 | 動く |
| 第13世代 Raptor Lake | 無効 | 動く |
対策は configure_cpu_isa() で AVX2 に固定すること。罠として
CT2_FORCE_CPU_ISA だけでは効かない。 これは CTranslate2 自身のカーネルにしか
効かず、実際の行列演算を担う Intel MKL は自前で命令セットを選ぶため、
MKL_ENABLE_INSTRUCTIONS も併せて指定する必要がある(両方とも環境変数で
上書きできるので、切り分け時は AVX512 や GENERIC を外から与えられる)。
CT2_USE_MKL=0 で MKL 自体を oneDNN に切り替える手もある。
ただし、この制限は AVX-512 を持つCPUにだけかけること。 AVX-512 を持たない 第12・13世代にかけると事故は防げず、MKL が AVX-VNNI(int8の積和演算。 AVX-512の中身のうちAI推論に効く部分を256ビット幅で使えるようにしたもので、 Alder Lake 以降が持つ)を使わなくなるぶん遅くなるだけになる。第13世代 (i5-1335U)・2分の会議音声・条件を交互に入れ替えて3回ずつの実測:
| MKLの制限 | 文字起こし所要(3回) | 中央値 |
|---|---|---|
| なし | 120.5 / 157.5 / 125.5 秒 | 125.5 |
MKL_ENABLE_INSTRUCTIONS=AVX2 | 197.5 / 186.1 / 164.5 秒 | 186.1(+48%) |
制限側の3回すべてが制限なしの3回すべてより遅く、きれいに分離する。
ブロックでまとめて測ると発熱による周波数変動に埋もれて差が見えないので、
必ず交互に測ること(最初にそれで誤った結論を出した)。
なお MKL_ENABLE_INSTRUCTIONS が効いているかは、セグメント数が 34→36 に変わる
ことでも分かる(演算経路が変わるため。誤差レベルで精度の優劣ではない)。
第11世代機で ctranslate2.models.Whisper(...) がアクセス違反で即死していた件の結論。
AVX-512でもメモリでもモデル破損でもVC++ランタイムでもなかった。
落ちるのは常に Thread-1 (_run)(GUIのバックグラウンドスレッド)で、
メインスレッドは tkinter mainloop にいた。同じ処理を子プロセスのメインスレッドで
動かすと、追加設定なしで完走する(50分31秒の音声を42分20秒で処理)。
そのPCには資産管理ソフトとウイルス対策ソフト(AMSIプロバイダ)のDLLが3本注入
されており、CFG=1(開発機は0)だった。何が注入されているかは、起動時の診断ログの
「外部DLL(起動時)」に出る。
注入されたフックがDLL初期化に割り込み、スタックの小さいサブスレッドで
破綻していたと考えるのが最も説明が付く(メインスレッドはスタックが大きい)。
なお import av(FFmpeg)のアクセス違反は成功時も出続けているが、
SEHで処理されて実害が無い。faulthandlerが報告するので紛らわしい。
対策=文字起こしを別プロセスで実行する(run_worker() と _spawn_worker())。
--transcribe-worker <ジョブJSON> で再実行するos.write(1, ...)。frozenでは
sys.stdout が使えないことがあるため記述子へ直接書く)os.dup2 はコンソール無しのexeでは効かないことがある)FALLBACKS の設定を順に落として自動で再試行し、
成功した設定をログに残す(通常→MKLなし→1スレッド→GENERIC)EXIT_REASONS で日本語化(0xC0000005=アクセス違反 等)models/<名前>/model.crc32 があれば、起動時に model.bin と照合する
(check_model_file()、0.8秒)。配布物を作るときは必ずこのファイルも同梱すること。
無ければ照合しない(自前モデルに差し替えた場合を壊さないため)。
なお exe は UPX 圧縮していない(セキュリティ対策ソフトの誤検知と、 ネイティブDLLの破損を避けるため)。
rock-on-mj-meeting.zip をダウンロード (Releases に全ファイル)
| ファイル | 内容 |
|---|---|
rock-on-mj-meeting.zip | 会議録音版(Web会議の録音+ファイルの文字起こし)。通常はこちら |
rock-on-mj-fw.zip | ファイル文字起こし版 |
音声認識モデル(large-v3-turbo・int8、776MB)を同梱しています。ZIP を右クリック →
「プロパティ」→「許可する」にチェックしてから展開し、中の 会議録音ツール.exe を起動します。
フォルダの中身(_internal・models)は EXE と同じ場所に置いたまま使ってください。
ウイルス対策ソフトに検知された場合: 署名の無い PyInstaller 製 EXE は、機械学習型の検知
(ウイルスバスター/Apex One の TRX.XXPE… 等)で誤検知されやすい。ビルド時にブートローダーを
ソースから作り直し、バージョン情報を埋め込んで起こりにくくしているが、ゼロにはできない。
組織の管理コンソールで EXE のハッシュ(SHA-1/SHA-256)を除外登録するか、
ベンダーに誤検知として報告する。
.github/workflows/build-exe.yml が自動でビルドする。
This is the beginning of the README. Read the rest at the original. Read the full README ↗