NetBSDでspeech-to-textをしてみる

この記事は、NetBSD Advent Calendar 2024の15日目の記事です。

speech-to-textエンジンを選ぶ

音声からテキストに変換してくれるのが、speech-to-textエンジンです。 OpenAIのWhisper v3というのが、13日目に触れたllama.cppと同じ作者による whisper.cppで利用できるようです。 pkgsrc/wip/whisper.cppからインストールできるようにしたので、それを使ってみることにします。

whisper.cppのインストール

pkgsrc/wip/whisper.cppとして利用できるので、The pkgsrc-wip projectのページを参考に/usr/pkgsrc/wipに用意しておきます。 用意ができたら、以下のようにインストールすれば良いでしょう。

# cd /usr/pkgsrc/wip/whispwer.cpp
# make install

併わせて、ggml形式のWhisper large V3モデルファイルも入手しておきます。 modelsディレクトリーを作って、ggml-large-v3.binというファイル名で置いておくことにします。

whisper.cppへの入力を用意する

LibriVoxというパブリックドメインなテキストを読んたパブリックドメインな音声のMP3ファイルを公開しているプロジェクトがあります。 そこに、新美南吉の「手袋を買いに」をテキスト化してもらうようにします。 ちなみに、「手袋を買いに」は小学校の教科書には既に採用されていないようです。

pkgsrc/wip/whisper.cppは、16ビットのWAVファイルが入力ファイルになるようです。ffmpegでの変換例が提供されているので、以下のようにしてみます。

# cd /usr/pkgsrc/multimedia/ffmpeg7
# make install
$ ftp https://www.archive.org/download/multilingual_shorts_006_1303/msw006_03_tebukurowokaini_niimi_um.mp3
$ ffmpeg7 -y -i msw006_03_tebukurowokaini_niimi_um.mp3 -ar 16000 -ac 1 -c:a pcm_s16le msw006_03_tebukurowokaini_niimi_um.wav

これで、msw006_03_tebukurowokaini_niimi_um.wavという入力ファイルが準備できました。

speech-to-textを実行してみる

llama.cppのように多くのパラメーターはなさそうです。日本語を設定しないと奇妙なテキストが生成されたり、英訳されたテキストが生成されたりするので、-l jaと指定して、日本語を設定するようにします。 結果も含めて、以下のようです。

$ whisper-cli -l ja -m ./models/ggml-large-v3.bin msw006_03_tebukurowokaini_niimi_um.wav
size=   21295KiB time=00:11:21.42 bitrate= 256.0kbits/s speed=2.53e+03x
whisper_init_from_file_with_params_no_state: loading model from './models/ggml-large-v3.bin'
whisper_init_with_params_no_state: use gpu    = 1
whisper_init_with_params_no_state: flash attn = 0
whisper_init_with_params_no_state: gpu_device = 0
whisper_init_with_params_no_state: dtw        = 0
whisper_init_with_params_no_state: devices    = 2
whisper_init_with_params_no_state: backends   = 2
whisper_model_load: loading model
whisper_model_load: n_vocab       = 51866
whisper_model_load: n_audio_ctx   = 1500
whisper_model_load: n_audio_state = 1280
whisper_model_load: n_audio_head  = 20
whisper_model_load: n_audio_layer = 32
whisper_model_load: n_text_ctx    = 448
whisper_model_load: n_text_state  = 1280
whisper_model_load: n_text_head   = 20
whisper_model_load: n_text_layer  = 32
whisper_model_load: n_mels        = 128
whisper_model_load: ftype         = 1
whisper_model_load: qntvr         = 0
whisper_model_load: type          = 5 (large v3)
whisper_model_load: adding 1609 extra tokens
whisper_model_load: n_langs       = 100
whisper_model_load:      CPU total size =  3094.36 MB
whisper_model_load: model size    = 3094.36 MB
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size  =   83.89 MB
whisper_init_state: kv cross size =  251.66 MB
whisper_init_state: kv pad  size  =    7.86 MB
whisper_init_state: compute buffer (conv)   =   36.13 MB
whisper_init_state: compute buffer (encode) =  212.29 MB
whisper_init_state: compute buffer (cross)  =    9.25 MB
whisper_init_state: compute buffer (decode) =   99.10 MB

system_info: n_threads = 4 / 16 | AVX = 1 | AVX2 = 1 | AVX512 = 1 | FMA = 1 | NEON = 0 | ARM_FMA = 0 | F16C = 1 | FP16_VA = 0 | WASM_SIMD = 0 | SSE3 = 1 | SSSE3 = 1 | VSX = 0 | COREML = 0 | OPENVINO = 0 |

main: processing 'msw006_03_tebukurowokaini_niimi_um.mp3.wav' (10902837 samples, 681.4 sec), 4 threads, 1 processors, 5 beams + best of 5, lang = ja, task = transcribe, timestamps = 1 ...


[00:00:00.480 --> 00:00:03.720]  リブリボックス ドットオグのために録音されました
[00:00:03.720 --> 00:00:07.420]  手袋を買いに 新見南吉
[00:00:07.420 --> 00:00:13.460]  寒い冬が北方から 狐の親子の住んでいる森へもやってきました
[00:00:13.460 --> 00:00:18.600]  ある朝 ほら穴から子供の狐が出ようとしましたが
[00:00:18.600 --> 00:00:24.340]  アッと叫んで 目を押さえながら 母さん狐のところ へ転げてきました
[00:00:25.440 --> 00:00:31.040]  母ちゃん 目に何か刺さった 抜いてちょうだい 早く早くと言いました
[00:00:31.040 --> 00:00:36.200]  母さん狐がびっくりして 慌てふためきながら
[00:00:36.200 --> 00:00:39.980]  目を押さえている子供の手を おそるおそる取り除けてみましたが
[00:00:39.980 --> 00:00:42.540]  何も刺さってはいませんでした
[00:00:42.540 --> 00:00:48.960]  母さん狐は ほら穴の入口から外へ出て 初めて脇が わかりました
[00:00:48.960 --> 00:00:53.640]  昨夜のうちに 真っ白な雪がどっさり降ったのです
[00:00:54.720 --> 00:00:59.280]  その雪の上から お日様がキラキラと照らしていたので
[00:00:59.280 --> 00:01:02.960]  雪はまぶしいほど 反射していたのです
[00:01:02.960 --> 00:01:08.120]  雪を知らなかった子供の狐は あまり強い反射を受けたので
[00:01:08.120 --> 00:01:12.460]  目に何か刺さったと思ったのでした
[00:01:12.460 --> 00:01:15.660]  子供の狐は遊びに行きました
[00:01:15.660 --> 00:01:19.140]  真綿のように 柔らかい雪の上を駆け回ると
[00:01:19.140 --> 00:01:24.000]  雪の粉がしぶきのように飛び散って 小さい虹がすっと映るのでした
[00:01:24.000 --> 00:01:31.960]  すると突然 後ろでドタドタザーッと ものすごい音 がして
[00:01:31.960 --> 00:01:38.040]  パン粉のような粉雪が ふわっと子狐におっかぶさってきました
[00:01:38.040 --> 00:01:42.180]  子狐はびっくりして雪の中に転がるようにして
[00:01:42.180 --> 00:01:45.480]  10メートルも向こうへ逃げました
[00:01:45.480 --> 00:01:51.060]  何だろうと思って振り返ってみましたが 何もいませんでした
[00:01:51.060 --> 00:01:53.280]  それは モミの枝から雪がなだれ出てきたので
[00:01:53.280 --> 00:02:01.240]  まだ枝と枝の間から白い絹糸のように 雪がこぼれていました
[00:02:01.240 --> 00:02:05.520]  まもなくほら穴へ帰ってきた小狐は
[00:02:05.520 --> 00:02:11.160]  「お母ちゃん おててが冷たい おててがチンチンす る」と言って
[00:02:11.160 --> 00:02:16.160]  濡れてボタン色になった両手を 母さん狐の前に差し出しました
[00:02:16.160 --> 00:02:21.360]  母さん狐はその手に ハーッと息をふっかけて
[00:02:21.360 --> 00:02:23.080]  ぬくとい母さんの声を聞きました
[00:02:23.080 --> 00:02:23.100]  母さんの声を聞きました
[00:02:23.100 --> 00:02:23.200]  母さんの声を聞きました
[00:02:23.200 --> 00:02:25.400]  母さんの手でやんわり包んでやりながら
[00:02:25.400 --> 00:02:32.860]  「もうすぐ暖かくなるよ 雪をさわると すぐ暖かく なるもんだよ」と言いましたが
[00:02:32.860 --> 00:02:37.180]  かわいい坊やの手にひもやきができては かわいそうだから
[00:02:37.180 --> 00:02:45.020]  夜になったら町まで行って坊やのおててに合うよう な 毛糸の手袋を買ってやろうと思いました
[00:02:45.020 --> 00:02:52.820]  暗い暗い夜が風呂敷のような影を広げて 野原や森を包みにやってきましたが
[00:02:52.820 --> 00:02:53.020]  母さんの手でやんわり包んでやりながら もうすぐ暖かくなるよ 雪をさわるとすぐ暖かくなるもんだよ と言いましたが
[00:02:53.020 --> 00:02:59.300]  雪はあまり白いので包んでも包んでも 白く浮かび上がっていました
[00:02:59.300 --> 00:03:03.200]  親子の銀狐はほら穴から出ました
[00:03:03.200 --> 00:03:11.960]  子供の方はお母さんのお腹の下へ入り込んで そこからまんまるな目をパチパチさせながら
[00:03:11.960 --> 00:03:14.540]  あっちやこっちを見ながら歩いていきました
[00:03:14.540 --> 00:03:19.400]  やがて行く手にぽっつり明かりが一つ見え始めまし た
[00:03:19.400 --> 00:03:22.300]  それを子供の狐が見つけて
[00:03:22.300 --> 00:03:22.640]  子供の狐が見つけて
[00:03:22.640 --> 00:03:28.160]  母ちゃん お星さまはあんな低いところにも落ちてるのね と聞きました
[00:03:28.160 --> 00:03:32.060]  あれはお星さまじゃないのよ と言って
[00:03:32.060 --> 00:03:35.620]  その時 母さん狐の足はすくんでしまいました
[00:03:35.620 --> 00:03:38.700]  あれは町の火なんだよ
[00:03:38.700 --> 00:03:42.400]  その町の火を見た時 母さん狐は
[00:03:42.400 --> 00:03:47.620]  ある時町へお友達と出かけて行って 飛んだ目にあったことを思い出しました
[00:03:47.620 --> 00:03:50.580]  およしなさいって言うのも聞かないで
[00:03:50.580 --> 00:03:52.260]  お友達の狐が
[00:03:52.260 --> 00:03:54.860]  ある家のアヒルを盗もうとしたので
[00:03:54.860 --> 00:03:56.740]  お百姓に見つかって
[00:03:56.740 --> 00:03:58.340]  さんざ追いまくられて
[00:03:58.340 --> 00:04:00.700]  命からがら逃げたことでした
[00:04:00.700 --> 00:04:03.260]  母ちゃん 何してんの
[00:04:03.260 --> 00:04:04.540]  早く行こうよ
[00:04:04.540 --> 00:04:05.980]  と子供の狐が
[00:04:05.980 --> 00:04:08.320]  お腹の下から言うのでしたが
[00:04:08.320 --> 00:04:11.980]  母さん狐はどうしても足がすまないのでした
[00:04:11.980 --> 00:04:14.580]  そこで仕方がないので
[00:04:14.580 --> 00:04:17.760]  坊やだけを一人で町まで行かせることになりました
[00:04:17.760 --> 00:04:21.880]  坊やお手手を片方を出しと
[00:04:21.880 --> 00:04:23.380]  お母さん狐が言いました
[00:04:23.380 --> 00:04:26.240]  その手を母さん狐は
[00:04:26.240 --> 00:04:27.940]  しばらく握っている間に
[00:04:27.940 --> 00:04:31.000]  かわいい人間の子供の手にしてしまいました
[00:04:31.000 --> 00:04:33.140]  坊やの狐は
[00:04:33.140 --> 00:04:35.340]  その手を広げたり握ったり
[00:04:35.340 --> 00:04:36.440]  つねってみたり
[00:04:36.440 --> 00:04:37.440]  かいでみたりしました
[00:04:37.440 --> 00:04:40.160]  なんだか変だなあ母ちゃん
[00:04:40.160 --> 00:04:41.060]  これなあに
[00:04:41.060 --> 00:04:42.080]  と言って
[00:04:42.080 --> 00:04:43.260]  雪あかりに
[00:04:43.260 --> 00:04:46.220]  またその人間の手にかえられてしまった
[00:04:46.220 --> 00:04:48.860]  自分の手をしげしげと見つめました
[00:04:48.860 --> 00:04:51.800]  それは人間の手よ
[00:04:51.800 --> 00:04:53.840]  いいかい坊や
[00:04:53.840 --> 00:04:55.120]  町へ行ったらね
[00:04:55.120 --> 00:04:57.500]  たくさん人間の家があるからね
[00:04:57.500 --> 00:05:02.820]  まず表に丸いシャッポの看板のかかっている家を探 すんだよ
[00:05:02.820 --> 00:05:04.780]  それが見つかったらね
[00:05:04.780 --> 00:05:06.980]  トントンと戸をたたいて
[00:05:06.980 --> 00:05:09.360]  こんばんはって言うんだよ
[00:05:09.360 --> 00:05:10.460]  そうするとね
[00:05:10.460 --> 00:05:14.080]  中から人間が少し戸を開けるからね
[00:05:14.080 --> 00:05:16.800]  その戸の隙間からこっちの手
[00:05:16.800 --> 00:05:19.580]  ほらこの人間の手を差し入れてね
[00:05:19.580 --> 00:05:21.720]  この手にちょうどいい手袋をちょうだいと
[00:05:21.720 --> 00:05:23.400]  言うんだよ
[00:05:23.400 --> 00:05:24.680]  分かったね
[00:05:24.680 --> 00:05:27.640]  決してこっちのお手手を出しちゃだめよ
[00:05:27.640 --> 00:05:30.480]  と母さん狐は言い聞かせました
[00:05:30.480 --> 00:05:31.440]  どうして
[00:05:31.440 --> 00:05:34.420]  と坊やの狐は聞き返しました
[00:05:34.420 --> 00:05:35.640]  人間はね
[00:05:35.640 --> 00:05:37.540]  相手が狐だと分かると
[00:05:37.540 --> 00:05:39.520]  手袋を売ってくれないんだよ
[00:05:39.520 --> 00:05:40.600]  それどころか
[00:05:40.600 --> 00:05:43.580]  捕まえて俺の中へ入れちゃうんだよ
[00:05:43.580 --> 00:05:47.900]  人間って本当に怖いものなんだよ
[00:05:47.900 --> 00:05:50.440]  決してこっちの手を出しちゃいけないよ
[00:05:50.440 --> 00:05:51.640]  こっちの方
[00:05:51.640 --> 00:05:54.260]  ほら人間の手の方を差し出すんだよ
[00:05:54.260 --> 00:05:55.260]  と言って
[00:05:55.260 --> 00:05:58.740]  母さんの狐は持ってきた二つの白銅貨を
[00:05:58.740 --> 00:06:02.520]  人間の手の方へ握らせてやりました
[00:06:02.520 --> 00:06:05.180]  子供の狐は町の火を目当てに
[00:06:05.180 --> 00:06:09.060]  雪明かりの野原をよちよちやっていきました
[00:06:09.060 --> 00:06:11.600]  初めのうちは一つきりだった火が
[00:06:11.600 --> 00:06:13.720]  二つになり三つになり
[00:06:13.720 --> 00:06:16.440]  果ては十にも増えました
[00:06:16.440 --> 00:06:18.360]  狐の子供はそれを見て
[00:06:18.360 --> 00:06:20.300]  日には星と同じように
[00:06:20.300 --> 00:06:21.260]  赤いのや
[00:06:21.260 --> 00:06:25.120]  黄のや青いのがあるんだなと思いました
[00:06:25.120 --> 00:06:27.160]  やがて町に入りましたが
[00:06:27.160 --> 00:06:30.780]  通りの家々はもうみんな扉を閉めてしまって
[00:06:30.780 --> 00:06:33.620]  高い窓から暖かそうな光が
[00:06:33.620 --> 00:06:37.360]  道の雪の上に落ちているばかりでした
[00:06:37.360 --> 00:06:39.740]  けれど表の看板の上には
[00:06:39.740 --> 00:06:42.940]  たいてい小さな電灯が灯っていましたので
[00:06:42.940 --> 00:06:47.480]  狐の子はそれを見ながら帽子屋を探していきました
[00:06:47.480 --> 00:06:48.180]  自転車の看板の上には
[00:06:48.180 --> 00:06:50.140]  メガネの看板や
[00:06:50.140 --> 00:06:54.140]  その他いろんな看板があるものは
[00:06:54.140 --> 00:06:55.940]  新しいペンキで描かれ
[00:06:55.940 --> 00:06:59.380]  あるものは古い壁のように生えていましたが
[00:06:59.380 --> 00:07:02.100]  町に初めて出てきた小狐には
[00:07:02.100 --> 00:07:05.940]  それらのものが一体何であるかわからないのでした
[00:07:05.940 --> 00:07:09.000]  とうとう帽子屋が見つかりました
[00:07:09.000 --> 00:07:12.680]  お母さんがみちみちよく教えてくれた
[00:07:12.680 --> 00:07:15.980]  黒い大きなシルクハットの帽子の看板が
[00:07:15.980 --> 00:07:18.000]  青い電灯に照らされて
[00:07:18.000 --> 00:07:20.260]  かかっていました
[00:07:20.260 --> 00:07:22.780]  小狐は教えられた通り
[00:07:22.780 --> 00:07:25.740]  トントンと戸を叩きました
[00:07:25.740 --> 00:07:27.200]  こんばんは
[00:07:27.200 --> 00:07:31.120]  すると中では何かコトコト音がしていましたが
[00:07:31.120 --> 00:07:34.680]  やがて戸が一寸ほどごろりと開いて
[00:07:34.680 --> 00:07:39.240]  光の帯が道の白い雪の上に長く伸びました
[00:07:39.240 --> 00:07:41.880]  小狐はその光がまばゆかったので
[00:07:41.880 --> 00:07:44.900]  面くらって間違った方の手を
[00:07:44.900 --> 00:07:47.820]  お母様が出しちゃいけないと言ってよく聞かせたの ですが
[00:07:47.820 --> 00:07:51.840]  隙間から差し込んでしまいました
[00:07:51.840 --> 00:07:55.400]  このお手手にちょうどいい手袋ください
[00:07:55.400 --> 00:07:58.700]  すると帽子屋さんはおやおやと思いました
[00:07:58.700 --> 00:08:00.340]  狐の手です
[00:08:00.340 --> 00:08:03.580]  狐の手が手袋をくれと言うのです
[00:08:03.580 --> 00:08:07.240]  これはきっと木の葉で買いに来たんだなと思いまし た
[00:08:07.240 --> 00:08:08.540]  そこで
[00:08:08.540 --> 00:08:11.660]  先にお金をくださいと言いました
[00:08:11.660 --> 00:08:15.160]  小狐は素直に握ってきた白銅貨を二つ
[00:08:15.160 --> 00:08:17.640]  帽子屋さんに渡しました
[00:08:17.640 --> 00:08:20.740]  帽子屋さんはそれを人差し指の先に乗っけて
[00:08:20.740 --> 00:08:22.300]  勝ち合わせてみると
[00:08:22.300 --> 00:08:25.000]  チンチンとよい音がしましたので
[00:08:25.000 --> 00:08:26.920]  これは木の葉じゃない
[00:08:26.920 --> 00:08:29.420]  本当のお金だと思いましたので
[00:08:29.420 --> 00:08:33.900]  棚から子供用の毛糸の手袋を取り出してきて
[00:08:33.900 --> 00:08:35.760]  小狐の手に持たせてやりました
[00:08:35.760 --> 00:08:38.740]  小狐はお礼を言ってまた
[00:08:38.740 --> 00:08:40.920]  元来た道を帰り始めました
[00:08:40.920 --> 00:08:46.260]  お母さんは人間は恐ろしいものだっておっしゃった が
[00:08:46.260 --> 00:08:47.460]  ちっとも恐ろしくなってしまいました
[00:08:47.460 --> 00:08:52.940]  だって僕の手を見てもどうもしなかったものと思い ました
[00:08:52.940 --> 00:08:58.620]  けれど小狐は一体人間なんてどんなものか見たいと 思いました
[00:08:58.620 --> 00:09:03.580]  ある窓の下を通りかかると人間の声がしていました
[00:09:03.580 --> 00:09:07.220]  なんという優しいなんという美しい
[00:09:07.220 --> 00:09:09.780]  なんというほっとりした声なんでしょう
[00:09:09.780 --> 00:09:13.760]  眠れ眠れ母の胸に
[00:09:13.760 --> 00:09:16.840]  眠れ眠れ母の手に
[00:09:17.280 --> 00:09:22.920]  小狐はその歌声はきっと人間のお母さんの声に違い ないと思いました
[00:09:22.920 --> 00:09:26.620]  だって小狐が眠るときにも
[00:09:26.620 --> 00:09:31.300]  やっぱり母さん狐はあんな優しい声でゆすぶってく れるからです
[00:09:31.300 --> 00:09:34.400]  すると今度は子供の声がしました
[00:09:34.400 --> 00:09:38.380]  母ちゃんこんな寒い夜は
[00:09:38.380 --> 00:09:41.520]  森の小狐は寒い寒いって泣いてるでしょうね
[00:09:41.520 --> 00:09:44.100]  すると母さんの声が
[00:09:44.100 --> 00:09:47.100]  森の小狐もお母さんの声を聞きました
[00:09:47.100 --> 00:09:48.240]  小狐のお歌を聞いて
[00:09:48.240 --> 00:09:51.300]  ほら穴の中で眠ろうとしているでしょうね
[00:09:51.300 --> 00:09:54.420]  さあ坊やも早くねんねしなさい
[00:09:54.420 --> 00:09:56.620]  森の小狐と坊やと
[00:09:56.620 --> 00:09:58.620]  どっちが早くねんねするか
[00:09:58.620 --> 00:10:01.940]  きっと坊やの方が早くねんねしますよ
[00:10:01.940 --> 00:10:04.380]  それを聞くと小狐は
[00:10:04.380 --> 00:10:06.460]  急にお母さんが恋しくなって
[00:10:06.460 --> 00:10:10.100]  お母さん狐の待っている方へ飛んでいきました
[00:10:10.100 --> 00:10:13.980]  お母さん狐は心配しながら
[00:10:13.980 --> 00:10:15.780]  坊やの狐の帰ってくるのを
[00:10:15.780 --> 00:10:16.920]  今か今かと
[00:10:16.920 --> 00:10:18.820]  震えながら待っていましたので
[00:10:18.820 --> 00:10:20.520]  坊やが来ると
[00:10:20.520 --> 00:10:22.100]  温かい胸に抱きしめて
[00:10:22.100 --> 00:10:24.040]  泣きたいほど喜びました
[00:10:24.040 --> 00:10:28.160]  2匹の狐は森の方へ帰っていきました
[00:10:28.160 --> 00:10:30.040]  月が出たので
[00:10:30.040 --> 00:10:32.760]  狐の毛並みが銀色に光り
[00:10:32.760 --> 00:10:35.580]  その足跡にはコバルトの影がたまりました
[00:10:35.580 --> 00:10:40.280]  母ちゃん人間ってちっとも怖かないや
[00:10:40.280 --> 00:10:41.340]  どうして
[00:10:41.340 --> 00:10:45.100]  坊間違えて本当のお手手出しちゃったの
[00:10:45.100 --> 00:10:46.740]  でも坊やさん
[00:10:46.740 --> 00:10:48.440]  捕まえやしなかったもの
[00:10:48.440 --> 00:10:51.920]  ちゃんとこんないい温かい手袋くれたもの
[00:10:51.920 --> 00:10:53.400]  と言って
[00:10:53.400 --> 00:10:55.840]  手袋のはまった両手を
[00:10:55.840 --> 00:10:57.240]  パンパンやってみせました
[00:10:57.240 --> 00:10:59.280]  お母さん狐は
[00:10:59.280 --> 00:11:01.300]  まあと呆れましたが
[00:11:01.300 --> 00:11:04.160]  本当に人間はいいものかしら
[00:11:04.160 --> 00:11:07.400]  本当に人間はいいものかしら
[00:11:07.400 --> 00:11:08.560]  と呟きました
[00:11:08.560 --> 00:11:11.060]  手袋を買いに
[00:11:11.060 --> 00:11:13.080]  にみなんきち終わり
[00:11:13.080 --> 00:11:16.080]  この録音はパブリックドメインです
[00:11:16.740 --> 00:11:21.400]  ご視聴ありがとうございました


whisper_print_timings:     load time =  1491.99 ms
whisper_print_timings:     fallbacks =   1 p /   8 h
whisper_print_timings:      mel time =   550.17 ms
whisper_print_timings:   sample time = 38510.57 ms / 18110 runs (    2.13 ms per run)
whisper_print_timings:   encode time = 322445.44 ms /    24 runs (13435.23 ms per run)
whisper_print_timings:   decode time =  4208.81 ms /    46 runs (   91.50 ms per run)
whisper_print_timings:   batchd time = 702576.00 ms / 17948 runs (   39.15 ms per run)
whisper_print_timings:   prompt time = 74664.91 ms /  5137 runs (   14.53 ms per run)
whisper_print_timings:    total time = 1145307.75 ms

私のHP Envy 14では、実時間の2倍程度でspeech-to-textすることができました。 実時間は681秒程度で、speech-to-textにかかった時間は1145秒程度でした。 テキストもおおむね正しそうです。

NetBSDでspeech-to-textをしてみる

この記事は、 NetBSD Advent Calendar 2024 の15日目の記事です。 speech-to-textエンジンを選ぶ 音声からテキストに変換してくれるのが、speech-to-textエンジンです。 OpenAIのWhisper v3とい...