みんなのケータイ

リアルタイム文字起こしアプリを自作してみて分かったこと

 スマホのリアルタイム文字起こしアプリで現実的に使い物になるのは、今のところGoogle Pixelスマホのレコーダーアプリくらいしかないんじゃないかな、と思っている。ちょっとした取材メモに使うレベルなら、いちいち録音データを聞き直さなくても理解できるくらいには日本語の文字起こし精度が高い。

Google Pixel 8 Proで使っているレコーダーアプリ

 ただ、いくつか不満はある。1つは言語の切り替えに手間がかかること。多言語対応しているのはいいとしても、その大量の言語リストをスクロールして選ばなければならないので、たとえば日本語話者と英語話者が混在するような場面では切り替えが間に合わない。

言語リストが多すぎて、リストから選んでいる間に話が進んでいってしまう

 もう1つは、「あの」や「えっと」のようなつなぎ言葉など、明らかに不要な言い回しや、パターン化した誤認識がどうしても入り込んでしまうこと。可能ならそのあたりの整形まで自動でこなしてもらって、取材が終わると同時にあらかた文字起こしも終わっている、というような状況を作れるのが理想ではあるのだ。

 というわけで、これらの不満を解消するにはどうしたらいいかな、と考えたときに、たどり着いた結論は「自分で作るしかない」というものだった。何やら最近はバイブコーディングとかいうものが流行っているらしい。

 1からちまちまプログラミングしていてはいつまでたっても完成しないだろうけれど、AIさんに全面的に頑張ってもらえばなんとかなるのでは、と。そんな淡い期待を抱きつつ開発をスタートしてみたら、2~3週間(実働4日)でそこそこ形になった。

リアルタイム文字起こしアプリの開発中

 使用したツールはVisual Studio Code上で動作する「Cline」がメインで、後半はOpenAIの「Codex」も併用した。設計と大枠のコーディングはCline(主にAnthropicのClaude Sonnet 4をAPIとして使用)に任せ、細かな修正などはCodexにお願いする。作ったのはそのものズバリ、「OkoshiKun」という名前のAndroidアプリだ。主な機能は下記のような感じ。

主な機能
OkoshiKun
  • リアルタイム文字起こしの最中でも日本語と英語をワンタップで切り替えられる
  • リアルタイムで文字起こししながら日本語と英語の相互翻訳ができる
  • 文字起こしに使用するAPI(AIモデル)を切り替えられる
  • OpenAI:whisper-1、gpt-4o-mini-transcribe、gpt-4o-transcribe
  • Google Cloud Speech-to-Text:latest_long、latest_short
  • 翻訳に使用するAIモデルを切り替えられる設計(現在はOpenAIのgpt-4o-miniのみ)
  • 文字起こし時に独自の文字列置換処理を加えて精度向上を図れる設計
  • OpenAIでの文字起こし時はノイズ処理(サーバーサイド)の仕方を変更可能
  • OpenAIでの文字起こし時はシチュエーションに合わせた最適化設定が可能(プロンプトの切り替え)
  • 一定量の文字起こし後に録音データのタイトルを自動設定
  • 録音後の音声データ・文字起こしテキスト・翻訳テキストの出力(共有機能を使用)
  • 内蔵マイクと外部マイクの切り替え
  • マイクを相手に向けるときのことを想定した自動画面回転
    「OkoshiKun」の録音済みデータ一覧画面
    共有機能でデータ出力できる
    設定画面ではAPIキーの設定と、使用するAIモデルの選択が可能

     ここまでの内容を、実働4日という短い時間で、とりあえずは開発者自身である筆者が使う分には実用可能なレベルまで作り上げることができたのは、さすがAIさん、といったところ。まあ、Clineを介して使ったトータルのAPI料金はゆうに3万円を超えているのだけれども……。

     で、このアプリを使っていろいろ文字起こししてみて、最も精度良く、かつリアルタイム性高く文字起こししてくれると感じたのは、Google Cloud Speech-to-Text(gRPC)を使った場合だ。しゃべった内容がほとんど瞬時に文字起こしされるし、周囲が騒がしかったり、小声だったりしてもかなり正確に聞き取ってくれる。

    Google Cloud Speech-to-Textだとレスポンス良く文字起こししてくれる

     しかも、現在使用しているGoogleのAPIは世代としては古いV1と呼ばれるもの。V2になるとさらに精度が向上し、カスタマイズの幅が広がるので、伸び代は大きそう。そのための手続きがいろいろややこしくて、お手軽に使えるアプリにはしづらいのが難しいところなのだけれど、それもいずれは実装したい。

     OpenAIの方は、どのAIモデルにしても、プロンプトを工夫しても、サーバーサイドのノイズ処理を切り替えても、スムーズな文字起こしをしてくれない状況だ。

     もしかしたら事前に音声データのノイズ処理(ローカットフィルターなど)をしたうえでサーバーに送信した方がいいのかもしれない。アプリ側でまだまだやれることはあるので、そのチューニング次第だろうか。

    OpenAIのAPIを使った文字起こしでは、ノイズ除去やシチュエーション(プロンプト)切り替えも可能だが、精度にあまり差はない

     という感じで、文字起こしアプリを自作してみたわけだけれど、ここまでやってきて心底思ったのが、「Google Pixelのレコーダーアプリはマジ強いな」ということだった。なんといってもオンデバイス、つまり通信を必要とせずにデバイス内で文字起こし処理を完結できるのが強すぎる。

     これは、Gemini nanoというAIモデルを搭載し、それをGoogle Pixelの内蔵するTensorというプロセッサーに最適化された形で処理できるからこそ、だろう。

     Gemini nanoをGoogle Pixel以外の端末で直接利用することはまだできないし、それに代わるAIモデルでスマホにそのまま載る軽量なもの、かつ同等の精度をもつもの、となると今のところまだ他に存在しない(と思う)。

     なので、代わりの手段としてクラウド処理に頼らざるを得ないわけだけれど、そうすると通信できない場所では使えず、通信できても速度が遅すぎると実用にならない場面が出てくる。加えて、文字起こしする際にAPI料金がかさんでしまうのもネックだ。

     こうしたリアルタイム処理のためのAPI利用料金は当初よりは下がってきているけれど、1時間、2時間と長い文字起こしになると数百円は覚悟しなければならない。なので、Gemini nanoとGoogle Pixelのレコーダーアプリは本当に偉大だなあ、と改めて感じるのだ。

     それでもOkoshiKunが活躍する場面がないわけではないので、しばらくは手元でブラッシュアップしながらいろいろ試していきたい所存。なにより自分の考えたアプリがちゃんと動いてくれるとそれだけでうれしいし、満ち足りた気持ちになる。Nintendo Switch 2がいつまでたっても当選しないことなんて全然気にならない。