Files
VRCT/src-python/docs/modules/transcription.md

127 lines
7.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 文字起こしモジュール (models.transcription)
このドキュメントでは `models/transcription` に関する設計・セットアップ・使用例・テスト方針・トラブルシュートをまとめます。
### 概要
- `models/transcription` は音声入力をテキストに変換する機能を提供します。主に:
- `transcription_recorder.py` — マイクやスピーカからの音声取得ラッパー
- `transcription_transcriber.py` — 音声バッファを認識エンジンに渡して文字起こしを行うロジック
- `transcription_whisper.py` — faster-whisperWhisperModel周りのダウンロード/ロード補助
- `transcription_languages.py` — 各言語・国別のエンジン別コードマップ
### 最近の変更点
- 各モジュールに型注釈と docstring を追加しました。これによりメンテナンス性が向上します。
- `transcription_whisper.py` にダウンロード進捗コールバックを明記した実装を追加しました。
### 依存関係
主要な依存:
- `speech_recognition` — オーディオ録音と Google 音声認識のラッパー
- `pyaudiowpatch` — クロスプラットフォームのオーディオ設定
- `pydub` — 音声のチャンネル変換や処理
- `faster_whisper`(オプショナル)— ローカルで Whisper を使う場合
- `huggingface_hub`(オプショナル)— モデルアーティファクトのダウンロード
注意: `pydub``ffmpeg` が必要です。環境に ffmpeg が無いとワーニングが出ます。
推奨インストール(任意):
```powershell
pip install speechrecognition pyaudiowpatch pydub faster-whisper huggingface-hub
```
テストでは多くの外部依存をモックするため、全てをインストールする必要はありません。
### 初回セットアップ
1. 必要に応じて `ffmpeg` をインストールしてくださいpydub の動作に必要)。
2. Whisper ローカルモデルを使う場合、`transcription_whisper.downloadWhisperWeight(root, weight_type, callback, end_callback)` を呼んでモデルを取得します。
- `callback(progress: float)` は 0.0〜1.0 の進捗通知です。
- 例:
```python
from models.transcription import transcription_whisper as tw
tw.downloadWhisperWeight("./", "tiny", callback=lambda p: print(f"{p*100:.1f}%"), end_callback=lambda: print("done"))
```
### API 使用例
簡単な `AudioTranscriber` の使い方:
```python
from models.transcription.transcription_transcriber import AudioTranscriber
# source はライブラリが提供するオーディオソースオブジェクト
tr = AudioTranscriber(speaker=False, source=source, phrase_timeout=3, max_phrases=10, transcription_engine="Google")
# audio_queue は録音スレッドがプッシュするキュー
tr.transcribeAudioQueue(audio_queue, languages=["English"], countries=["United States"])
```
戻り値やエラー処理のルールについては各関数の docstring を参照してください。
### テスト方針
- `AudioTranscriber``Whisper` ラッパーはユニットテストでモック化して検証します。
- 推奨: `pytest``unittest.mock` を使い、以下のケースをカバーします:
- 正常系: Google/Whisper の成功パス(モックで期待テキストを返す)
- エッジ: 無音、低確信、複数言語
- フォールバック: Whisper が利用不可の場合のフォールバック動作
### トラブルシュート
- ffmpeg が見つからない: `pydub` がワーニングを出します。OS に合わせて ffmpeg をインストールしてください。
- Whisper のロード時に VRAM エラー: `getWhisperModel` は VRAM 不足を検出して `ValueError("VRAM_OUT_OF_MEMORY", message)` を投げます。デバイス設定や compute_type を調整してください。
- ハッシュ不一致やダウンロード失敗: キャッシュや weights ディレクトリを削除して再ダウンロードしてください。
### 変更履歴
- 2025-10-09: 型注釈と docstring を追加、ダウンロード/コールバック仕様を明記。
---
このドキュメントは簡潔な参照用です。さらに詳細な実行手順ログ収集方法、ffmpeg のインストール手順例など)が必要であれば追記します。
# transcription — 文字起こしモジュール
概要: マイク/スピーカー音声の録音と Whisper/Google などのエンジンを使った文字起こしを提供するモジュール群です。主なクラスは録音用の Recorder と `AudioTranscriber` です。
主要クラス/シグネチャ:
- SelectedMicEnergyAndAudioRecorder(device, energy_threshold, dynamic_energy_threshold, phrase_time_limit)
- SelectedSpeakerEnergyAndAudioRecorder(...)
- SelectedMicEnergyRecorder(device)
- SelectedSpeakerEnergyRecorder(device)
- AudioTranscriber(speaker: bool, source, phrase_timeout: int, max_phrases: int, transcription_engine: str, root: str, whisper_weight_type: str, device: str, device_index: int, compute_type: str)
- transcribeAudioQueue(queue, languages:list, countries:list, avg_logprob: float, no_speech_prob: float) -> bool
- getTranscript() -> dict
使用例:
```python
from models.transcription.transcription_recorder import SelectedMicEnergyAndAudioRecorder
from models.transcription.transcription_transcriber import AudioTranscriber
# 録音
rec = SelectedMicEnergyAndAudioRecorder(device, energy_threshold=300, dynamic_energy_threshold=False, phrase_time_limit=3)
queue = Queue()
rec.recordIntoQueue(queue, None)
# 文字起こし
transcriber = AudioTranscriber(speaker=False, source=rec.source, phrase_timeout=3, max_phrases=10, transcription_engine='Google', root='.', whisper_weight_type='base', device='cpu', device_index=0, compute_type='auto')
transcriber.transcribeAudioQueue(queue, ['Japanese'], ['Japan'], -0.8, 0.6)
print(transcriber.getTranscript())
```
注意点:
- Whisper のモデルロードは VRAM を消費します。`Model.detectVRAMError` のような検知と回復策が必要です。
- 録音は OS のデバイス依存のため `device_manager` でのデバイス取得と組み合わせて利用してください。
# models/transcription — 詳細設計
構成ファイル:
- transcription_recorder.py — 各デバイス向け Recorder クラス群Base, SelectedMic*, SelectedSpeaker*。speech_recognition をラップし、Audio / Energy をキューへ出す。
- transcription_transcriber.py — AudioTranscriber: Google Speech API または faster-whisper を使った音声→テキスト変換の実行ロジック。複数言語に対する最良候補選択と confidence に基づく選出。
- transcription_whisper.py — Whisperfaster-whisper重みのダウンロードとモデル生成のユーティリティ。
主要契約:
- Recorder は recordIntoQueue(audio_queue, energy_queue) を提供し、バックグラウンドで音声データをキューに流す。
- AudioTranscriber.transcribeAudioQueue(audio_queue, languages, countries, avg_logprob, no_speech_prob) -> bool
- audio_queue から音声を取り出し認識を試みる。結果は getTranscript() で取得する。常に True/False を返して呼び出し側がループ継続を制御。
VRAM エラー対策:
- Whisper のモデルロードで GPU メモリ不足が発生すると、ValueError("VRAM_OUT_OF_MEMORY", message) を投げる実装。Controller で捕捉して機能停止/通知する。
外部依存:
- speech_recognition, faster_whisper, pydub, numpy, torch