nikkie-ftnextの日記

イベントレポートや読書メモを発信

Python ライブラリ SpeechRecognition で、さくらのAI Engine の Whisper API を叩く 〜環境変数で openai SDK を設定できる〜

はじめに

七尾百合子さん、お誕生日 302日目 おめでとうございます! nikkieです。

メンテしている SpeechRecognition を さくらのAI Engine と奇跡的相性させます。

目次

さくらのAI Engine

YAPC::Fukuoka で知りました1

テキスト生成・分類・埋め込み・音声認識(whisper)に対応

OpenAI互換

無償プランあり

Chat completions だけでなく、Whisper を使った Audio transcription(音声認識)も可能です。
Whisper は「1ヶ月あたり50リクエストまで」無料です。

SpeechRecognition から簡単に叩けるなと気づいて、手を動かしました。

issue #850「Allow vllm hosted whisper models to be used with recognize_openai」

直近対応した issue です。
vLLM や ollama でホストした Whisper モデルを SpeechRecognition から利用したいという要望。

取り組む中で、現在の SpeechRecognition は OpenAI の Whisoer API 互換の API は、すでにサポートできていることに気づきました2
ドキュメントに記載し、テストコードでも pytest-httpserver で OpenAI の Whisper と互換な API を用意して3、動くことを確認しています。

ポイントは、依存している openai SDK環境変数です。

  • OPENAI_API_KEY: API キーを指定します
  • OPENAI_BASE_URL: OpenAI と互換な API エンドポイントを指定して、向き先を変えられます
    • https://api.ai.sakura.ad.jp/v1(この下の/audio/transcriptionsSDK が叩きます)

openai SDK 用に環境変数を設定し、SpeechRecognition で さくらのAI Engine の Whisper API を叩く

送る音声ファイルを作ります4macOS です)

% say 親譲りの無鉄砲で子供の時から損ばかりして いる -o sample.wav --data-format=LEI16@16000

inline script metadata を使っています。

% uv run --python 3.12 sakura_whisper.py
親譲りの無鉄砲で子供の時から損ばかりしている

計画通り!

終わりに

openai SDK環境変数を使って、OpenAI の API と互換な API に向けられます。

さくらのAI Engine では OpenAI の API と互換な API エンドポイントを提供しています。
今回は無料枠を利用して Whisper API に向けました。

設定する環境変数OPENAI_API_KEYOPENAI_BASE_URLです。
openai SDK に依存する SpeechRecognition も、さくらのAI Engine の Whisper API を利用できました!

OpenAI の音声認識(Whisper)API と互換な API を利用する際は、SpeechRecognition もぜひお試しください。
試していただくだけでも嬉しいですし、「ここがよかった」「ここいまいちに感じたので、もうちょっとなんとかならないか」といったお声もいただけるとなお嬉しいです。
応援ください

P.S.「そこの実装者、俺だもん」

openai SDK を組み込んだ部分は私が実装したので、熟知している身からはこんな実装もできます

1つの巨大な Recognizer よりも、用途ごとの小さな Recognizer の方が美しいよな〜と思い始めてます(試行錯誤中)


  1. Qwen を試しました。
  2. https://github.com/Uberi/speech_recognition/issues/850#issuecomment-3704315688
  3. インターフェースが揃っていれば、具体はなんでもよい(vLLM でも pytest-httpserver というテスト用モックサーバでもよい)という好例だと思いました
  4. wave.openするにはLEI16指定が必要と知りました。過去記事からのアップデートです。声をPythonに聴かせて(新章開幕!Whisperの環境構築、いっちゃうよ〜📣) - nikkie-ftnextの日記