voice_recognition_interface¶
音声認識エンジン共通インターフェース定義。
- class mike.voice_recognition_interface.VoiceRecognitionInterface¶
Bases:
ABC音声認識モジュール共通インターフェース。
【役割】
すべての音声認識エンジン(Julius, SpeechRecognition など)が 実装すべき共通メソッドを定義する
MikeClient が複数の音声認識方式を統一的に扱えるようにする
【デザインパターン】
Strategy パターン:複数のアルゴリズムを同じインターフェースで提供
Dependency Injection:MikeClient が実装を指定可能
【利点】
認識エンジン切り替え時、MikeClient コード変更不要
テスト時にモック実装を簡単に挿し込める
新しい認識方式追加が容易
【実装ルール】
本クラスを継承する全クラスは、以下 2 メソッドを実装
@abstractmethod で修飾されたメソッドの実装は必須
- abstractmethod close()¶
音声認識リソース解放処理。
【役割】 - マイク、ネットワーク、外部サービスなどのリソースを適切に解放 - 予期しない停止などの影響を最小化 - 二重クローズ・複数回呼び出しでも安全に動作
【実装例】
# ========== ローカルマイク・オーディオデバイス ========== class LocalRecognizer(VoiceRecognitionInterface): def close(self): if self.stream: self.stream.stop_stream() self.stream.close() if self.audio: self.audio.terminate() # ========== 外部 API セッション終了 ========== class ApiRecognizer(VoiceRecognitionInterface): def close(self): if self.api_session: self.api_session.close() # ========== リソース不要(ファイルベースなど) ========== class FileRecognizer(VoiceRecognitionInterface): def close(self): pass # 何もしない
【実装側責務】 - 何もしない場合でも定義する必要がある - 二重呼び出しでも安全(べき等性) - 正常系・異常系どちらでも呼ばれる可能性あり
【呼び出しタイミング】 - プログラム終了時(atexit) - モード切り替え時 - エラーリカバリ時 - 明示的な cleanup フェーズ
- abstractmethod get_command() str | None¶
音声認識を実行し、文字列の結果として返す抽象メソッド。
【役割】 - マイクから音声入力を受け取る - 音声データを処理・認識 - 認識テキストを返却
【実装側ルール】 - 呼び出しごとに録音または認識処理を行うこと - 無音、認識失敗、通信エラーなどの場合は空文字 “” を返すこと - ブロッキング処理(結果が返るまで待つ)と想定 - 例外は発生させず、失敗時は空文字で統一
【使用例】
# Julius を使った場合 julius = JuliusHandler() cmd = julius.get_command() # ← 音声待機・認識・返却 # SpeechRecognition を使った場合(インターフェース同じ) speech = SpeechRecognitionHandler() cmd = speech.get_command() # ← 同じメソッド名で使用可能 # 呼び出し側(MikeClient)はどちらの実装かを知らずに使用可能 recognizer = JuliusHandler() # または SpeechRecognitionHandler() cmd = recognizer.get_command()
- Returns:
音声認識結果のテキスト、失敗時は空文字列 “”
- Return type:
str
【設計上の注意】 - 戻り値が空文字でないことを確認してから次の処理に進む - エラー処理は実装側で完結させ、呼び出し側には異常を感じさせない