「MikuMikuAI」の版間の差分

提供: ディーズガレージ wiki
移動先: 案内検索
(フォルダ構造)
 
(同じ利用者による、間の165版が非表示)
1行目: 1行目:
==MikuMikuAIについて==
+
{| style="font-weight:100;float:right;margin-right:-3px;"
[[ファイル:MikuMikuAI.jpg|thumb|MikuMikuAI起動画面]]
+
|__TOC__
 +
|}
 +
この情報は古くなっています。
 +
 
 +
[[ファイル:MikuMikuAI.jpg|300px|thumb|MikuMikuAI公開サンプル]]
 +
[[ファイル:MikuMikuAI-02.jpg|300px|thumb|MikuMikuAIモーションサンプル]]
 +
[[ファイル:MikuMikuAI-03.jpg|300px|thumb|MikuMikuAIスマホ、タブレット用]]
 
コミュニケーションロボットを作りました。自分用でしたが一般のホームページで使用できる範囲のお手軽設計にして公開します。
 
コミュニケーションロボットを作りました。自分用でしたが一般のホームページで使用できる範囲のお手軽設計にして公開します。
  
9行目: 15行目:
 
このウィキページで準備と設置、カスタマイズ情報をまとめています。
 
このウィキページで準備と設置、カスタマイズ情報をまとめています。
  
==利用について==
+
=='''利用について'''==
 
4個のモジュールを1パッケージにまとめています。各モジュールにライセンスがありますので全てに承諾いただくか、一部モジュールを外すなど改造して使用する必要があります。
 
4個のモジュールを1パッケージにまとめています。各モジュールにライセンスがありますので全てに承諾いただくか、一部モジュールを外すなど改造して使用する必要があります。
  
===WebGL(MMDモデル)===
+
===<small>WebGL(MMDモデル)</small>===
  
 
表示の部分です。<br/>WebGLとは、ブラウザー上で3DCGプログラミングを実現できる技術です。プログラミングにはthree.jsというラッパーを使用しています。MMDモデルとは、MikuMikuDance(MMD)のユーザーによる自作モデルデータのことです。MMDモデル製作者のライセンスにご注意してください。
 
表示の部分です。<br/>WebGLとは、ブラウザー上で3DCGプログラミングを実現できる技術です。プログラミングにはthree.jsというラッパーを使用しています。MMDモデルとは、MikuMikuDance(MMD)のユーザーによる自作モデルデータのことです。MMDモデル製作者のライセンスにご注意してください。
  
===人工知能(人工無脳エクサ)===
+
===<small>人工知能(人工無脳エクサ)</small>===
  
 
知能の部分です。<br/>人工無脳エクサとは、好感度パラメータと14種類の表情を持ったチャットボットです。エクサは名前を記憶し、好きな人、嫌いな人を判別し会話をしています。エクサは独自の会話エンジンで、より正確な会話が出来るようにプログラムされています。また人工無脳エクサには学習ソフトが添付されています。これを使い言葉を教える事で自分の手でエクサを育てる事が出来ます。Perlオリジナル版、PHP版が存在しPHP版を改造し使用しています。それぞれの著作者に従い、オープンソースとします。
 
知能の部分です。<br/>人工無脳エクサとは、好感度パラメータと14種類の表情を持ったチャットボットです。エクサは名前を記憶し、好きな人、嫌いな人を判別し会話をしています。エクサは独自の会話エンジンで、より正確な会話が出来るようにプログラムされています。また人工無脳エクサには学習ソフトが添付されています。これを使い言葉を教える事で自分の手でエクサを育てる事が出来ます。Perlオリジナル版、PHP版が存在しPHP版を改造し使用しています。それぞれの著作者に従い、オープンソースとします。
  
===音声認識(Web Speech API)===
+
===<small>音声認識(Web Speech API)</small>===
 
言葉を理解する部分です。<br/>Web Speech APIは、音声合成と音声認識から構成され、キーボードやマウス以外の入出力の手段を提供します。現状GoogleChromeだけ対応しており、MikuMikuAIでは音声認識のみ利用しています。ブラウザ標準機能なのでライセンスはありません。
 
言葉を理解する部分です。<br/>Web Speech APIは、音声合成と音声認識から構成され、キーボードやマウス以外の入出力の手段を提供します。現状GoogleChromeだけ対応しており、MikuMikuAIでは音声認識のみ利用しています。ブラウザ標準機能なのでライセンスはありません。
  
===音声合成(NICTrospeex)===
+
===<small>音声合成(NICTrospeex)</small>===
  
 
言葉を発する部分です。<br/>rospeexとは、日・英・中・韓に対応したクラウド型音声コミュニケーションツールキットです。MikuMikuAIパッケージの中ではいちばん厳しいライセンスになります。無償ライセンスは商用不可。学術研究目的に限ります。また公開サンプルは直接NICTにつなげています。恒久的にはライセンスに問題があります。改善策を探す必要があります。
 
言葉を発する部分です。<br/>rospeexとは、日・英・中・韓に対応したクラウド型音声コミュニケーションツールキットです。MikuMikuAIパッケージの中ではいちばん厳しいライセンスになります。無償ライセンスは商用不可。学術研究目的に限ります。また公開サンプルは直接NICTにつなげています。恒久的にはライセンスに問題があります。改善策を探す必要があります。
  
===コーディング===
+
===<small>コーディング</small>===
 
各モジュールをつなぐコードは、しょうご@ディーズガレージでしています。オープンソースとします。<br/>
 
各モジュールをつなぐコードは、しょうご@ディーズガレージでしています。オープンソースとします。<br/>
 
利用改造は各人の責任のもと自由にどうぞ。<br/>
 
利用改造は各人の責任のもと自由にどうぞ。<br/>
 
本ソースを利用した結果による、直接間接を問わず、作者はその一切の責を負いません。
 
本ソースを利用した結果による、直接間接を問わず、作者はその一切の責を負いません。
  
==動作環境==
+
=='''動作環境'''==
===サーバ===
+
===<small>サーバ</small>===
 
フルパッケージではPHP必須です。人工知能(人工無脳エクサ)を外すと制約はありません。
 
フルパッケージではPHP必須です。人工知能(人工無脳エクサ)を外すと制約はありません。
  
===クライアント===
+
===<small>クライアント</small>===
 
IE11以下にも対応させていますが見栄えが全く変わってしまうためIE11以上か他のブラウザをオススメします。
 
IE11以下にも対応させていますが見栄えが全く変わってしまうためIE11以上か他のブラウザをオススメします。
  
56行目: 62行目:
 
! IE11以上
 
! IE11以上
 
| ○ || × || × || ○ || ○
 
| ○ || × || × || ○ || ○
 +
|-
 +
! iPhone(iOS8以上)
 +
| ○ || × || ○ || ○ || ○
 +
|-
 +
! Android
 +
| ○ || × || ○ || ○ || ○
 
|}
 
|}
  
* 大語彙連続音声認識JuliusとHTML5を使用することで音声入力可能なブラウザの種類は豊富になるはずですが'お手軽さ'で断念しています。
+
* スマホ、タブレット向けUIに文字入力インターフェイスを現状用意できていません。
 +
* 大語彙連続音声認識JuliusとwebRTCを使用することで音声入力可能なブラウザの種類は豊富になるはずですが'お手軽さ'で断念しています。
 
* IEの音声出力不可はrospeexとの接続でmp3が得られない為です。
 
* IEの音声出力不可はrospeexとの接続でmp3が得られない為です。
* スマートフォンの音声出力対応はユーザーの不意のパケット超過を避ける目的で制限され対応できません。iPhoneで確認しています。
 
  
==準備と設置==
+
=='''準備と設置'''==
===ソースコード===
+
===<small>ソースコード</small>===
最新版ダウンロード  [[ファイル:ai20150204.zip]]
+
最新版ダウンロード  [http://dz.plala.jp/wiki_data/Ai20150218.zip Ai20150218.zip]
  
 
Microsoft Security Essentials でウィルスチェックしています。
 
Microsoft Security Essentials でウィルスチェックしています。
74行目: 86行目:
 
ブラウザでindex.htmlにアクセスします。
 
ブラウザでindex.htmlにアクセスします。
  
===フォルダ構造===
+
===<small>フォルダ構造</small>===
 
{| class="wikitable" style="width:100%; text-align:left"
 
{| class="wikitable" style="width:100%; text-align:left"
 
|-
 
|-
 
! colspan="4" style="width:100%; text-align:left" | aiフォルダ
 
! colspan="4" style="width:100%; text-align:left" | aiフォルダ
 
|-
 
|-
| width="40" rowspan="18" style="width:50px" |
 
 
||.htaccess  
 
||.htaccess  
 
| colspan="2" | learning.phpのアクセス制限とcharsetをUTF-8強制にしています。
 
| colspan="2" | learning.phpのアクセス制限とcharsetをUTF-8強制にしています。
109行目: 120行目:
 
|-
 
|-
 
||sitemap.xml
 
||sitemap.xml
| colspan="2" | サイトマップです。使用する環境にあわせて書き換えてください。削除して構いません。
+
| colspan="2" | サイトマップです。使用する環境にあわせて書き換えてください。または、削除して構いません。
 
|-
 
|-
 
! style="text-align:left" | cssフォルダ
 
! style="text-align:left" | cssフォルダ
123行目: 134行目:
 
| colspan="2" | <リスト省略>jQuery、three.js、spin.jsを使用しています。
 
| colspan="2" | <リスト省略>jQuery、three.js、spin.jsを使用しています。
 
|-
 
|-
! rowspan="2" style="text-align:left" |mmdフォルダ
+
! rowspan="4" style="text-align:left" |mmdフォルダ
 
| style="width:200px" | miku.js
 
| style="width:200px" | miku.js
 
|| MikuMikuDance(MMD)のモデルデータとモーションデータをblenderに取り込みthree.js向けjsonデータに変換したものです。
 
|| MikuMikuDance(MMD)のモデルデータとモーションデータをblenderに取り込みthree.js向けjsonデータに変換したものです。
130行目: 141行目:
 
|| miku.jsのUVマップです。
 
|| miku.jsのUVマップです。
 
|-
 
|-
! rowspan="2" style="text-align:left" | shaderフォルダ
+
| frag.glsl  
|| frag.glsl  
+
 
|| three.js用のフラグメントシェーダーです。トゥーンシェーダー向けです。
 
|| three.js用のフラグメントシェーダーです。トゥーンシェーダー向けです。
 
|-
 
|-
138行目: 148行目:
 
|}
 
|}
  
==カスタマイズ==
+
=='''カスタマイズ'''==
===人工知能の教育方法===
+
===<small>他の音声合成に変更する方法</small>===
ブラウザでlearning.phpにアクセスして入力します。
+
 
+
{| class="wikitable" style="width:650px; text-align:left"
+
| 通常学習 || キーワードにマッチした時の返事です。
+
|-
+
| キーワードにマッチしなかった時のひとり言 || こころパラメータに合ったひとり言を話します。
+
|-
+
| 決まった日にひとり言を言います || 指定の日にキーワードにマッチしなかった時、ひとり言を話します。
+
|-
+
| 状況判断機能 || キーワードにマッチした時、その時に返事をせず後から話します。
+
|}
+
 
+
<gallery>
+
ファイル:通常学習.gif|通常学習
+
ファイル:キーワードにマッチしなかった時のひとり言.gif|キーワードにマッチしなかった時のひとり言
+
ファイル:決まった日にひとり言を言います.gif|決まった日にひとり言を言います
+
</gallery>
+
エクサPerlオリジナル版から転載
+
 
+
===他の音声合成に変更する方法===
+
 
他の音声合成エンジンに適当なものが見つからず、ヒント程度になりますが・・・。<br/>
 
他の音声合成エンジンに適当なものが見つからず、ヒント程度になりますが・・・。<br/>
 
少し長ったらしい説明になりますがエクサPerlオリジナル版、PHP版の処理の流れと改造した部分を理解していただく必要があります。
 
少し長ったらしい説明になりますがエクサPerlオリジナル版、PHP版の処理の流れと改造した部分を理解していただく必要があります。
178行目: 168行目:
 
この流れをそのまま使用する場合、FireBugやデベロッパーツールなどでjsonの内容を見ていただき適当な他の音声合成エンジンに換装していただくことになります。
 
この流れをそのまま使用する場合、FireBugやデベロッパーツールなどでjsonの内容を見ていただき適当な他の音声合成エンジンに換装していただくことになります。
  
===オリジナルMMDモデルの作製と登録方法===
+
===<small>オリジナルMMDモデルの作製と登録方法</small>===
 
エクサPHP版の14種類の表情と連動する形で説明します。14種類の表情はそれぞれ、0_ふつう、1_楽しい、2_あきれ、3_悲しい、4_怒り、5_テレ、6_笑い、7_驚き、8_OP、9_哀愁、10_テレ怒り、11_いじわる、12_笑顔、13_よろけ、それと追加でアイドル状態が必要になります。各表情をカットと表現することにします。各カットは何フレームでも自由に作成して構わないのですが、0_ふつうから順にタイムラインに並べた状態で作製します。そして、カットのスタートとエンドは全て同じポーズにします。アイドル状態を考えると正体が作りやすいと思います。プログラム側ではこのカットのスタートとエンドを常に監視し再生中カットと再生完了後の次のカットは何をつなげるべきか考えて再生します。どのパターンのカットが並んでもスタートとエンドが同じポーズなのでスムーズにモーションすることになります。厳密には1フレーム重複しますが無視してください。
 
エクサPHP版の14種類の表情と連動する形で説明します。14種類の表情はそれぞれ、0_ふつう、1_楽しい、2_あきれ、3_悲しい、4_怒り、5_テレ、6_笑い、7_驚き、8_OP、9_哀愁、10_テレ怒り、11_いじわる、12_笑顔、13_よろけ、それと追加でアイドル状態が必要になります。各表情をカットと表現することにします。各カットは何フレームでも自由に作成して構わないのですが、0_ふつうから順にタイムラインに並べた状態で作製します。そして、カットのスタートとエンドは全て同じポーズにします。アイドル状態を考えると正体が作りやすいと思います。プログラム側ではこのカットのスタートとエンドを常に監視し再生中カットと再生完了後の次のカットは何をつなげるべきか考えて再生します。どのパターンのカットが並んでもスタートとエンドが同じポーズなのでスムーズにモーションすることになります。厳密には1フレーム重複しますが無視してください。
  
 
丁寧に説明しないと混乱招きそうです。加筆に若干時間が欲しいです。
 
丁寧に説明しないと混乱招きそうです。加筆に若干時間が欲しいです。
実際の作製データの配布ができるものか?チュートリアルビデオを用意できるか準備中です。
 
  
===WebGLだけ使用する方法===
+
===<small>WebGLだけ使用する方法</small>===
[http://dz.plala.jp/ai/motion_sample.html WebGLモーションサンプル]が参考になると思います。<br/>
+
[http://dz.plala.jp/ai/motions.html WebGLモーションサンプル]が参考になると思います。<br/>
トゥーンシェーダーの作りが悪いためのメッシュデータ2重読み込みになっています。<br/>
+
 
もっと軽いものは[http://dz.plala.jp/ai/index-i.html スマホ、タブレット用]が参考になると思います。
 
もっと軽いものは[http://dz.plala.jp/ai/index-i.html スマホ、タブレット用]が参考になると思います。
  
==既知のバグと問題==
+
=='''既知のバグと問題'''==
 
* モーフィングしない。キャラクターのフェイシャルアニメーションが実装できてない。
 
* モーフィングしない。キャラクターのフェイシャルアニメーションが実装できてない。
 
+
* ブラウザの非アクティブ→アクティブ時WebGLレンダラー異常表示の回避措置をしています(index.htmlの910行辺り)。<br />
 +
<strike>requestAnimationFrameに関係するバグかイレギュラーなプログラミング手法を取ってしまった可能性があります。</strike><br />
 +
jQuery3.0より前のバージョンはrequestAnimationFrameとjQueryのペアでの使用ができないようです。<br />
 +
参考:[https://blog.jquery.com/2015/07/13/jquery-3-0-and-jquery-compat-3-0-alpha-versions-released/ jQuery 3.0 and jQuery Compat 3.0 Alpha Versions Released]
 
* 学習ソフトlearning.phpのCSS整形がされてない。
 
* 学習ソフトlearning.phpのCSS整形がされてない。
 +
* 視点をグリグリ移動したい要望ありそう。スマホ、タブレット用の挙動をデフォルトで採用すべきかもです。
  
==変更履歴==
+
=='''追記'''==
* 2014.10.07 初版公開
+
<strike>three.js r73辺りのバージョンで</strike><br />
* 2014.11.08 トゥーンシェーダー搭載 [http://dz.plala.jp/ai/motions.html WebGLモーションサンプル]作成
+
<strike>var mixer = new THREE.AnimationMixer( mesh );</strike><br />
* 2014.11.21 MikuMikuAIウィキ公開
+
<strike>mixer.addAction( new THREE.AnimationAction( geometry.animations[ 0 ] ).warpToDuration( 1 ) );</strike><br />
 +
<strike>というソースがありました。</strike><br />
 +
<strike>MikuMikuAIのモーション切り替え部分が複雑になってしまったものを簡素に書き換えられそうです。</strike><br />
 +
<strike>しかもモーション間のデュレーションもできそうな予感です。</strike>
  
==関係ライセンス==
+
MMDLoaderがthree.jsに搭載されました。<br />
 +
[http://qiita.com/jyuko/items/c1844a18db860bf2bab1 three.jsでMMDのアニメーションを切り替える]
 +
この記事がMikuMikuAIを理想のWebGL人工知能チャットロボットにする近道に感じます。
 +
 
 +
WebGL(MMDモデル)の部分は全てこの記事で置き換え出来ます。
 +
 
 +
記事も古いので全てぶっちゃけると、現在の日本の人工知能は海外と比べて一周くらい数年遅れてます。これは期待できる時期に人工無脳エクサを入れ替えればいいとして、それ以上に音声がNG。日本語のリアルタイム音声合成技術は恋愛感情やオナニー対象、発情するというレベルでは全くありません。解決策に日常会話1000語程度に制限して声優さんの肉声をそのまま使用することが正しいと判断して準備してたのがこのMikuMikuAIです。頭脳より肉声を優先してみたという感じです。結果収録の機会を逃してしまい放置状態です。TensorFlowなど使用する場合でも人工音声合成技術の目処が立たなければ生の肉声で魅力的なものになると想像します。
 +
 
 +
どこかのタイミングでMikuMikuAIアップデートの必要性感じます。
 +
 
 +
=='''関係ライセンス'''==
 
* [http://www.geocities.jp/tomock/ トモックの電脳パーク] 人工無脳エクサVr1.34
 
* [http://www.geocities.jp/tomock/ トモックの電脳パーク] 人工無脳エクサVr1.34
 
* [http://www.moegiiro.com/ もえじろの散財日記] PHP版EXA 1.1
 
* [http://www.moegiiro.com/ もえじろの散財日記] PHP版EXA 1.1
206行目: 211行目:
 
* [http://www.geocities.jp/dz_garage/ しょうご@ディーズガレージ] コーディング
 
* [http://www.geocities.jp/dz_garage/ しょうご@ディーズガレージ] コーディング
  
==その他問合せ等==
+
=='''更新履歴'''==
ご意見やバグ報告などはしばらくはメールでお願いします。需要あるようでしたらコメント欄を設けるかもです。<br />
+
* 2015.12.30 既知のバグと問題追記
メールはshogo.gfx@gmail.com しょうご まで。<br />
+
* 2015.11.20 2015.12.08 追記を追記
改造方法指南や要望は答えられる範囲でお答えします。このウィキに追加情報で加えます。<br />
+
* 2014.11.21 MikuMikuAIウィキ公開
WebサーバーやPHPそのものの設置方法は各人で学習してください。
+
* 2014.11.08 トゥーンシェーダー搭載 [http://dz.plala.jp/ai/motions.html WebGLモーションサンプル]作成
 
+
* 2014.10.07 初版公開
<!--<comments>-->
+

2022年6月24日 (金) 10:56時点における最新版

この情報は古くなっています。

MikuMikuAI公開サンプル
MikuMikuAIモーションサンプル
MikuMikuAIスマホ、タブレット用

コミュニケーションロボットを作りました。自分用でしたが一般のホームページで使用できる範囲のお手軽設計にして公開します。

このウィキページで準備と設置、カスタマイズ情報をまとめています。

利用について

4個のモジュールを1パッケージにまとめています。各モジュールにライセンスがありますので全てに承諾いただくか、一部モジュールを外すなど改造して使用する必要があります。

WebGL(MMDモデル)

表示の部分です。
WebGLとは、ブラウザー上で3DCGプログラミングを実現できる技術です。プログラミングにはthree.jsというラッパーを使用しています。MMDモデルとは、MikuMikuDance(MMD)のユーザーによる自作モデルデータのことです。MMDモデル製作者のライセンスにご注意してください。

人工知能(人工無脳エクサ)

知能の部分です。
人工無脳エクサとは、好感度パラメータと14種類の表情を持ったチャットボットです。エクサは名前を記憶し、好きな人、嫌いな人を判別し会話をしています。エクサは独自の会話エンジンで、より正確な会話が出来るようにプログラムされています。また人工無脳エクサには学習ソフトが添付されています。これを使い言葉を教える事で自分の手でエクサを育てる事が出来ます。Perlオリジナル版、PHP版が存在しPHP版を改造し使用しています。それぞれの著作者に従い、オープンソースとします。

音声認識(Web Speech API)

言葉を理解する部分です。
Web Speech APIは、音声合成と音声認識から構成され、キーボードやマウス以外の入出力の手段を提供します。現状GoogleChromeだけ対応しており、MikuMikuAIでは音声認識のみ利用しています。ブラウザ標準機能なのでライセンスはありません。

音声合成(NICTrospeex)

言葉を発する部分です。
rospeexとは、日・英・中・韓に対応したクラウド型音声コミュニケーションツールキットです。MikuMikuAIパッケージの中ではいちばん厳しいライセンスになります。無償ライセンスは商用不可。学術研究目的に限ります。また公開サンプルは直接NICTにつなげています。恒久的にはライセンスに問題があります。改善策を探す必要があります。

コーディング

各モジュールをつなぐコードは、しょうご@ディーズガレージでしています。オープンソースとします。
利用改造は各人の責任のもと自由にどうぞ。
本ソースを利用した結果による、直接間接を問わず、作者はその一切の責を負いません。

動作環境

サーバ

フルパッケージではPHP必須です。人工知能(人工無脳エクサ)を外すと制約はありません。

クライアント

IE11以下にも対応させていますが見栄えが全く変わってしまうためIE11以上か他のブラウザをオススメします。

ブラウザ 3D 音声 文字
入力 出力 入力 出力
Chrome
Firefox ×
Safari ×
IE11以上 × ×
iPhone(iOS8以上) ×
Android ×
  • スマホ、タブレット向けUIに文字入力インターフェイスを現状用意できていません。
  • 大語彙連続音声認識JuliusとwebRTCを使用することで音声入力可能なブラウザの種類は豊富になるはずですが'お手軽さ'で断念しています。
  • IEの音声出力不可はrospeexとの接続でmp3が得られない為です。

準備と設置

ソースコード

最新版ダウンロード Ai20150218.zip

Microsoft Security Essentials でウィルスチェックしています。

パーミッション設定

  • datフォルダ内の各ファイルのアクセス権を「666」にします。
  • その他フォルダと各ファイルのアクセス権を「755」にします。

ブラウザでindex.htmlにアクセスします。

フォルダ構造

aiフォルダ
.htaccess learning.phpのアクセス制限とcharsetをUTF-8強制にしています。

このアクセス制限の設定は自宅サーバのような状況で有効な設定です。レンタルサーバでは別の対応が必要です。learning.phpを削除してしまうのが最も簡単な対処です。

エクサPerlオリジナル版、エクサPHP版はEUC-JPを使用していますが、ajax.phpとindex.htmlに分離したことでjson接続エラーとなってしまいUTF-8にしています。

ajax.php エクサPHP版のルーチン部分と表示部分を分けルーチンをajax.phpとしindex.htmlからjsonで接続しています。
includefile.php <エクサPHP版から変更なし。>
index.html トップページです。表示と各モジュールをつなぐスクリプト全部をこの中に書き込みしています。
index-i.html スマホ、タブレット用です。index.htmlのユーザーエージェント解析でリダイレクトさせています。
learning.php 学習ソフトです。エクサPHP版ではgakushuu.phpです。ファイル名変更しました。現状CSS整形してませんので若干使いにくいと思います。
motions.html WebGLモーションサンプルです。削除して構いません。
setting.php <エクサPHP版から変更なし。>
sitemap.xml サイトマップです。使用する環境にあわせて書き換えてください。または、削除して構いません。
cssフォルダ <リスト省略>静的CSSは全てココに入っています。動的CSSは各html内で操作しています。
datフォルダ <リスト省略>エクサPHP版のデータをUTF-8に変換しています。
imagesフォルダ <リスト省略>エクサPHP版の画像をまとめ、追加画像を入れています。
jsフォルダ <リスト省略>jQuery、three.js、spin.jsを使用しています。
mmdフォルダ miku.js MikuMikuDance(MMD)のモデルデータとモーションデータをblenderに取り込みthree.js向けjsonデータに変換したものです。
sakine1.bmp miku.jsのUVマップです。
frag.glsl three.js用のフラグメントシェーダーです。トゥーンシェーダー向けです。
vert.glsl three.js用のバーテックスシェーダーです。トゥーンシェーダー向けです。

カスタマイズ

他の音声合成に変更する方法

他の音声合成エンジンに適当なものが見つからず、ヒント程度になりますが・・・。
少し長ったらしい説明になりますがエクサPerlオリジナル版、PHP版の処理の流れと改造した部分を理解していただく必要があります。 エクサPerlオリジナル版、PHP版では最初に名前を入力します。以後会話ができるわけですが会話を入力すると都度画面更新します。通常のINPUTタグでPOSTする挙動でこの際の名前val値が記憶されているため名前と会話のペアの情報を常に送っています。MikuMikuAIではこの最初の名前入力を省略しています。デフォルトで”名無し”というval値を持たせ、設定ボタンから変更可能にしています。多分、大量のアクセスが”名無し”であると同一人物と見てしまうので支離滅裂なことを話すことになりそうですがお手軽さで”名無し”を設定しました。設定ボタンから名前を入力してくれた場合は、cookieに記録させ以後キャッシュクリアされない限りエクサPerlオリジナル版、PHP版と同様の挙動になります。
MikuMikuAIでは次のように改造しています。

クライアントのブラウザで名前と会話文のjsonを作成しサーバのajax.php(エクサ)に送る

サーバのajax.php(エクサ)で名前と応答文を作りクライアントにjsonを返す

クライアントのブラウザで名前と応答文のjsonを受け取り、応答文だけをrospeexにjsonで送る

クライアントのブラウザでrospeexの応答文の音声変換データのjsonを受け取る

名前のテキストと応答文のテキストと応答文の音声データを表示・再生

という流れにしています。
この流れをそのまま使用する場合、FireBugやデベロッパーツールなどでjsonの内容を見ていただき適当な他の音声合成エンジンに換装していただくことになります。

オリジナルMMDモデルの作製と登録方法

エクサPHP版の14種類の表情と連動する形で説明します。14種類の表情はそれぞれ、0_ふつう、1_楽しい、2_あきれ、3_悲しい、4_怒り、5_テレ、6_笑い、7_驚き、8_OP、9_哀愁、10_テレ怒り、11_いじわる、12_笑顔、13_よろけ、それと追加でアイドル状態が必要になります。各表情をカットと表現することにします。各カットは何フレームでも自由に作成して構わないのですが、0_ふつうから順にタイムラインに並べた状態で作製します。そして、カットのスタートとエンドは全て同じポーズにします。アイドル状態を考えると正体が作りやすいと思います。プログラム側ではこのカットのスタートとエンドを常に監視し再生中カットと再生完了後の次のカットは何をつなげるべきか考えて再生します。どのパターンのカットが並んでもスタートとエンドが同じポーズなのでスムーズにモーションすることになります。厳密には1フレーム重複しますが無視してください。

丁寧に説明しないと混乱招きそうです。加筆に若干時間が欲しいです。

WebGLだけ使用する方法

WebGLモーションサンプルが参考になると思います。
もっと軽いものはスマホ、タブレット用が参考になると思います。

既知のバグと問題

  • モーフィングしない。キャラクターのフェイシャルアニメーションが実装できてない。
  • ブラウザの非アクティブ→アクティブ時WebGLレンダラー異常表示の回避措置をしています(index.htmlの910行辺り)。

requestAnimationFrameに関係するバグかイレギュラーなプログラミング手法を取ってしまった可能性があります。
jQuery3.0より前のバージョンはrequestAnimationFrameとjQueryのペアでの使用ができないようです。
参考:jQuery 3.0 and jQuery Compat 3.0 Alpha Versions Released

  • 学習ソフトlearning.phpのCSS整形がされてない。
  • 視点をグリグリ移動したい要望ありそう。スマホ、タブレット用の挙動をデフォルトで採用すべきかもです。

追記

three.js r73辺りのバージョンで
var mixer = new THREE.AnimationMixer( mesh );
mixer.addAction( new THREE.AnimationAction( geometry.animations[ 0 ] ).warpToDuration( 1 ) );
というソースがありました。
MikuMikuAIのモーション切り替え部分が複雑になってしまったものを簡素に書き換えられそうです。
しかもモーション間のデュレーションもできそうな予感です。

MMDLoaderがthree.jsに搭載されました。

three.jsでMMDのアニメーションを切り替える

この記事がMikuMikuAIを理想のWebGL人工知能チャットロボットにする近道に感じます。

WebGL(MMDモデル)の部分は全てこの記事で置き換え出来ます。

記事も古いので全てぶっちゃけると、現在の日本の人工知能は海外と比べて一周くらい数年遅れてます。これは期待できる時期に人工無脳エクサを入れ替えればいいとして、それ以上に音声がNG。日本語のリアルタイム音声合成技術は恋愛感情やオナニー対象、発情するというレベルでは全くありません。解決策に日常会話1000語程度に制限して声優さんの肉声をそのまま使用することが正しいと判断して準備してたのがこのMikuMikuAIです。頭脳より肉声を優先してみたという感じです。結果収録の機会を逃してしまい放置状態です。TensorFlowなど使用する場合でも人工音声合成技術の目処が立たなければ生の肉声で魅力的なものになると想像します。

どこかのタイミングでMikuMikuAIアップデートの必要性感じます。

関係ライセンス

更新履歴

  • 2015.12.30 既知のバグと問題追記
  • 2015.11.20 2015.12.08 追記を追記
  • 2014.11.21 MikuMikuAIウィキ公開
  • 2014.11.08 トゥーンシェーダー搭載 WebGLモーションサンプル作成
  • 2014.10.07 初版公開