差分

移動先: 案内検索

MikuMikuAI

14,826 バイト追加, 2014年11月24日 (月) 16:22
編集の要約なし
==MikuMikuAIについて==
[[ファイル:MikuMikuAI.jpg|thumb|MikuMikuAI起動画面]]
コミュニケーションロボットを作りました。自分用でしたが一般のホームページで使用できる範囲のお手軽設計にして公開します。

<big>[http://dz.plala.jp/ai/ 公開サンプル]</big> <big>[http://dz.plala.jp/ai/motion_sample.html モーションサンプル]</big>

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

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

===WebGL(MMDモデル)===

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

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

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

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

===音声合成(NICTrospeex)===

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

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

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

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

{| class="wikitable" style="width:400px; text-align:center"
! ブラウザ !! 3D !! colspan="2" | 音声 !! colspan="2" |文字
|-
!
| || 入力 || 出力 || 入力 || 出力
|-
! Chrome
| ○ || ○ || ○ || ○ || ○
|-
! Firefox
| ○ || × || ○ || ○ || ○
|-
! Safari
| ○ || × || ○ || ○ || ○
|-
! IE11以上
| ○ || × || × || ○ || ○
|}

* 大語彙連続音声認識JuliusとHTML5を使用することで音声入力可能なブラウザの種類は豊富になるはずですが'お手軽さ'で断念しています。
* IEの音声出力不可はrospeexとの接続でmp3が得られない為です。
* スマートフォンの音声出力対応はユーザーの不意のパケット超過を避ける目的で制限され対応できません。iPhoneで確認しています。

==準備と設置==
===ソースコード===
最新版ダウンロード [[ファイル:ai20141120.zip]]

MD5:c6dd1090a5880ff353b6efdc82cacdd5<br/>
Microsoft Security Essentials でウィルスチェックしています。

パーミッション設定
* datフォルダ内の各ファイルのアクセス権を「666」にします。
* その他フォルダと各ファイルのアクセス権を「755」にします。

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

===フォルダ構造===
{| class="wikitable" style="width:100%; text-align:left"
|-
! colspan="4" style="width:100%; text-align:left" | aiフォルダ
|-
| width="40" rowspan="18" style="width:50px" |
||.htaccess
| colspan="2" | learning.phpのアクセス制限とcharsetをUTF-8強制にしています。

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

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

==カスタマイズ==
===人工知能の教育方法===
[[ファイル:通常学習.gif|thumb|通常学習]]
[[ファイル:キーワードにマッチしなかった時のひとり言.gif|thumb|キーワードにマッチしなかった時のひとり言]]
[[ファイル:決まった日にひとり言を言います.gif|thumb|決まった日にひとり言を言います]]

ブラウザでlearning.phpにアクセスして入力します。

{| class="wikitable" style="width:650px; text-align:left"
| 通常学習 || キーワードにマッチした時の返事です。
|-
| キーワードにマッチしなかった時のひとり言 || こころパラメータに合ったひとり言を話します。
|-
| 決まった日にひとり言を言います || 指定の日にキーワードにマッチしなかった時、ひとり言を話します。
|-
| 状況判断機能 || キーワードにマッチした時、その時に返事をせず後から話します。
|}
エクサPerlオリジナル版から転載

===他の音声合成に変更する方法===
他の音声合成エンジンに適当なものが見つからず、ヒント程度になりますが・・・。<br/>
少し長ったらしい説明になりますがエクサPerlオリジナル版、PHP版の処理の流れと改造した部分を理解していただく必要があります。
エクサPerlオリジナル版、PHP版では最初に名前を入力します。以後会話ができるわけですが会話を入力すると都度画面更新します。通常のINPUTタグでPOSTする挙動でこの際の名前val値が記憶されているため名前と会話のペアの情報を常に送っています。MikuMikuAIではこの最初の名前入力を省略しています。デフォルトで”名無し”というval値を持たせ、設定ボタンから変更可能にしています。多分、大量のアクセスが”名無し”であると同一人物と見てしまうので支離滅裂なことを話すことになりそうですがお手軽さで”名無し”を設定しました。設定ボタンから名前を入力してくれた場合は、cookieに記録させ以後キャッシュクリアされない限りエクサPerlオリジナル版、PHP版と同様の挙動になります。<br/>
MikuMikuAIでは次のように改造しています。<br/>
<br/>
クライアントのブラウザで名前と会話文のjsonを作成しサーバのajax.php(エクサ)に送る<br/>
↓<br/>
サーバのajax.php(エクサ)で名前と応答文を作りクライアントにjsonを返す<br/>
↓<br/>
クライアントのブラウザで名前と応答文のjsonを受け取り、応答文だけをrospeexにjsonで送る<br/>
↓<br/>
クライアントのブラウザでrospeexの応答文の音声変換データのjsonを受け取る<br/>
↓<br/>
名前のテキストと応答文のテキストと応答文の音声データを表示・再生<br/>
<br/>
という流れにしています。<br/>
この流れをそのまま使用する場合、FireBugやデベロッパーツールなどでjsonの内容を見ていただき適当な他の音声合成エンジンに換装していただくことになります。

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

丁寧に説明しないと混乱招きそうです。加筆に若干時間が欲しいです。
実際の作製データの配布ができるものか?チュートリアルビデオを用意できるか準備中です。

===WebGLだけ使用する方法===
[http://dz.plala.jp/ai/motion_sample.html WebGLモーションサンプル]が参考になると思います。<br/>
トゥーンシェーダーの作りが悪いためのメッシュデータ2重読み込みになっています。<br/>
もっと軽いものは[http://dz.plala.jp/ai/index-i.html スマホ、タブレット用]が参考になると思います。

==既知のバグと問題==
* トゥーンシェーダーの作りが悪いためのメッシュデータ2重読み込みになっている

* モーフィングしない。キャラクターのフェイシャルアニメーションが実装できてない。

* WebGLのRayが異常。体に触れると起こるアクションで2D3Dの座標変換が出来ていない。

* 二重に音声が再生される場合がある

* 学習ソフトlearning.phpのCSS整形がされてない。

==変更履歴==
* 2014.10.07 初版公開
* 2014.11.08 トゥーンシェーダー搭載 [http://dz.plala.jp/ai/motion_sample.html WebGLモーションサンプル]作成 [http://dz.plala.jp/ai/oculus_sample.html OculusRiftサンプル]作成
* 2014.11.21 MikuMikuAIウィキ公開

==関係ライセンス==
* [http://www.geocities.jp/tomock/ トモックの電脳パーク] 人工無脳エクサVr1.34
* [http://www.moegiiro.com/ もえじろの散財日記] PHP版EXA 1.1
* [http://rospeex.org/ NICT(rospeex)] 音声コミュニケーションツールキット
* 咲音メイコver1.3 斜め上P daigoman氏 CRYPTON FUTURE MEDIA, INC
* [http://www.geocities.jp/dz_garage/ しょうご@ディーズガレージ] コーディング

==その他問合せ等==
ご意見やバグ報告などはしばらくはメールでお願いします。需要あるようでしたらコメント欄を設けるかもです。<br />
メールはshogo.gfx@gmail.com しょうご まで。<br />
改造方法指南や要望は答えられる範囲でお答えします。このウィキに追加情報で加えます。<br />
WebサーバーやPHPそのものの設置方法は各人で学習してください。

<comments>

案内メニュー