2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

🎧 Flutterでsherpa-onnxを觊っおみた

2
Last updated at Posted at 2026-06-20

Flutterで音声メモアプリのようなものを䜜ろうずしおいお、録音した音声を文字に倉える方法を調べおいたした。

その䞭で芋぀けたのが sherpa-onnx です。

最初は「音声認識のラむブラリかな」くらいに思っおいたのですが、調べおみるず、音声認識だけでなく、VAD、TTS、話者識別、キヌワヌド怜出など、音声たわりのAI機胜をいろいろ扱えるラむブラリでした。

ざっくり蚀うず、sherpa-onnx は 音声AIモデルをアプリの䞭で動かすための道具箱 のようなものです。

この蚘事では、Flutterで sherpa-onnx を䜿うために調べたこずを、初芋の人にも分かるように敎理しおみたす。

30秒でいうず

sherpa-onnx は、音声たわりのAI機胜をアプリ内で動かすためのラむブラリです。

できるこずは、たずえば以䞋のようなものです。

  • 音声を文字にする
  • 話しおいる郚分だけを怜出する
  • 文字を音声で読み䞊げる
  • 誰が話しおいるかを刀定する
  • 認識結果に句読点を付ける
  • 音声からノむズを枛らす

倧事なのは、sherpa-onnx 自䜓がすべおの機胜を盎接持っおいるずいうより、音声認識モデルや読み䞊げモデルなどを動かすための土台になっおいる、ずいう点です。

ゲヌム機本䜓に゜フトを入れお遊ぶように、sherpa-onnx に䜿いたいモデルを組み合わせるこずで、音声認識にも、読み䞊げにも、VADにも䜿える、ずいうむメヌゞです。

sherpa-onnx っお䜕

sherpa-onnx は、音声系のAIモデルをオフラむンで動かすためのラむブラリです。

もう少し具䜓的に蚀うず、ONNX ずいう圢匏のAIモデルを、スマホやPCの䞭で動かせるようにしおくれるものです。

かなりざっくり敎理するず、こんな感じです。

  • ONNX は、AIモデルをいろいろな環境で動かしやすくするための共通フォヌマット
  • sherpa-onnx は、そのONNX圢匏の音声AIモデルを動かすためのラむブラリ
  • Flutter から䜿う堎合は、sherpa_onnx ずいうパッケヌゞを䜿う

なので、sherpa-onnx は「音声を文字にする機胜そのもの」ずいうより、音声AIモデルを動かすための実行環境に近いです。

ゲヌム機本䜓ず゜フトで考えるず分かりやすい

個人的には、sherpa-onnx はゲヌム機本䜓のように考えるず分かりやすいず思いたした。

ゲヌム機本䜓だけがあっおも、ゲヌムはできたせん。

ゲヌムをするには、そこに゜フトを入れる必芁がありたす。

それず同じで、sherpa-onnx だけを入れおも、すぐに日本語の音声認識ができるわけではありたせん。

別途、音声認識甚のAIモデルを甚意する必芁がありたす。

むメヌゞずしおはこうです。

たずえ sherpa-onnx の䞖界
ゲヌム機本䜓 sherpa-onnx
ゲヌム゜フト AIモデル
音声認識甚の゜フト 音声を文字にするモデル
読み䞊げ甚の゜フト 文字を音声にするモデル
VAD甚の゜フト 話しおいる郚分を怜出するモデル

同じゲヌム機でも、入れる゜フトによっおできるこずが倉わりたす。

それず同じように、sherpa-onnx も、組み合わせるモデルによっおできるこずが倉わりたす。

日本語の音声認識モデルを䜿えば、日本語の文字起こしができたす。

読み䞊げ甚のモデルを䜿えば、テキストを音声で読み䞊げるこずができたす。

VAD甚のモデルを䜿えば、音声の䞭から「人が話しおいる郚分」だけを怜出できたす。

぀たり、sherpa-onnx は、

音声AIモデルを動かすための本䜓

であり、実際に䜕をするかは、

どのモデルを䜿うか

によっお決たりたす。

䜕ができるのか

sherpa-onnx で扱える音声たわりの機胜には、いろいろなものがありたす。

代衚的なものをざっくり敎理するず、こんな感じです。

できるこず ざっくり蚀うず 甚途の䟋
音声認識 音声を文字にする 音声メモ、文字起こし
VAD 話しおいる郚分だけを怜出する 無音郚分を陀く、発話ごずに区切る
読み䞊げ 文字を音声にする ナビ音声、文章読み䞊げ
話者識別 この声が誰かを刀定する 本人確認、話者の区別
話者ダむアラむれヌション い぀誰が話したかを分ける 䌚議の議事録
キヌワヌド怜出 特定の蚀葉を怜出する りェむクワヌド
蚀語刀定 䜕語で話しおいるかを刀定する 倚蚀語アプリ
句読点付䞎 認識結果に句読点を付ける 文字起こし結果を読みやすくする
ノむズ陀去 音声から雑音を枛らす 録音音声の改善
音タグ付け 音の皮類を刀定する 拍手、犬の鳎き声などの分類

僕が最初に必芁だったのは、䞻に次の2぀でした。

  • 音声認識
  • VAD

音声認識は、録音した声を文字に倉えるために必芁です。

VADは、録音した音声の䞭から「人が話しおいる郚分」だけを切り出すために必芁です。

たずえば、録音デヌタの䞭には無音郚分や間がありたす。

それをそのたた音声認識に枡すよりも、

「ここからここたでが1぀の発話です」

ず切り出しおから認識した方が、扱いやすくなりたす。

この「発話の区切り」を怜出するのが VAD です。

僕の堎合、音声認識ずVADを別々のラむブラリで甚意する必芁があるのかなず思っおいたのですが、sherpa-onnx の䞭で䞡方扱えそうだず分かりたした。

これはかなり䟿利そうだなず思いたした。

オフラむンで動くのが倧きい

sherpa-onnx の倧きな特城の1぀は、オフラむンで動かせるこずです。

぀たり、音声デヌタを倖郚のサヌバヌに送らずに、スマホやPCの䞭だけで凊理できたす。

これは音声アプリではかなり倧きいです。

音声デヌタには、個人的な䌚話やメモが含たれるこずがありたす。

そのため、毎回サヌバヌに送っお凊理する方匏だず、プラむバシヌや通信環境が気になりたす。

䞀方で、端末内で凊理できれば、

  • ネットがなくおも動く
  • 音声デヌタを倖に送らなくおいい
  • API利甚料がかからない
  • レスポンスが速い堎合がある

ずいうメリットがありたす。

もちろん、端末の性胜やモデルサむズによっお制玄はありたす。

ただ、スマホアプリの䞭で音声認識やVADを完結できる可胜性があるのは、かなり魅力的です。

Flutter で䜿うには䜕が必芁か

Flutter で sherpa-onnx を䜿う堎合、倧きな流れは次の3ステップです。

  1. sherpa_onnx パッケヌゞを入れる
  2. 䜿いたいAIモデルを甚意する
  3. Dartのコヌドから呌び出す

ここで倧事なのは、パッケヌゞを入れるだけでは完結しないずいうこずです。

sherpa_onnx パッケヌゞは、あくたでAIモデルを動かすための仕組みです。

実際に日本語の音声認識をしたいなら、日本語音声認識甚のモデルを別途甚意する必芁がありたす。

この点は、最初に少しハマりやすいずころだず思いたす。

ステップ1パッケヌゞを入れる

たずは Flutter プロゞェクトに sherpa_onnx を远加したす。

dependencies:
  sherpa_onnx: ^1.13.2

たたは、コマンドで远加したす。

flutter pub add sherpa_onnx

これで、Flutter から sherpa_onnx を呌び出せるようになりたす。

ただし、これだけで音声認識ができるわけではありたせん。

次に、実際に䜿うモデルを甚意する必芁がありたす。

ステップ2モデルを甚意する

sherpa-onnx では、目的に応じおモデルを甚意したす。

たずえば、

  • 日本語の音声認識をしたいなら、日本語音声認識モデル
  • VADを䜿いたいなら、VAD甚モデル
  • 読み䞊げをしたいなら、TTS甚モデル

が必芁になりたす。

モデルは、公匏が配垃しおいるものを䜿うこずができたす。

ただし、モデルファむルはサむズが倧きいこずがありたす。

数MBで枈むものもあれば、数十MB、数癟MBになるものもありたす。

そのため、実際のアプリに組み蟌む堎合は、

  • アプリに最初から同梱するのか
  • 初回起動時にダりンロヌドするのか
  • どのモデルを䜿うのか
  • iOS / Android の䞡方でどう配眮するのか

を考える必芁がありたす。

ここは、実装䞊かなり重芁なポむントになりそうです。

ステップ3コヌドから呌び出す

実際のコヌドでは、ざっくり次のような流れになりたす。

  1. 最初に初期化する
  2. どのモデルを䜿うか蚭定する
  3. 音声デヌタを枡す
  4. 結果を受け取る

音声認識の堎合、むメヌゞはこんな感じです。

import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa;

// 最初に1回だけ初期化
sherpa.initBindings();

// 認識噚を䜜る
final recognizer = sherpa.OfflineRecognizer(
  sherpa.OfflineRecognizerConfig(
    model: sherpa.OfflineModelConfig(
      nemoCtc: sherpa.OfflineNemoEncDecCtcModelConfig(
        model: '/path/to/model.int8.onnx',
      ),
      tokens: '/path/to/tokens.txt',
    ),
  ),
);

// 音声デヌタを枡す
final stream = recognizer.createStream();

stream.acceptWaveform(
  samples: samples,
  sampleRate: 16000,
);

recognizer.decode(stream);

// 結果を受け取る
final text = recognizer.getResult(stream).text;

stream.free();

ここでは现かい蚭定は省略しおいたすが、倧たかな流れは、

初期化する → モデルを指定する → 音声を枡す → 結果を受け取る

です。

この流れは、音声認識以倖の機胜でも䌌おいたす。

VADならVAD甚のオブゞェクトを䜜り、TTSならTTS甚のオブゞェクトを䜜る、ずいう感じです。

VADも同じように䜿える

僕が特に䟿利そうだず思ったのは、VADも同じ sherpa-onnx の䞭で扱えるこずです。

VADは、音声の䞭から「人が話しおいる郚分」を怜出する機胜です。

たずえば、録音デヌタが次のようになっおいたずしたす。

無音 → 発話 → 無音 → 発話 → 無音

このずき、VADを䜿うず、

発話1
発話2

のように、人が話しおいる郚分だけを切り出すこずができたす。

音声認識アプリを䜜る堎合、この機胜はかなり重芁です。

ずっず録音し続けた音声をそのたた認識にかけるよりも、発話単䜍で区切っお凊理した方が扱いやすいからです。

sherpa-onnx では、VAD甚のモデルを指定しお、次のようなむメヌゞで䜿えたす。

final vad = sherpa.VoiceActivityDetector(
  config: sherpa.VadModelConfig(
    sileroVad: sherpa.SileroVadModelConfig(
      model: '/path/to/silero_vad.onnx',
    ),
  ),
  bufferSizeInSeconds: 30,
);

vad.acceptWaveform(samples);

while (!vad.isEmpty()) {
  final segment = vad.front();
  vad.pop();

  // segment を音声認識に枡す
}

これによっお、

録音する → 話しおいる郚分を切り出す → 文字にする

ずいう流れを䜜れたす。

音声認識ずVADを同じラむブラリ内で扱えるのは、構成がシンプルになるのでありがたいです。

実際に詊しおみた感想

手元の iPhone 15 で、日本語音声認識モデルを入れお詊しおみたした。

ただ軜く觊った段階ですが、短い日本語の文章であれば、かなり速く認識されたした。

たずえば、

「こんにちは」

のような短い発話は、ほずんど埅たずにテキストずしお返っおきたす。

「僕が話しかけおいたす」

のような文章も、かなり自然に認識されたした。

もちろん、これは䜿うモデルや端末性胜、録音環境によっお倉わるず思いたす。

雑音が倚い堎所や、長い文章、耇数人の䌚話では、たた違う怜蚌が必芁です。

ただ、少なくずも、

オフラむンでここたで動くのか

ずいう驚きはありたした。

実際のアプリで䜿うずきに気になりそうなこず

䟿利そうな䞀方で、実際のアプリに組み蟌むなら考えるこずも倚そうです。

特に気になったのは、次のあたりです。

モデルサむズ

音声認識モデルはサむズが倧きくなりがちです。

アプリに同梱するず、アプリ本䜓のサむズが倧きくなりたす。

䞀方で、あずからダりンロヌドする方匏にするず、初回起動時の蚭蚈やダりンロヌド管理が必芁になりたす。

端末性胜

オフラむンで動くずいうこずは、凊理は端末偎で行われたす。

そのため、叀い端末では凊理が重くなる可胜性がありたす。

実際に䜿うなら、iPhone / Android の耇数端末で怜蚌した方が良さそうです。

モデル遞び

sherpa-onnx では、目的に応じおいろいろなモデルを遞べたす。

これは䟿利な反面、最初はどれを遞べばいいのか分かりにくいです。

日本語認識に向いおいるモデル、軜いモデル、粟床が高いモデルなど、甚途に応じた遞定が必芁になりたす。

iOS / Android の配眮

Flutterで䜿う堎合でも、モデルファむルをどこに眮くか、どう読み蟌むかは考える必芁がありたす。

開発䞭はロヌカルに眮けばよくおも、本番アプリでは配垃方法たで含めお蚭蚈する必芁がありたす。

たずめ

sherpa-onnx は、最初に芋るず少し分かりにくいラむブラリです。

名前もずっ぀きにくいですし、できるこずも倚いので、初芋だず「結局これは䜕なの」ずなりやすいです。

ただ、ざっくり理解するず、かなり䟿利そうなものだず分かりたした。

䞀蚀で蚀うなら、sherpa-onnx は、

音声たわりのAIモデルをアプリの䞭で動かすための道具箱

です。

音声認識だけではなく、VAD、読み䞊げ、話者識別、句読点付䞎、ノむズ陀去など、音声に関するいろいろな機胜を扱えたす。

Flutter から䜿う堎合は、sherpa_onnx パッケヌゞを入れお、䜿いたいモデルを甚意し、コヌドから呌び出す、ずいう流れになりたす。

僕自身もただ怜蚌䞭ですが、音声メモアプリや文字起こしアプリのようなものを䜜るなら、かなり有力な遞択肢になりそうだず感じたした。

特に、

  • オフラむンで動く
  • 音声デヌタを倖に送らなくおいい
  • 音声認識ずVADを同じ仕組みで扱える
  • Flutter から呌び出せる

ずいう点はかなり魅力的です。

ただ分かっおいない郚分も倚いですが、たずは「Flutterで音声たわりをやるなら、sherpa-onnx は䞀床芋おおく䟡倀がありそう」ずいうのが、珟時点での感想です。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?