🐰

【iOS】WhisperKitを使ってiPhoneで高性能文字起こしをする!

2024/04/06に公開

みなさんはWhisperKitをご存知でしょうか?

WhisperKitは、OpenAIの人気のあるWhisper音声認識モデルをAppleのCoreMLフレームワークと統合し、Appleデバイス上で効率的なローカル推論を行うSwiftパッケージです。

さっくり資料で概要を把握されたい方は堤さんのこちらの資料を参照してください。
https://www.docswell.com/s/shu223/KRXDLE-whisperkit

今回こちらのWhisperKitを利用して作成してみます。
https://github.com/argmaxinc/WhisperKit

サンプルコードでまずは動かす

早速ですがサンプルコードです。
下記でaudioPathを選択し、音声を読み込むだけです!
一点だけ音声の言語を選択する必要があるのでご注意ください

    let whisper = try await WhisperKit()
    if let result = try await whisper.transcribe(audioPath: audioURL.path,decodeOptions:DecodingOptions.init(language: "ja"))?.text {
        transcription = result
    } else {
        transcription = "トランスクリプションを取得できませんでした。"
    }

結果を見る

すると下記のように音声が文字起こしされます!これはなかなかの精度なんじゃないですかね?

また下記のようにWhisperKitのログが出力されます。
Model Load Time に13秒かかってますがこれは初回だけかかるようです。
内容によって適切なModelが選択されるようなので気になる方は利用するModelを固定化するのがいいかもしれません

[WhisperKit] ---- Transcription Timings ----
[WhisperKit] Audio Load:             61.38 ms /      1 runs (   61.38 ms/run)  4.13%
[WhisperKit] Audio Processing:        0.17 ms /      1 runs (    0.17 ms/run)  0.01%
[WhisperKit] Mels:                   51.14 ms /      1 runs (   51.14 ms/run)  3.44%
[WhisperKit] Encoding:               29.58 ms /      1 runs (   29.58 ms/run)  1.99%
[WhisperKit] Matrices Init:           1.56 ms /      1 runs (    1.56 ms/run)  0.11%
[WhisperKit] Prefill:                 0.25 ms /      1 runs (    0.25 ms/run)  0.02%
[WhisperKit] Decoding:             1052.36 ms /    121 runs (    8.70 ms/run) 70.88%
[WhisperKit] Non-inference:         345.66 ms /    121 runs (    2.86 ms/run) 23.28%
[WhisperKit] - Logit Filtering:       0.34 ms /    121 runs (    0.00 ms/run)  0.02%
[WhisperKit] - Sampling:             54.27 ms /    121 runs (    0.45 ms/run)  3.66%
[WhisperKit] - Kv Caching:           69.39 ms /    121 runs (    0.57 ms/run)  4.67%
[WhisperKit] - Word Timestamps:       0.00 ms /      0 runs (    0.00 ms/run)  0.00%
[WhisperKit] - Windowing:             0.59 ms /      1 runs (    0.59 ms/run)  0.04%
[WhisperKit] Fallbacks:               0.00 ms /      0 runs (    0.00 ms/run)  0.00%
[WhisperKit] Decoding Full Loop:   1482.63 ms /    121 runs (   12.25 ms/run) 99.86%
[WhisperKit] -------------------------------
[WhisperKit] Model Load Time:     13.00 seconds
[WhisperKit] Inference Duration:  1.48 seconds
[WhisperKit] - Decoding Loop:     1.48 seconds
[WhisperKit] Time to first token: 0.18 seconds
[WhisperKit] Total Tokens:        125
[WhisperKit] Tokens per Second:   81.61 tok/s
[WhisperKit] Real Time Factor:    0.06
[WhisperKit] Fallbacks:           0.0

まとめ

以上WhisperKitを使ってiPhoneで高性能文字起こしをするでした
今回のサンプルコードは下記に置いてありますので参照してください〜

https://github.com/entaku0818/AudioMaster/blob/main/AudioMasterApp/AudioMasterApp/AudioMasterApp/AVF/WhisperKitView.swift

また、今回は下記のサンプル音声を利用させていただきました。
https://pro-video.jp/voice/announce/

Discussion