現状はラジコンでしかない センスチャン を、どんなロボットにしていくか。
まずは本家である スタックチャン の機能を調査しました。
Moddable版ファームウェア (ししかわさん版)
- Renderer: 顔の描画
- Driver: モータ等の駆動
- TTS: 音声合成
- 事前生成 : ビルド時に生成した音声をスタンドアロンで再生
- リモート : オンラインでTTSサーバに生成させた音声をストリーム
- Google Cloud Text-to-Speech API, Coqui AI TTS, VoiceVoxなどに対応
AIスタックチャン (robo8080さん版)
- M5Stack内蔵マイクでウェイクワードを認識し音声認識を起動
- Google Cloud TTS または OpenAI Whisperで音声認識
- 音声認識結果をChatGPTへ送り応答を生成
- Web版VoicevoxでChatGPTの応答を音声合成
- M5Stackーavatarで顔の表示及び音声合成に合わせてリップシンク
- サーボモーター2軸でスタックチャンのパン/チルトを制御
- 音声認識→応答を生成→音声合成 をWeb上のサービスを利用して実現している。
- ウェイクワードの検出はエッジ側(M5Stack)でおこなっている。 (MFCC=メル周波数ケプストラム係数)
- リップシンクは、再生中の音声レベルに比例して口を開ける。(Avatar::setMouthOpenRatio())
stackchan-arduinoライブラリ
- 設定ファイルの読み込み機能 : SDカードからYAML形式の各種設定ファイルを読み込む
- サーボのコントロール機能 : 3種類のサーボを設定で切り替えて使用可
で、センスチャン どうするか?
- センスチャン はArduinoベースなので、主に参考にするのは AIスタックチャン および stackchan-arduinoライブラリ
- Avatar::getGaze()に応じたパン/チルトの代わりに、車輪でうろちょろする。(まずはこれ)
- ウェイクワード検出はしたい。(まずはAIスタックチャン相当の移植。SPRESENSEならもっと頑張れる?)
- 野望としてはローカルでの音声合成。(AquesTalk pico がAVRで動くのだから理屈上は可能のはず。)
- 日本語の読み方は辞書が必要でローカルでは難しそう。それらをリモートに頼るとしても文字データだけで済むから通信量は少なくて済むはず。
- VoiceVoxみたいなのはスペック的にも到底無理。目指すのは AquesTalk pico のような方向性。
- AquesTalk pico LSI外付けがお手軽だが、SPRESENSEでそれやるのは敗北感。