SpeechRecognition: 音声認識のための包括的なPythonライブラリ

SpeechRecognitionを探求する。これは、複数の音声認識エンジンとAPI(オンライン・オフライン両方)をサポートする多用途なPythonライブラリであり、実用的な例とトラブルシューティングのヒントを提供します。

はじめに

音声認識は、バーチャルアシスタントや文字起こしサービス、アクセシビリティツール、自動化ワークフローなど、多くの現代アプリケーションにおいて重要なコンポーネントです。Python用のSpeechRecognitionライブラリは、幅広い音声認識エンジンやAPIへの統一インターフェースを提供し、プロジェクトに音声テキスト変換機能を簡単に統合できます。CMU Sphinxによるオフライン認識が必要な場合でも、Google、Azure、OpenAI Whisperによるクラウドベースの高精度認識が必要な場合でも、このライブラリが対応します。

サポートされているエンジンとAPI

SpeechRecognitionは多様なバックエンドをサポートしており、ユースケースに最適なものを選択できます:

  • オフラインエンジン:

    • CMU Sphinx (PocketSphinx): 完全にオフラインで動作し、プライバシー重視や低レイテンシのアプリケーションに最適です。
    • Vosk API: 複数の言語をサポートするもう一つのオフラインオプション。
    • Whisper (ローカル): OpenAIのWhisperモデルをローカルで実行し、インターネットなしで高品質な文字起こしが可能。
    • Faster Whisper: より高速な推論のために最適化されたWhisperのバージョン。
    • Snowboy Hotword Detection: ウェイクワード検出用(オフライン)。
  • クラウドAPI:

    • Google Speech Recognition: 無料枠あり、使いやすい。
    • Google Cloud Speech API: より高精度でカスタマイズ可能、認証が必要。
    • Microsoft Azure Speech: エンタープライズグレードの認識。
    • Wit.ai: Facebookの音声API。
    • Houndify: SoundHoundのAPI。
    • IBM Speech to Text: IBM Watsonの提供。
    • OpenAI Whisper API: 高精度なクラウドベースのWhisper。
    • Groq Whisper API: Groqハードウェアによる高速推論。
    • Cohere Transcribe API: Cohereの文字起こしサービス。
  • セルフホストエンドポイント:

    • vLLMやOllamaなどのOpenAI互換エンドポイントをサポートし、独自の推論サーバーを実行する柔軟性を提供します。

はじめに

インストールはpipで簡単に行えます:

pip install SpeechRecognition

すぐにテストするには、以下を実行します:

python -m speech_recognition

これにより、デフォルトのマイクが使用され、Googleの無料APIを使って音声認識が試みられます。

基本的な使用例

マイクからの音声認識

import speech_recognition as sr

# 認識器の初期化
r = sr.Recognizer()

# デフォルトのマイクをソースとして使用
with sr.Microphone() as source:
    print("何か言ってください!")
    audio = r.listen(source)

# Google Speech Recognitionを使用して音声認識
try:
    text = r.recognize_google(audio)
    print(f"あなたは言いました: {text}")
except sr.UnknownValueError:
    print("音声を理解できませんでした")
except sr.RequestError as e:
    print(f"エラー: {e}")

音声ファイルの文字起こし

import speech_recognition as sr

r = sr.Recognizer()

with sr.AudioFile("path/to/audio.wav") as source:
    audio = r.record(source)

text = r.recognize_google(audio)
print(text)

音声データをファイルに保存

with sr.Microphone() as source:
    audio = r.listen(source)

# WAVファイルに保存
with open("recording.wav", "wb") as f:
    f.write(audio.get_wav_data())

環境ノイズへの調整

with sr.Microphone() as source:
    r.adjust_for_ambient_noise(source)
    print("環境ノイズに調整しました。何か言ってください!")
    audio = r.listen(source)

バックグラウンドでのリスニング

def callback(recognizer, audio):
    try:
        text = recognizer.recognize_google(audio)
        print(f"あなたは言いました: {text}")
    except sr.UnknownValueError:
        print("理解できませんでした")

r.listen_in_background(sr.Microphone(), callback)

# プログラムを実行し続ける
import time
while True:
    time.sleep(1)

インストールの詳細

PyAudio(マイク入力用)

Microphoneクラスを使用するにはPyAudioが必要です。以下でインストールします:

pip install SpeechRecognition[audio]

Linuxでは、システムパッケージが必要な場合があります:

sudo apt-get install portaudio19-dev python3-all-dev

PocketSphinx(オフラインSphinx)

pip install SpeechRecognition[pocketsphinx]

Vosk(オフラインVosk)

pip install SpeechRecognition[vosk]

その後、こちらからVoskモデルをダウンロードし、modelディレクトリに配置します。

Whisper(ローカル)

pip install SpeechRecognition[whisper-local]

Faster Whisper

pip install SpeechRecognition[faster-whisper]

OpenAI Whisper API

pip install SpeechRecognition[openai]

使用前に環境変数OPENAI_API_KEYを設定します。

Groq Whisper API

pip install SpeechRecognition[groq]

GROQ_API_KEYを設定します。

Cohere Transcribe API

pip install SpeechRecognition[cohere-api]

CO_API_KEYを設定します。

一般的な問題のトラブルシューティング

認識器が敏感すぎる、または十分に敏感でない

energy_thresholdプロパティを調整します。値は通常50から4000の範囲です。値が大きいほど感度が低くなり、騒がしい環境で役立ちます。

r.energy_threshold = 3000

最初のリスニングで認識器がハングする

リスニング前にadjust_for_ambient_noiseを呼び出して適切なしきい値を設定します。

デフォルトの入力デバイスがない

利用可能なマイクを一覧表示します:

import speech_recognition as sr
for index, name in enumerate(sr.Microphone.list_microphone_names()):
    print(f"`Microphone(device_index={index})`でマイク名「{name}」が見つかりました")

その後、Microphone(device_index=INDEX)を使用します。

言語/方言の問題

精度を向上させるために言語パラメータを設定します。例えば、イギリス英語には"en-GB"を使用します:

text = r.recognize_google(audio, language="en-GB")

結論

SpeechRecognitionは、さまざまな音声認識バックエンドの複雑さを抽象化する強力で柔軟なライブラリです。プライバシーのためのオフライン機能が必要な場合でも、本番環境向けのクラウドベースの精度が必要な場合でも、一貫したAPIを提供し、開発を迅速かつ保守しやすくします。WhisperやGroqなどの最新モデルをサポートしており、音声対応アプリケーションを構築するPython開発者にとって最良の選択肢であり続けています。

詳細な例やドキュメントについては、GitHubリポジトリをご覧ください。

ソース

Uberi/speech_recognition: Python用音声認識モジュール。複数のエンジンとAPIをオンライン・オフラインでサポート。