はじめに
筆者は現在フルリモートで勤務しており,ミーティング以外では無音の環境で仕事をしている.
無音の環境に少し物寂しさを感じたので,最近手をつけた株式に関する情報をVOICE VOXに延々と話してもらう環境を用意し,ちょっと経済に詳しくなろうと思う.
家にcronサーバーにしている骨董品のMacBookがあったので,このMacBook上に「要約&テキスト読み上げアプリ」を実装する.
言ってはいけないこと/やっていないこと
本記事では,以下について言及してはならない
- それ他サービスでよくない?youtubeでええやん
- マイクロサービス化しろ
環境
- 音声再生用 MacBook Pro
- macOS Big Sur 11.7.7.10
- 2013モデル,メモリ8GB
- voicebox_core 0.14.3
- gemini AI API
設計
アウトラインを下図に示す.
特筆要件
- 要約にはgemini APIの無料枠を利用する.Google AI Studioから発行できる.
- 参考
- dockerとの音声連携は,pulseaudioを使用する.
実行
githubのREADMEも合わせて確認して欲しい
■ init
- dockerのホスト側にpulseaudioをインストールする.
- dockerホスト PCでpulseaudioデーモンを立ち上げる.
■ job
- RSSやGoogleアラートなどを使用して,ニュース記事更新を検知し,内容をテキスト化する.(ここは本記事では扱わず,githubにもリソースを載せない)
- テキストをgemini AI APIを使用して要約してもらい,読み下し原稿ファイルに変換してもらう.
- その後,Voice Vox coreライブラリを使用して音声ファイル化する.
- そのファイルをdockerから再生する.
設計でためしたこと あれこれ
- dockerに使用するイメージは,はじめalpine系を想定していたが,alpineは最小構成のイメージのため,音声再生関係のドライバをデフォルトで所有しておらず, 追加の設定 が必要なようだった.今回は簡単のため,Ubuntuを使用した.
- クラウドサービスの利用も検討したが,生成されるファイルが音声ファイルのため,I/Oにいくらか容量を食ってしまい,課金の面で不安がある.そのため,すべてローカルで実施するように実装した.
- 上記のタスクフローの管理にAirflow及びRundeskの利用を検討したが,骨董品のMacBook上では,動作が難しく,断念した.
- VoiceVoxCoreの特性か,骨董品MacBookのスペックか,入力文字数が600〜700程度になると,露骨に出力に時間がかかるようになった.そのため,入力をプロンプトで500文字程度に要約させるようにした.
実装
- コードはこちら
動かしてみた感想
cronを毎時0分に実行するようにしてみた.毎回およそ15記事の変更を検知している.パフォーマンスとしては,テキストから音声に変換するプロセスに時間がかかっているようだ.20分程度かかって音声が再生され始める.
使用している感想だが,株式のニュースは数字が要約に載ることが多く,はっきり言って全く頭に入ってこない.一方で,銘柄やストップ高/安の情報に関しては,頭に残りやすい傾向にあり,仕事終わりに該当する銘柄の日時変動を覗いてみたりする良いきっかけになっている.
あと,在宅での会議中に横からvoice_voxの声がするとめちゃくちゃヒヤッとする.そういったときは,スピーカーの音量を一時的に0にすることで対応している.
実際の所裏で動画見てると思われているんじゃないかと不安になる.
工夫できそうな点
- アーカイブ化
- 今回はdelete_allですべてのプロセスを削除している.
- 一度聞き逃したら二度と聞けなくなってしまうので,アーカイブ化したい.
- 検出記事量の上限
- 今回はgemini AIの無料枠を使用して記事要約を実施している.
- gemini APIでは1分間の呼び出し数を制限しており.今回の実装では,上限に簡単に引っかかってしまう.
- 対策としては一度に複数の記事を要約させるか,要約のリクエストにタイムバッファを持たせて回避する必要がある.
- 音声ファイル作成時に漢字や英語に弱く,アルファベットをそのままよんでしまったり,間違った読み方をしてしまう.
- 単純に要約しただけでは厳しいようだ.
- SSMLもちゃんと読めていない雰囲気がある.
おわりに
なんとなく作ってみたシステムだが,そこそこ有用に扱えている.汎用性が高く別のアイデアにも流用できる感じがしている.また,このシステム作成を通して,以下を身につけることができた.
- gemini AI APIの使いかた
- dockerにおける音声ファイルの扱い方
参考