はじめまして〜! 高校生エンジニアのBelltreeTech,こと まり です!
初投稿というわけで、Unity,Python,ChatGPT API,Py-Featをメインに "擬似的に(ここ重要)" 感情を理解できるAIを作ったお話しです。
ではさっそく結論から!
1. 開発したもの
このアプリをひとことで表すと
ユーザーの話し相手になって 不安やストレスを軽減する ツールです!
アプリ起動時の画面
アプリ名のPolarisには船乗りたちが道しるべにしていた北極星(Polaris)のように、使う人の道しるべになれたらな〜 という思いを込めました!
実際の会話
右に立っているのが感情を理解できるAIの "ソラ" さんです。
大空のように広い心を〜 という思いを込めました!
システムの内部
-ユーザーの顔写真-
ユーザーの顔写真をアプリ起動と同時に撮影し、Python: Flaskサーバーに送信、Py-Featで表情分析を行なった後に分析結果をUnityへ返信、ChatGPTに送りつつ、UIに表示させます。
-ユーザーの入力-
UnityのInputFiledで取得し、プロンプトと分析結果をChatGPTに送信します。
2. 開発背景
既存のチャットボットについて
これまでのAIサービスはすべてテキストベース, いわゆるLINEのようなものです。例えユーザーがブチギレながら, 大泣きしながら「元気だよ!」とAIにテキストを送信した場合、AIは「ユーザーは元気だ」と誤認識してしまいます。
どれだけプロンプトをこねくり回しても、ユーザーの顔が見えていない。
→ その人の感情がわからない以上、それっぽい定型文しか出てこない。
感性情報をユーザーからの入力とは別途、送信すればAIが感情を理解できるのでは。と考え開発をスタートしました。
3. 開発の流れ
技術スタック ひとこと解説
Unity
ゲーム開発エンジン。
PC、スマホ、Web、VRなどのさまざまなプラットフォームに対応したゲームやアプリを開発できる。C#を用いてスクリプトを記述して開発する。
今回はUnityをAIとの通信や顔写真の撮影など、アプリの基盤として使用しました。その理由としては開発が終わった後、iPhoneやAndroidなどの開発が進めやすい、これまでゲーム開発に使っていたので慣れているから、などがあります。
Python
機械学習、データ分析、Web開発、ゲーム開発 など幅広い分野で利用される汎用プログラミング言語。
シンプルな文法と豊富なライブラリが特徴。
Pythonは感情分析システムの開発に使用しました。使用理由はオープンソースのライブラリが多く、開発がしやすいからです。
ChatGPT
GPT(Generative Pre-trained Transformer)という大規模言語モデル(LLM)を使用した対話型AI。APIを利用して自作アプリやWebサービスに組み込むことができる。
また、プラグイン機能を活用して外部ツールと連携可能。
Py-Feat
Py-Feat(Facial Expression Analysis Toolkit)は、顔の表情を分析するためのPythonライブラリ。
顔の画像や動画から表情、顔の特徴、視線、頭の向きなどを検出・分析できる。
Anger, disgustm fear, happiness, sadness,surprise, neutralというように7つの感情を分析できます。使用理由はライブラリをPythonで統一したかった、分析できる感情が一番多い。数値化でき、AIに渡しやすい。などがあります。
開発サイクル
-2024-
ver1~2: AIへのプロンプトを作成
検査入院: プロトタイプの検証1
ver3~4: 感情分析システムの構築
長期入院: プロトタイプの検証2
ver5~6: 実用化に向けたUI, セキュリティ面の改良
ver7: 感情分析システムとAIを統合
ver8: 過去の会話を記憶できるシステムの検討(失敗)
-2025-
ver9~10: リアルタイムで表情分析し、返答を変える
開発環境
開発はこの環境で行いました!
My PC!
OS: Windows11
実装RAM: 64GB
プロセッサ: Corei7
開発プラットフォーム
Unity 2022.3.4f1
Visual Studio 2019
使用言語
C# (Unity)
Python 3.10.7
使用API / ライブラリ
ChatGPT API gpt-4o
Py-Feat
Flask
CV2
Numpy
具体的な開発手順
1. アプリの基盤となるAIとのチャットシステムをUnityで開発
UnityUIのInputFieldに入力した内容をChatGPT APIを用いてプロンプトとともにChatGPTに送信するシステムを開発。
2. 顔写真を撮り、Pythonで表情分析するシステムの開発
Unityのwebcamtextureを用いて撮影した顔写真をHTTP経由でPythonのflaskサーバーに送信し、表情分析を行うシステムを開発
3. 表情分析結果をChatGPTに送信するシステムの開発
Unityへ表情分析の結果を送信し、Canvasに表示する。そしてChatGPTにも表情分析の結果を送信するシステムを開発。
4. ユーザーの表情をリアルタイムで分析, AIに送信するシステムの開発
InputFieldの入力を検知し、テキストが送信される直前に感情分析を行い、結果をChatGPTに送信するシステムを開発。
4. 技術面での工夫点
1. AIへのプロンプトについて
臨床心理学が関わっており、複雑になるので大枠だけ!
複数のチャットボット(雑談用, お悩み相談用, お悩み解決用など)をひとまとめにし、ユーザーが話したい内容を AIが自分で判断し、寄り添った返答をする ようにしました。
2. 感情分析システムについて
会話が始まると同時に自動で分析システムを起動させ、会話ごとに
随時ユーザーの感情を分析するようにしています!
→ 感情変化を検知し、返答を変える & 作り笑顔による誤認識を防止!
3. AIと感情分析システムの統合
ユーザーの好き嫌いを表情分析結果を元に認識し、それによって出力を変更するようにしました。
例: スポーツの話でHappyの値が上昇し、逆に人間関係の話でSadnessの値が上昇した
→ AIは人間関係の話はせず、ユーザーが好きな話をするように(詮索しない)
5. 現状の課題
AIとの会話が保存できない。
以下の 想定質問 でセキュリティ対策〜!なんてカッコつけてますが、
ただただ技術力の問題で保存できないだけです(サーバー関連わからん)
感情分析がローカルPCでないとできない
Flaskでローカルサーバーを立てて顔写真のやり取りをしているため、多くの方に使っていただくには問題が山積みです…がんばる
別にすごくない!
Py-Featのサンプルコードをコピペして、Unityと連携できるように(ChatGPTが)しただけなので別に技術革新!という訳でもないのが個人的に悲しいです。
想定質問への返答
セキュリティ面
・入力が他人にバレる可能性
前提として、セキュリティ面の観点からAIとの会話内容は保存されていません。AIとの送受信をUnity上のCanvasに提示しているだけなので、⌘Rした途端に会話内容が全部消えます。
・顔写真が流出する可能性
顔写真を撮る,分析する,AIに送信する。この3手順が終わり次第すぐに消去するよう設定しているため流出は考えにくいです。
感情分析システムの精度
Py-Feat側の精度に依存するため、こちらからは何もできない状況です。
そのため、ユーザーがテキストを送信すると同時に、毎度感情分析を行なっています。
AIの応答速度
なぜかわからないけど(ここ重要)爆速です。
上記でも説明した通り、ローカル環境でしかテストをしていないのでスマホやMac,など環境が変われば遅くなる可能性もあります。
6. 今後の展望 / 終わりに
Polarisは、ユーザーの 安心して話せる相手 になれるように開発しました。
今後は LangChainとの連携や音声感情分析 も取り入れ、より高度な対話AIへ進化させたいと思います!
これからも開発を続けていくので、興味がある方はぜひフォローしてください!
質問やフィードバックも大歓迎です!
以上、BelltreeTech まり でした!
本開発は株式会社リバネス ベネッセこども基金の援助を受けて行なっています。開発に携わってくださった方々、大変ありがとうございました。