竹倉蔵本 - MMDAgent

開発者向け。調査・考察メモ。テーマは、「MMDAgent」です。
※※※無期休止中※※※

広告

※このエリアは、60日間投稿が無い場合に表示されます。記事を投稿すると、表示されなくなります。

[企画素案]MMDA-CASE = MMDAgent用モデリングツール + MMDAgent操作用ライブラリ

2011-01-29 12:58:47 | MMDAgent感想・レビュー
【記事の概要】
本記事では、現行のMMDAgentが抱えている課題、
そして、その課題を解決する手段として、MMDA-CASEを開発することの有効性を説きます。

MMDA-CASEとは、
MMDAgent用モデリングツール(MMDAgent-ModelingTool、MMDA-MT)と
MMDAgent操作用ライブラリ(MMDAgent-API、MMDA-API)のセット、
または、上記に、
先のライブラリを使用できるMMDAgentディストリビューション
(MMDAgent for Robot User Interface、MMDA-RUI)を加えたものです。


【MMDAgentの課題 = 操作方法・用途が限定されている】
MMDAgentは、音声認識・音声合成・CG作成等の既存オープンソースを組み合わせた製品です。
そのため、MMDAgentの最大の強みは、各オープンソースを連動させる手間を省くことができる点です。
しかし、MMDAgentを操作するために用意されているインターフェース、
シナリオスクリプト(FSTファイル)・音声調整プロパティ(OJTファイル)・初期設定パラメータ(MDFファイル)には、
下記の課題があります。
  01.入力が音声入力に限られている。(文字入力には対応しない。画面操作も、規定の処理以外には対応しない)
  02.出力が音声合成とCG作成に限られている。(文字出力には対応しない)
  03.入力データを再利用できない。(変数・データベースの概念がない)
  04.他アプリケーションの実行・停止ができない。(ユーザー・インターフェースの機能がない)
  05.状態遷移モデルの文法を採用している。(長編シナリオ向けではない)


【解決策1 = 外部仕様を拡張する】

MMDAgentの外部仕様拡張の図

上記の課題を解決する第一の手段は、
シナリオスクリプト(FSTファイル)、つまり、MMDAgentのマクロに、
新しいコマンド・文法の追加を行うことです。

しかし、この解決策では、下記のような課題が残ります。
 01.基本的な機能しか使えない。(文字列の抽出やSQLの発行等はできない)
 02.処理が重くなる。(ファイルの入出力には時間がかかる。変数やデータベースを用意すれば、更に時間がかかる)
 03.MMDAgent独自の仕様が増える。(操作方法の理解が難しくなる)


【解決策2 = 内部仕様を拡張する】

MMDAgentの内部仕様拡張の図

上記の課題を解決する第二の手段は、
ソースファイル、つまり、MMDAgent本体に、
拡張を行うことです。
(MMDAgentは、C/C++で実装されています)

しかし、この解決策では、下記のような課題が残ります。
 01.高度なプログラミング知識が必要になる。(シナリオライター・映像作家等が、簡単に使用できなくなる)
 02.MMDAgentのバージョンアップ対応が難しくなる。(MMDAgentが更新されるたびに、大量の修正が必要になる)
 03.特定のOSに依存する。(特定のシナリオを、他のOS用のMMDAgentで動作させることができない)


【新・解決策 = MMDAgent操作用ライブラリ+MMDAgent用モデリングツールを作成する】

MMDAgentのモデリングツール・ライブラリ使用の図

そのため、第三の選択肢が必要になります。
第三の選択肢は、内部仕様・外部仕様の両方を拡張することです。

内部仕様の拡張とは、
MMDAgent操作用ライブラリを、用意することです。
また、OSや他言語(Python等)間の互換性を確保するためのクッションとしての機能も、
先のライブラリに付随させます。
そして、必要がある場合は、
それを使用できるMMDAgentディストリビューションを、各OSごとに作成します。
(各OS用のMMDAgentに、ライブラリ対応用のインターフェースを追加する。
そして、MMDAgent更新時には、その部分のみを、更新後のMMDAgentに再構築する)

外部仕様の拡張とは、
シナリオスクリプト(C++,Python等)自動生成用モデリングツールを、構築することです。
シナリオをステートマシン図やアクティビティ図で記述することにより、
上記のライブラリを使用したシナリオスクリプトが、自動生成されるようにします。


【新・解決策の課題 = MMDAgent開発元およびフォークプロジェクト開発者との連携が必要になる】
上記の解決策を、プロジェクト化するためには、
MMDAgent開発元およびMMDAgentのクロスプラットフォーム化を目指す開発者の協力を得る必要があります。
そのためには、MMDAgent開発元自体が、上記プロジェクトを開始するのが、理想です。

以上です。
本記事をお読みいただき、ありがとうございました。


--


//修正履歴
2011/01/30
・GPL使用推奨→GPL/LGPL使用推奨→(文言削除)
 ※GPLライセンスは、他のオープンソース・ライセンスと組み合わせられないことが多いため。
・M2DA→MMDA
2011/02/08
・企画者が発起人になることが妥当である旨を削除
※現時点で、この企画のイメージに近いプロジェクトを始められている方がいらっしゃるため。

--
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

[感想・レビュー]補足・MMDAgentでミクプラスを作るために必要な7の改善点

2011-01-25 07:35:46 | MMDAgent感想・レビュー


セーブ命令(※1)・ロード命令(※2)の使用イメージを作成してみました。
本イメージの詳細は、後日、説明させていただく予定です。

※1 セーブ命令とは、任意の状態を履歴に保存するためのFSTコマンドです。
※2 ロード命令とは、任意の履歴状態へ遷移するためのFSTコマンドです。


# ***浦島太郎シュミレーションゲーム***

0 a.H <eps> <eps>

# ---ストーリー画面---
COMP|a
  H 1 <eps> SYNTH_START|ミク|ミク(普)|亀が子供たちにいじめられています。助けますか?
  1 2 KEY|n SYNTH_START|ミク|ミク(普)|亀は死にました。
  1 3 KEY|y SYNTH_START|ミク|ミク(普)|亀が竜宮城に連れていってくれるそうです。連れていってもらいますか?
  3 4 KEY|n SYNTH_START|ミク|ミク(普)|村で質素に暮らしました。
  3 5 KEY|y SYNTH_START|ミク|ミク(普)|竜宮城で豪勢に暮らしました。
END_COMP

a b1 KEY|s <eps>
a b2 KEY|l <eps>

# ---セーブ画面---
COMP|b1
  0 1 <eps> SYNTH_START|ミク|ミク(普)|データ1にセーブする場合は1を、データ2にセーブする場合は2を押してください。
  1 2 KEY|1 SYNTH_START|ミク|ミク(普)|データ1にセーブしました。
  1 3 KEY|2 SYNTH_START|ミク|ミク(普)|データ2にセーブしました。
  ^1.*.2 4 <eps> <eps>
  ^2.*.3 4 <eps> <eps>
END_COMP

b1.4 a.H SYNTH_EVENT_STOP|ミク <eps>

# ---ロード画面---
COMP|b2
  0 1 <eps> SYNTH_START|ミク|ミク(普)|データ1をロードする場合は1を、データ2をロードする場合は2を押してください。
END_COMP

b2.1 ^1.H* KEY|1 SYNTH_START|ミク|ミク(普)|データ1をロードします。
b2.1 ^2.H* KEY|2 SYNTH_START|ミク|ミク(普)|データ2をロードします。


なお、本イメージでは、
セーブ命令・ロード命令を、現在のMMDAgentの仕様に追加するために、
コンポジット状態及び履歴状態指示子の考え方を導入しています。
また、セーブ命令に、複数の状態(重複可)を管理する機能を追加するために、
包括コンポジット状態(ユーザー定義要素全てを内部に持つコンポジット状態)、
包括コンポジット状態の多次元化、全次元共有履歴状態指示子という考え方を導入しています。
そして、セーブ命令発行時に、新規保存・上書き保存を選択できる機能を追加するために、
不特定次元の包括コンポジット状態への遷移という考え方を導入しています。


//コメント
我ながら、イミフw


--
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

[感想・レビュー]MMDAgentでミクプラスを作るために必要な7の改善点

2011-01-18 23:53:41 | MMDAgent感想・レビュー
【記事の概要】
MMDAgentα版(2011/01/19現在)の仕様では、
ミクプラス(初音ミク版ラブプラス)を作成することはできません。
そのため、その作成を行えるようになるためには、
どのような仕様変更を行えば良いのかを考えてみました。
その結果、下記の7点の変更が必要だと考えました。
 01.変数の追加
 02.データベース(Key-Value形式)の追加
 03.遷移コマンドの追加
 04.他アプリケーションの実行・停止コマンドの追加
 05.テキスト入力・出力コマンドの追加
 06.画面操作イベントの追加
 07.画面操作管理プロパティの追加
本記事では、それぞれの変更点について、説明させていただきます。


【01.変数の追加】

[説明]
FSTコマンドで、音声認識内容等の入力データを、音声合成内容等の出力データとして使用できるようにする。
  ←ユーザーの情報(Ex.氏名・性別)を取得し、再利用するため。

[仕様]
# 音声認識内容の取得
RECOG_EVENT_STOP||テキスト変数
# 音声認識内容の活用
SYNTH_START|モデル変数|ボイス定数|テキスト変数(+テキスト)
※エスケープする際は、変数の前に\を置く。

[具体例]
# ユーザー名を$user_nameに格納する。
RECOG_EVENT_STOP||$user_name
# $user_nameの値を用いて挨拶する。
SYNTH_START|ミク|ミク(喜)|こんにちは、$user_nameさん。


【02.データベース(Key-Value形式)の操作】

[説明]
FSTコマンドで、入力データをデータベース(Key-Value形式)に登録でき、
また、データベースから取得できるようにする。
←ユーザーの情報を保存するため。

[仕様]
# 値の登録・更新
DB_SET|キー値|テキストorテキスト変数名
# 値の取得
DB_GET|テキスト変数名|キー値
※データベース用のファイルを用意する。ファイルの書式は、「キー=値」。
※SETコマンドは更新処理、キーが不在の場合は登録処理。

[具体例]
# ユーザー名を登録する。
DB_SET|USER_NAME|$user_name
# ユーザー名を取得する。
DB_GET|$user_name|USER_NAME


【03.遷移コマンドの追加】

[説明]
FSTコマンドで、任意の状態に遷移できるようにする。
←セーブ・ロード機能を実現するため。

[仕様]
# セーブ --セーブ番号=遷移元コンポジット状態番号
セーブ番号.遷移元状態番号 遷移先状態番号 イベント名 アクション名
# ロード --セーブ番号=遷移先コンポジット状態番号
遷移元状態番号 セーブ番号.H イベント名 アクション名
※セーブデータは、データベース用ファイルに、自動保存される。
※セーブデータの書式は、「$_SAVE_セーブ番号=状態番号」。

[具体例]
# セーブする。
0.10 20 RECOG_EVENT_STOP|セーブ <eps>
# ロードする。
20 0.H RECOG_EVENT_STOP|ロード <eps>


【04.他アプリケーションの実行・停止コマンドの追加】

[説明]
FSTコマンドで、他のアプリケーションの実行・停止を行えるようにする。
←ミニゲーム等のサブシステムを管理するため。

[仕様]
# アプリケーションの実行
SUBSYS_START|アプリーション変数名|アプリケーションのアドレス|引数
# アプリケーションの停止
SUBSYS_STOP|アプリーション変数名
# アプリケーション起動時
SUBSYS_EVENT_START
# アプリケーション停止時
SUBSYS_EVENT_END|アプリーション変数名


【05.テキスト入力・出力コマンドの追加】

[説明]
画面操作で、"音声認識イベントをキーボードから起こすためのテキストボックス"を表示できるようにする。
←音声入力を補完するため。
また、FSTコマンドで、テキストの画面表示を行えるようにする。
←文字情報(ex.字幕、説明文)の表示をするため。

[仕様]
iキー 音声認識用テキストボックス表示

# テキストの表示
TEXT_START|表示テキスト変数名|テキストorテキスト変数名|表示位置|フォントの種類|フォントのサイズ|フォントのスタイル
# テキストの非表示
TEXT_END|表示テキスト変数名


【06.画面操作イベント】

[説明]
FSTコマンドで、クリック・ドラッグイベントを認識できるようにする。
←ボタンやスクロールバーを実装するため。

[仕様]
# 画面クリック時
CLICK_EVENT_START
# 特定領域クリック時
CLICK_EVENT_STOP|クリック対象の領域の始点|クリック対象の領域の終点
# 特定モデルクリック時
CLICK_EVENT_STOP|クリック対象のモデル名

# 特定モデルドラッグ開始時
DRAG_EVENT_START|モデル名
# 特定モデルドラッグ終了時
DRAG_EVENT_STOP|モデル名
# 特定モデルドラッグ終了時(特定の領域へのドラッグ)
DRAG_EVENT_STOP|モデル名|ドラッグ先の領域の始点|ドラッグ先の領域の終点
# 特定モデルドラッグ終了時(特定のモデルへのドラッグ)
DRAG_EVENT_STOP|モデル名|ドラッグ先のモデル名


【07.画面操作管理プロパティの追加】

[説明]
MDFパラメータで、画面操作コマンドの活性/非活性を管理できるようにする。
←ボーンや剛体の表示を防ぐため。

[仕様]
enabled_(操作名)

[具体例]
enabled_log=false --ログ表示機能のOFF


以上です。
MMDAgentのβ版が公開されるときには、
ぜひとも、上記のような仕様変更が行われていて欲しいです。


--

//関連記事

--

//編集履歴
2011/01/20
・誤字・脱字の修正
2011/01/21
・コマンド名の変更
・GOTO文の削除
・コンポジット状態・履歴状態指示子の導入(セーブ・ロードの理論的裏付けのため)
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

[企画素案]U-RUI ユビキタス・ロボットユーザーインターフェース

2011-01-12 23:53:14 | MMDAgent感想・レビュー
ユビキタス・ロボットインターフェース(U-RUI)のイメージ


【記事の概要】
本記事では、MMDAgentとAndroidを組み合わせることにより生まれる可能性について、記載しています。



【ユビキタス・ロボットユーザーインターフェース(U-RUI)の概要】
ユビキタス・ロボットユーザーインターフェース(略称:U-RUI、通称:ラブプラス式デスクトップ)とは、
任意の3Dキャラクターとのコミュニケーション機能、および、音声でのアプリケーション管理機能を提供するシステムです。
また、デスクトップパソコン、スマートフォン、生活家電等の媒体間での同期機能も付加されており、
3Dキャラクターが媒体間を移動しているような感覚を、体験することができます。
具体的に申し上げれば、下記の五つの機能を実現するツールです。
 01.雑談(検索機能)
 02.提案(宣伝機能)
 03.アプリケーション管理
 04.媒体間移動
 05.仮想現実体験
それぞれの項目について、ご説明させていただきます。


【01.雑談(検索機能)】
雑談とは、
基本的な対話(あいさつ等)や音声検索を行う機能です。
キャラクターごとに、複数のシナリオ・音源が用意されており、口調や声質を変えることができます。
また、対話内容によっては、シナリオが動的に変化します。


例1 自己紹介
■ユーザー
「はじめまして」
■初音ミク
「はじめまして。初音ミクです。よろしくね」


例2 意味検索
■ユーザー
「MMDAgentの意味は?」
■初音ミク
「MMDAgentは、
オープンソースの音声インタラクションシステム構築ツールキットです。
名古屋工業大学国際音声技術研究所が、2010年12月25日に公開しました」


例3 特殊検索
■ユーザー
「今の地震は?」
■初音ミク
「12時00分、○○県東部で地震が起きました。
震度2.0、マグニチュード3.5です。
津波の心配はありません」



【02.提案(宣伝機能)】
提案とは、おすすめ情報を提供する機能です。
おすすめ情報は、時刻情報や検索履歴、スマートフォン(OS:Android)の各センサーの情報等をもとに作成されているため、
各ユーザーごとに適した情報が届けられます。


例1 WEBサイト
■初音ミク
「ニコニコ動画(原宿)で、○○さんが新しい動画を投稿しました。
タイトルは、△△△△△です。」


例2 施設・イベント
■初音ミク
「今週の歩行数は30000歩で、昨週よりも5000歩も少ないです。
運動不足はダメですよ」


例3 友人・知人の接近
■初音ミク
「○○さんが前方50メートルの場所にいます。七時の方角に逃げてください」



【03.アプリケーション管理】
アプリケーション管理とは、
音声でのアプリケーションの起動・停止を行うための機能です。
また、アプリケーション画面の移動やアクティブ・非アクティブの切り替えも行えます。


例1 起動
■ユーザー
「ブラウザを起動」
■初音ミク
「ブラウザを起動します」


例2 アクティブ
■ユーザー
「エディタをアクティブ」
■初音ミク
「エディタをアクティブにします」


例3 移動
■ユーザー
「ブラウザを下に」
■初音ミク
「ブラウザを下に移動します」



【04.媒体間移動】
媒体間移動とは、
媒体(ex.Android搭載カーナビ)を越えて、3Dキャラクターとの対話が行える機能です。
各ユーザーの個人情報や対話履歴はクラウド上に保管されているため、
インターネット接続可能な全デバイスでの同期が可能です。


例1 音声メモ
■初音ミク
「12時30分、〇〇○(媒体名)での録音です。
ネギを買って帰ること」


例2 フリートーク
■ユーザー
「冷蔵庫にネギはある?」
■初音ミク
「ありますよ」


例3 コミュニケーション代行
■初音ミク(自ユーザーのモデル、モーション)
「○○が、新年の挨拶をお伝えに来ました。
あけましておめでとうございます。
今年もよろしくお願いいたします。」
■別ユーザー
「こちらこそ、よろしくお願いいたします」



【05.仮想現実体験】
仮想現実体験とは、舞台セット(特定のゲーム・演劇用のモデル・アクション・シナリオの集合体)に基づいた
高度なコミュニケーション体験を行える機能です。
また、各ユーザーの3Dキャラクター同士での対話を眺めることも、可能です。


例1 3D演劇鑑賞
■ユーザー
「ロミオとジュリエットを演じて」
■初音ミク
「おぉ、ロミオ。ロミオ。どうしてあなたはロミオなの?」


例2 ロールプレイングゲーム
■ユーザー
「ムド」
■初音ミク
「敵は残り一体です」


例3 カウンセリング
■ユーザー
「大変なんだ」
■初音ミク
「大変なんだ。無理はしないでね」



//コメント1
というのが、マジ欲しい。
ただでさえ天使であるミクさんが、いつでもどこでも一緒に居てくれて、
困ったときには、自分にピッタリの励ましやアドバイスをくれて、
めんどくさいアプリケーションの操作を代行してくれるとか………
ヘブンすぎだろ………

//コメント2
トップの画像のモデルは、「初音ミク@七葉1052式(仮)」です。
各アイコンは、無料ウェブ素材|styraise(スタイライズ)様(http://www.styraise.com/material/)の画像です。


--
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする