Python入門トップページ


目次

  1. Windows での準備
  2. Mac での準備
  3. Whisper による音声認識

Whisper で音声認識をしてみよう

Whisper による音声認識

Whisper ではサイズの異なる5種類の学習済みモデルが公開されています.これをダウンロードして読み込むと,簡単に音声認識を実行できます.サイズの大きな学習済みモデルでは高い精度で認識が可能です.その一方で認識には多くの時間を要し,実行時の消費メモリも大きくなるので注意が必要です.

利用できるモデルの一覧は次のとおりです.なお,消費メモリや実行時間は M1 Max チップ(32GBメモリ)搭載の Mac Studio でおよそ30秒の音声データを認識した結果です.搭載メモリの小さなPCでサイズの大きなモデルを利用すると,計算できなかったり,計算に長時間かかる可能性があります.

モデル
ファイルサイズ
パラメータ数
消費メモリ
実行時間
tiny 72MB 3900万 100MB 7秒
base 139MB 7400万 500MB 3秒
small 461MB 2億4400万 1.3GB 15秒
medium 1.42GB 7億6900万 3.5GB 45秒
large 2.87GB 15億5000万 6.5GB 80秒

それでは実際に音声認識を行います.今回利用した音声データは audio.m4a ファイルで,プログラムと同じフォルダに置いているものとします.なお,.m4a 形式以外にも .mp3 など多くのファイル形式で認識できるようです.まずは whisper をインポートします.


import whisper

次に最も小さな tiny モデルを読み込みます.初めて実行するときには学習済みモデルがダウンロードされます.なお,ダウンロードされた学習済みモデルは Mac では ~/.cashe/whisper/ に,Windows では C:\Users\UserName\.cache\whisper\ に保存されます.


model = whisper.load_model('tiny')
100%|█████████████████████████████████████| 72.1M/72.1M [00:02<00:00, 33.6MiB/s]

音声認識を実行します.なお,%%time は実行時間を計測するためのマジックコマンドです.


%%time
result = model.transcribe('audio.m4a', fp16=False)
CPU times: user 6.56 s, sys: 1.85 s, total: 8.41 s
Wall time: 5.02 s

認識結果を確認します.


print(result['text'])
パイソン現語はオブジェクト仕方現語の一つです。パイソンでは数字や関数などすべてをオブジェクトとして扱います。生数型のオブジェクトやリストのオブジェクトなど様々なものが利用できます。独自のカスタムオブジェクトを作成することもできます。このカスタムオブジェクトでは、独製とメソットを定義して人まと目で管理することができるようになります。овd

なお,resultには次のような結果が格納されています.


print(result)
{'text': 'パイソン現語はオブジェクト仕方現語の一つです。パイソンでは数字や関数などすべてをオブジェクトとして扱います。生数型のオブジェクトやリストのオブジェクトなど様々なものが利用できます。独自のカスタムオブジェクトを作成することもできます。このカスタムオブジェクトでは、独製とメソットを定義して人まと目で管理することができるようになります。小さいアイスタムオブジェクトでは、独製とメソットを作成することができるようになりました。独製とメソットを作成することができるようになります。', 'segments': [{'id': 0, 'seek': 0, 'start': 0.0, 'end': 11.5, 'text': 'パイソン現語はオブジェクト仕方現語の一つです。パイソンでは数字や関数などすべてをオブジェクトとして扱います。', 'tokens': [23268, 8040, 42668, 4824, 9581, 31348, 3065, 18743, 28889, 14655, 28571, 10825, 7588, 1550, 243, 9249, 9581, 31348, 2972, 2257, 9335, 4767, 1543, 23268, 8040, 42668, 4824, 16719, 33188, 22381, 7355, 5196, 95, 33188, 3203, 7594, 2659, 28043, 2996, 5998, 18743, 28889, 14655, 28571, 10825, 7588, 3193, 8822, 3416, 109, 11267, 1543], 'temperature': 0.0, 'avg_logprob': -0.2949866524225549, 'compression_ratio': 1.9453125, 'no_speech_prob': 0.13070355355739594}, {'id': 1, 'seek': 0, 'start': 11.5, 'end': 16.98, 'text': '生数型のオブジェクトやリストのオブジェクトなど様々なものが利用できます。', 'tokens': [8244, 33188, 39823, 2972, 18743, 28889, 14655, 28571, 10825, 7588, 7355, 12376, 40498, 2972, 18743, 28889, 14655, 28571, 10825, 7588, 3203, 7594, 49261, 45032, 3203, 44726, 5142, 23700, 9254, 2474, 22851, 1543], 'temperature': 0.0, 'avg_logprob': -0.2949866524225549, 'compression_ratio': 1.9453125, 'no_speech_prob': 0.13070355355739594}, {'id': 2, 'seek': 0, 'start': 16.98, 'end': 20.98, 'text': '独自のカスタムオブジェクトを作成することもできます。', 'tokens': [18637, 105, 9722, 2972, 10111, 9550, 12144, 32026, 18743, 28889, 14655, 28571, 10825, 7588, 5998, 11914, 11336, 22570, 13235, 4801, 2474, 22851, 1543], 'temperature': 0.0, 'avg_logprob': -0.2949866524225549, 'compression_ratio': 1.9453125, 'no_speech_prob': 0.13070355355739594}, {'id': 3, 'seek': 0, 'start': 20.98, 'end': 29.5, 'text': 'このカスタムオブジェクトでは、独製とメソットを定義して人まと目で管理することができるようになります。', 'tokens': [13303, 10111, 9550, 12144, 32026, 18743, 28889, 14655, 28571, 10825, 7588, 16719, 1231, 18637, 105, 8083, 121, 3193, 21647, 42668, 31978, 5998, 12088, 37430, 8822, 4035, 2889, 3193, 11386, 2474, 23131, 13876, 22570, 13235, 5142, 43200, 4895, 17010, 22615, 19420, 1543], 'temperature': 0.0, 'avg_logprob': -0.2949866524225549, 'compression_ratio': 1.9453125, 'no_speech_prob': 0.13070355355739594}, {'id': 4, 'seek': 2950, 'start': 29.5, 'end': 36.5, 'text': '小さいアイスタムオブジェクトでは、独製とメソットを作成することができるようになりました。', 'tokens': [7322, 19557, 12817, 8040, 9550, 12144, 32026, 18743, 28889, 14655, 28571, 10825, 7588, 16719, 1231, 18637, 105, 8083, 121, 3193, 21647, 42668, 31978, 5998, 11914, 11336, 22570, 13235, 5142, 43200, 4895, 17010, 22615, 36941, 1543], 'temperature': 0.4, 'avg_logprob': -0.9031797315253586, 'compression_ratio': 1.7796610169491525, 'no_speech_prob': 0.0367562472820282}, {'id': 5, 'seek': 2950, 'start': 36.5, 'end': 43.5, 'text': '独製とメソットを作成することができるようになります。', 'tokens': [18637, 105, 8083, 121, 3193, 21647, 42668, 31978, 5998, 11914, 11336, 22570, 13235, 5142, 43200, 4895, 17010, 22615, 19420, 1543], 'temperature': 0.4, 'avg_logprob': -0.9031797315253586, 'compression_ratio': 1.7796610169491525, 'no_speech_prob': 0.0367562472820282}], 'language': 'ja'}

モデル名を変更するだけでサイズの異なるモデルで実行が可能です.例えば base モデルに変更してみます.


model = whisper.load_model('base')
result = model.transcribe('audio.m4a', fp16=False)

全てのモデルで実行した認識結果をまとめます.この結果を見る限り,small 以上のモデルが良さそうです.

モデル
認識結果
tiny パイソン現語はオブジェクト仕方現語の一つです。パイソンでは数字や関数などすべてをオブジェクトとして扱います。生数型のオブジェクトやリストのオブジェクトなど様々なものが利用できます。独自のカスタムオブジェクトを作成することもできます。このカスタムオブジェクトでは、独製とメソットを定義して人まと目で管理することができるようになります。овd
base パイソン言語はオブジェクト 四高言語の一つですパイソンでは数値や関数などを全てをオブジェクトとして扱います生数型のオブジェクトやリストのオブジェクトなど様々なものが利用できます独自のカスタムオブジェクトを作成することもできますこのカスタムオブジェクトでは続生とメソッドを定義して人まとめで管理することができるようになりますこのカスタムオブジェクトを作成することもできます
small Python言語はオブジェクト思考言語の一つです.pythonでは数値や関数など全てをオブジェクトとして扱います.整数型のオブジェクトやリストのオブジェクトなど様々なものが利用できます.独自のカスタムオブジェクトを作成することもできます.このカスタムオブジェクトでは属性とメソッドを定義して一まとめで管理することができるようになります.
medium Python 言語はオブジェクト指向言語の一つです Python では数値や関数などすべてをオブジェクトとして扱います 整数型のオブジェクトやリストのオブジェクトなど様々なものが利用できます 独自のカスタムオブジェクトを作成することもできます このカスタムオブジェクトでは属性とメソッドを定義して 一まとめで管理することができるようになりますご覧いただきありがとうございます
large Python言語はオブジェクト思考言語の一つです。Pythonでは数値や関数などすべてをオブジェクトとして扱います。整数型のオブジェクトやリストのオブジェクトなど、様々なものが利用できます。独自のカスタムオブジェクトを作成することもできます。このカスタムオブジェクトでは、属性とメソッドを定義して、数値とメソッドのまとめで管理することができるようになります。

目次に戻る