防災放送をデジタル化してみた: 続き

最初の記事 は引っ越して1ヶ月で書きましたが、そこからだいぶ経ちました。。その間色々ありましたが、地道に改善を追加しています。最初公開したときに比べると、こういうところを改善しています:

まずは文字起こしエンジンから。

Amazon Transcribe から Google Speech-to-Text に切り替え

公開後、文字起こしの精度をどう上げるか考えていました。試したのは3件のサービス: Amazon, Azure と Google。結局 Google を採用しましたが、その理由は聞き取り精度のためでした。完璧というわけではないのですが、 Amazon と Azure よりはマシでした。 Azure は自分の音声とトランスクリプトを用意すればさらにカスタマイズしたサービスを作ることができるらしいけど、今回のサービスとしては金額的に高すぎました。今のところ Google で数ヶ月運用していますが、文字起こし費用は月200円未満。台風が多かった時期は500円程度。

OpenAI が ChatGPT などで有名ですが、 Whisper という文字起こしモデルも公開しています。こちらも試してみたのですが、致命的な課題がありました。

幻覚症状がどうしてもコントロールできなかった。大体のお知らせは「お知らせ終わります。【終わりのチャイム音】」で終わりますが、 Whisper の解釈は「お知らせ終わります。ご視聴ありがとうございました」でした。

今後改善されるか、私の設定が悪かったのか、GPT-4とかで直すした方がいいのかまだはっきりわかりませんですが、今のところその4つのサービスのうち Google が優位。

デプロイ周りは GitHub Actions から行うように

前の記事では、Raspberry Pi にログインして git pull するというデプロイ手順でしたが、さすがに面倒でした。実物サーバーにデプロイするのは久しぶりで不慣れなところが色々ありましたが、結局ある程度スムーズにできるようになりました。現在はこういう流れになっています:

  1. GitHub Actions でフロント/バックエンドが両方コンパイルされる
  2. Raspberry Pi に tailscale を使って SSH で接続する
  3. 新しいファイルを rsync でコピーする
  4. Raspberry Pi 内で npm install 行う
  5. アプリサーバーを再起動する

ここで一番助かっているのは tailscale です。tailscale は VPN アプリでもあるのですが、ネットワークに繋ぐようなVPNではなく、peer-to-peer みたいな感じでクライアントがインストールされているなら直接接続できる様なVPNです。デプロイ先の Raspberry Pi に tailscale のクライアントの入れ、 GitHub Actions 用の Action を設定 すれば、ポート開けとかNAT調整とかファイアウォール設定とかしなくてもGitHub ActionsからSSH通信できます。

モバイル通知の対応

iOS 16.4 が前の記事の翌?翌々?日にリリースされ、ネイティブアプリなしでもバックラウンドでプッシュ通知をサーバーから受け付けられる様になりました。(Androidはこの機能数年前ぐらいに追加されたらしいですが、私は iOS しか使っていません。。)

ただ、ちょっとハマったのは、通知を受け取る様になるために、ユーザーがこのサイトをホーム画面に追加しなければならない。この操作は一般的ではないため説明するのがいつも混乱します。

終わりに

さらに改善を続けたいと思います。今はこんな形で考えています:

最後まで読んでいただきありがとうございました。 もし質問などあれば遠慮なく連絡ください。