2023/03/26
OpenAIのWhisper APIを使う
ChatGPT関連のネット記事を読んでいる中で、同社OpenAIが開発した音声認識AIのWhisperのAPIが利用できるようになったとの記事を見つけました。2023/3/1のOpenAIの記事によると、ChatGPTとWhisperモデルがAPIで利用できるようになり、開発者は最先端の言語(チャットだけでなく!)と音声テキスト変換機能にアクセスできるようになった。オープンソースのWhisper large-v2モデルをAPIで使用できることで、はるかに高速で費用対効果の高い結果が得られ、具体的には以下のことが可能になるとのこと。
・音声が含まれている言語に音声を書き起こす。
・音声を英語に翻訳して書き起こす。
ファイルのアップロードは現在25MBに制限されており、次の入力ファイルタイプがサポートされている: mp3、mp4、mpeg、mpga、m4a、wavおよびwebm。
今回、Whisper APIに加え、以前試したことがある、
① Google Documentの音声入力(無料)
② AzureのSpeechToTextサービス(一定使用までは無料)
も合わせて比較・評価してみました。
音声の題材は、稲盛和夫さんの経営講和の「成功の方程式」からの一節を使いました。

① Google Documentの音声入力
Google Documentで新規ファイル開いて「ツール ー 音声入力」を選択すると、準備は完了です。



・お経 → 経営 ・・ なぜ間違えるのか?確かに稲盛さんは得度されておられるが・・。
・何回 → なんかを
・なのいらないした後 → なんかいろいろないっぱい、こう ・・ 話し言葉で難?
・飲み慣れて → いうのはみんな挙げて
・雨が → アメリカ
・禿 → 挙
・だから → ですから
・は家でもですよ2分が → たちでもですね。運不運が
・よく✖️ → よく言われております。 ・・ 文末が勝手に消えている。
② AzureのSpeechToTextサービス
以下のPythonコードを実行させました。AzureのCognitiveServiceのSpeechサービスのKeyアカウントが必要で6行目に指定しておきます。音声ファイルは9行目です。
import azure.cognitiveservices.speech as speechsdk実行結果は以下の通りでした。Google Documentよりは改善されたものでした。
import time
import re
def from_file():
speech_config = speechsdk.SpeechConfig("・・My key・・", "japaneast")
speech_config.speech_recognition_language="ja-JP"
audio_input = speechsdk.AudioConfig(filename="./inamori.wav")
speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config, audio_config=audio_input)
print("Recognizing first result...")
done = False
def stop_cb(evt):
print('CLOSING on {}'.format(evt))
nonlocal done
done = True
#認識部分だけを取り出します。
def split(evt):
st = re.search(r'\".+?\"',str(evt))
print(st.group(0).strip('"'))
# 認識を行った時の設定
speech_recognizer.recognized.connect(split)
# 認識が終わる時の設定
speech_recognizer.session_stopped.connect(stop_cb)
speech_recognizer.canceled.connect(stop_cb)
# 処理前の時刻
t1 = time.time()
# 認識開始
speech_recognizer.start_continuous_recognition()
# 音声が終わるまでループを続けます
while not done:
time.sleep(.5)
# 認識終了
speech_recognizer.stop_continuous_recognition()
# 処理後の時刻
t2 = time.time()
# 経過時間を表示
elapsed_time = t2-t1
print(f"経過時間:{elapsed_time}")
from_file()

・ふーん → 不運
・ヒーローに適 → 非論理的 ・・ 音は合っている?・・(笑)
・賞 → 書
・ふんふん → 運不運
③ OpenAIのWhisper API
参考サイトを元に、以下のPythonコードを実行させました。4行目でOpenAIのキーを設定し、6行目で音声ファイルを指定して、7行目でWhisperAPIを呼び出しています。
import os実行結果は以下の通りでした。見ての通り、GoogleDocumentやAzureのSpeechToTextに比べ、誤認識が少ない結果でした。
import openai
openai.api_key = " ** My Openai key ** "
audio_file= open("./inamori.wav", "rb")
transcript = openai.Audio.transcribe("whisper-1", audio_file)
print(transcript["text"])

・なんかいろんな → いろいろな
・いっぱいこう、あの → いっぱい
・条件をですね → 条件も
・良くないというふうによく言われております → 良くないとよく言われております
今回の評価で、OpenAIのWhisper APIがGoogleDocumentやAzureのSpeechToTextに比べて、一番精度が良い音声認識結果であると考えました。今回、このAPIを利用した際の費用は、67secの音声で0.01$程度(1.3円程度)でした。文字起こしを行う手間を考えると、良心的な価格と思いました。