デスクトップマスコット開発 ~天満さくらに憧れて~

はじめまして

大阪国際工科専門職大学 工科学部 情報工学科
IoTシステムコース 3年 立間祐宏です。

このブログでは実習中に急遽できてしまった1週間の空き時間で作成したデスクトップマスコットについて紹介していきます。

1. なぜデスクトップマスコットを作成したのか

当初はDENSO製ロボットの制御にChatGPTを使用しようとしていましたが、現行のGPT-4o Vision Fine-Tuningでは期待する性能が得られませんでした。そのため、実習で習得した技術を活かして、新たなプロジェクトとして自分だけのデスクトップマスコットを開発することに決めました。

また、実習先の事務所に設置されていた天満さくらに大きな影響を受けたことも、このプロジェクトを始めたきっかけです。天満さくらのように「いつでも話しかけられるキャラクター」に憧れ、自分のPCだけで動作し、インターネット接続がなくても利用できるデスクトップマスコットを目指しました。

画像に alt 属性が指定されていません。ファイル名: image-1-1024x630.jpg

スリーアップ・テクノロジー事務所にいるChatVRMの天満さくら

今回開発したデスクトップマスコットの「小夜(SAYO)」は、ローカル環境でも会話の機能が動作するという特長を備え、いつでも自由に話しかけられる頼もしい存在です。

製作物目標のイメージとしては、以前のMicrosoft Officeに登場していた「カイル君(Clippy)」を思い浮かべると分かりやすいかもしれません。カイル君が画面の端でユーザーをサポートしていたように、小夜もPCのデスクトップ上でユーザーに寄り添い、インタラクティブに応答するキャラクターです。さらに、音声での応答やリアクションも備えており、より親しみやすく、現代版のデスクトップアシスタントとしての役割を果たしています。

カイル君


2. 実装方法

デスクトップマスコット「小夜(SAYO)」の実装には、以下の技術とツールを組み合わせて開発を行いました。

Unityによるキャラクター表示

デスクトップマスコットのキャラクター表示にはUnityを使用しました。UnityはC#を用いたゲームエンジンで、3Dおよび2Dモデルの表示やアニメーションの設定が柔軟にできるため、デスクトップマスコットの開発に適しています。特に小夜のようなインタラクティブなキャラクターを実装するには、リアルタイムの動きや音声同期が重要な要素であり、Unityはこれらを手軽にサポートしています。

本プロジェクトでは、小夜の公式MMDモデルを使用しました。このモデルは、豊富なモーションデータに対応しており、Unityでのインポート後も高品質な表現が可能です。「MMD4Mecanim」プラグインを活用し、MMDモデルをUnityに適した形式に変換することで、スムーズなアニメーションを実現しました。

Unity上でモデルを配置している様子

なぜUnityとC#なのか

Unityは豊富な機能とドキュメントが整備されており、初心者でもアニメーションやインタラクティブな要素を比較的容易に実装できる環境が整っています。また、UnityではC#を使用してプログラムを作成します。C#はオブジェクト指向であるため、キャラクターの動きや発話といった機能をモジュール化して制御でき、開発の効率も向上します。今回、私にとってはUnityとC#での開発が初めてでしたが、リアルタイムでアニメーションと音声を同期させる必要があったため、学習コストをかけてでもUnityとC#の採用を決めました。

今回作成したC#プログラム一覧(計9ファイル)


3. 実装した機能と技術

3.1 Ollamaによるテキスト生成

小夜との会話には、Ollama APIを利用しており、軽量な「Qwen2.5:1.5b」モデルを使用しています。このモデルは高速にテキストを生成するため、ユーザビリティが向上しましたが、時々誤った内容も生成してしまいます。また、Ollamaは約2か月前に発表された新しい技術であり、ローカル環境での大規模言語モデルの実行を可能にすることで注目されています。この最新技術を採用することで、インターネット接続不要で動作する小夜の特長を実現しました。

テキストを生成している様子

3.2 Voicevoxでの音声生成

VoicevoxのAPIを活用し、生成したテキストを即座に音声化しています。GPUを用いて動作するため、遅延が少なく、自然な会話体験を提供しています。

3.3 キャラクターの動き

キャラクターの口パクやまばたきなど、音声再生に合わせてアニメーションも同期しています。これにより、話している小夜がよりリアルに見えるように工夫しました。

製作物デモ動画 1

やはりqwen2.5:1.5bモデルでは回答の精度が不安定であることに加え、日本語ではないものやアルファベットを含むものについてはVOICEVOXの標準では正確に発音することが出来ていないのが分かる。

3.4 MQTT通信

小夜は、MQTT通信を通じて他のデバイスと連携し、外部からメッセージを受信した際にも対応可能です。MQTTはIoTプロトコルの一つであり、低コストかつ効率的にデバイス間の通信を行うことができるため、スマートホームなどのアプリケーションでも広く使用されています。

私はIoTコースを専攻していることから、実習で学んだ知識を活かし、MQTTをプロジェクトに組み込みました。この技術を用いることで、デスクトップマスコットがスマートホームデバイスや他のIoT機器と連携できる可能性を示し、今後の自主開発の方向性も広がると考えています。

製作物デモ動画 2

4. 実装方法と苦労した点

Unityによるキャラクター表示

Unityでの開発は初めてだったため、モデルを正しく表示するだけでも1日以上の時間を費やしました。特に、インポートしたモデルが正しく動作しなかったり、表示が乱れたりする問題の解決には多くの試行錯誤が必要でした。また、Unityにはキャラクター表示や透過処理に関連するライブラリが数多く存在しますが、それぞれ似たような機能を持っており、複数のライブラリを実際に試して比較することで、最適なものを選び出す作業にも時間がかかりました。

具体的には、MMDモデルを透過ウィンドウ上に正しく投影するために「MMD4Mecanim」や「TransparentFX」など複数のツールやプラグインを試しました。その中で一番適切に動作する組み合わせを選ぶのに手間取ったものの、最終的には高品質なキャラクター表示を実現することができました。


5. 今後の改良点

Ollamaで使用するモデルの変更

現在は軽量な「Qwen2.5:1.5b」モデルを使用していますが、時折生成される誤った内容や文脈のずれを解消するため、より高精度なモデルへの変更を検討しています。例えば、Qwenシリーズの最新バージョンや、より多目的に対応できるモデルを採用し、ユーザーとの会話の質を向上させたいと考えています。

ウィンドウ透過処理の改良

現在、小夜のウィンドウは透過処理を施しており、デスクトップと自然に調和するように見えていますが、ウィンドウの当たり判定がまだ残っているため、キャラクターのすぐ横のエリアでは、背後のアイコンやウィンドウと正しくインタラクトできないという問題があります。この点を改善し、透過部分も完全にクリック可能にすることで、ユーザーエクスペリエンスを向上させます。

アニメーションの多様化

現状、小夜の動きは口パクやまばたきがメインで、やや単調な印象を与える部分があります。表情の変化や動作パターンを増やし、例えば喜びや驚きといった感情を表現できるようにすることで、キャラクターにもっと生き生きとした魅力を持たせたいと考えています。また、時間帯や季節ごとの特別なアクションを追加することで、ユーザーとのインタラクションをさらに楽しめるものにしたいです。


まとめ

デスクトップマスコット「小夜(SAYO)」は、限られた時間の中で取り組んだプロジェクトですが、Unity、C#で、Ollama、Voicevox、MQTT通信といった多岐にわたる技術を組み合わせ、動作するキャラクターを完成させることができました。本プロジェクトを通じて、初めて触れる技術に挑戦しながらも、試行錯誤を重ねて形にできたことに大きな意義を感じています。

今後は、小夜の会話や動きの精度をさらに高め、ウィンドウ透過やアニメーションの改良を通じて、より自然で魅力的なキャラクターに成長させていきたいと考えています。また、今回得た知識や経験を活かして、より大規模なプロジェクトにも挑戦したいです。

デスクトップマスコット「小夜」は、まだ成長途中のプロジェクトです。このブログを通じて、小夜の魅力や可能性を少しでも感じていただけたら嬉しいです。

最後に、1か月半の実習期間中に多くのご指導とサポートをいただいた、株式会社スリーアップ・テクノロジーの三上さんに心から感謝申し上げます。三上さんのアドバイスのおかげで、プロジェクトを最後までやり遂げることができました。本当にありがとうございました。