「未分類」カテゴリーアーカイブ

MocapForAll

MocapForAllというアプリがある。複数のWebCamでキャプチャできる。デモ動画を見る限りは,けっこう正確にサンプルできているような。本当だったらスゲーな!
・・・複数のカメラとCVを組み合わせるのは良いとして,各カメラの関係をどうやって測定するのか。それをARで解決してるのは賢いな!このひと多分日本人だね?もう1.5年くらい開発してるって言うし,アリじゃないのか!?

ノンバーバルAI250113

AIエージェントに必要なノンバーバルコミュニケーション
GPTにチャットが加わったことで、大規模言語AIは爆発的に普及した。つまり偉大なテクノロジーもインターフェイス次第ということだ。AIエージェントにとって、ノンバーバルコミュニケーション能力はインターフェイスだ。これらを強化することで、GPT→ChatGPTのようなインパクトが生じうる・・・はず

エージェントに実装されるノンバーバル技能は3種類だ。
・表情・・・文脈に応じて笑う、眉を潜めるなど。
・ジェスチャ・・・文脈に応じて頷く、首をふるなど。
・視線・・・自信のないときは目線をそらすなど。
これらを充実させてコミュニケーションに統合することで、やがて違和感は消失に近づく・・・と思われる。

MMD その2

前回のつづき
今回はMMDモデル、モーション、カメラの導入と操作方法について解説する。

MMDモデルの導入
※特段モデルが何でも良い場合は3.モーション・カメラモーションのダウンロードまで読み飛ばしてほしい。
MMD向けのキャラクターモデルのデータはPMXという拡張子の付いたデータが用いられている。ニコニコ立体やpixiv、YouTubeなどで無料公開されている者やboothで有料公開されているものなどもある。また、初期状態でもいくつかのMMDモデルがMMDに入っている。


1.モデルのダウンロード
 上記の通り様々な媒体で公開されていることから検索エンジンにて「○○(キャラクター名など)、MMDモデル」という風に検索するのが最も手っ取り早い。動画サイトの場合は「○○(キャラクター名など)、MMDモデル 配布」などと入力するとよい。
今回はこのサイトよりShiniNet式 メジ〇マoクイーンをダウンロードする。
 ダウンロードしたzipファイルを解凍し必要な場所に保存する。著作者によってはDL時に連絡やコメントを残してほしい人もいるため確認すること。
推奨:ダウンロードしたモデルはMikuMikuDanceファイル内のUserFileのModelファイルに入れると確認しやすい

2.モデルの使用
 回答したファイルには以下のデータが入っている。※()内は本画像の場合
・画像データ (ファイル)
・使用方法の説明(license(WEB))
・利用規約 (read me)
・モデルデータ  (pmdまたはpmxファイル)

ファイルの中身を確認し、利用規約や必要に応じ使用方法を確認する。
ここまで確認出来たらMMDからこのデータを呼び出す。

MMDを起動し、左下のモデル操作の「読込」をクリック。
展開したエクスプローラーから展開したいモデルデータであるpmdまたはpmxファイルを選択する。

「モデル情報」で「OK」を選択

このように読み込めれば完了。最後にモデル操作の登録をクリックする。
以下どの操作でもそうだが、登録をクリックしないで他のモデルや他の設定を触ろうとするとそれまでのデータは保存されず、リセットさせられるので注意。
※青や赤の〇や🔲はボーンと呼ばれるもので後述する

3.モーション・カメラモーションのダウンロードと読み込み
 モデルと同様に他のデータもダウンロードする。
 今回は曲に合わせてモデルに踊ってもらいたいため、「曲名 MMD モーション」のように検索するとよい。 また、モーションに関しては動画サイトで検索すると確認にもなるので便利だと思う。
 カメラモーションに関してはモーションと同時に配布している場合のほかに、個別でダウンロードする場合もある。個別の場合は出力の前に正しく動くか確認すること
音楽とモーションのタイミングがずれることがある。
 モデルと同様に利用規約を確認の上、zipファイルをDL、展開する。
この際、モーション、カメラモーションはUserFileのMotionに入れると展開しやすい。
 今回、モデルには西沢さんPさんのチーズケーキクライシスを踊ってもらう。モーションはTarotaroさんが作成した   • 【MMD】チーズケーキクライシス ダンスモーション【モーション配布】  のモーション、カメラモーションを利用する。展開先はMotionファイルとした。

MMD編集画面上での設定に移る。まず、キャラクターモーションを付けてみる。まず、「モデル操作」のプルダウンからモーションを付けたいキャラクターを選択する。次にその状態のまま左上の「ファイル」の「モーションデータ読込」をクリック。先ほど保存した、モーションの内ダンスモーションをクリックして指定する。


キャラクターの姿勢が変わっていれば、モーションを正しくダウンロードで来ている。登録も忘れずに。

本モーションはダンスモーション(体の動き)とリップシンク(口)が分かれていたためリップシンクのモーションも同様に付ける。
また、モーション読み込み時に画像のような警告が出ることがある。

これはMMDモデルとモーションのボーンが不一致の場合に出る警告で、このような場合動作チェックでおかしな動きをしている部分が無いか、チェックしておく事。(要はボーンが合ってないから、適応できるところだけモーションを付ける感じで良いか?と聞かれている)

 次にカメラモーションの設定にうつる。
 設定の仕方はほとんど同じで「モデル操作」のプルダウンから「カメラ・照明・アクセサリ」を選択。その状態のまま左上の「ファイル」の「モーションデータ読込」から今度はカメラモーションを選択する。


画面の表示が変わったら、これでモーション関連の設定は終了。

4.背景のダウンロード
 背景を使用したい場合、背景もモデルとモデルと同様に利用規約を確認の上、zipファイルをDL、展開する。
 使用できるファイルは様々で写真や黒一色といった画像ファイルの他、キャラクターと同じpmx形式のものも存在する。展開先であるが、pmx形式であればUserFile内のModelファイルそれ以外のAVIファイル、jpegなどはBackGroundファイルに保存するのがおすすめ。
 今回はpmx形式のヨッシー式_トレセン学園ホームを使用した。pmx形式のためモデルと同様に「モデル操作」から「読込」で読み込む。
 それ以外の画像ファイルを読み込む場合は左上の「背景(B)」から。

5.動作チェック
ここまでくると一応キャラクターを踊らせることが出来る。
「モデル操作」が「カメラ・照明・アクセサリ」になっていることを確認し画面右端の「再生」をクリックすると、カメラモーション付き(つまり動画再生時と同様の状態)で確認できる。(逆に定点から確認したい場合はMMDモデルを選択した状態で再生)
また、右上の「座標軸」をオフにするとよい。


これを出力すればそれっぽい動画にはなるが、次回はさらにエフェクトを付け、最後に出力方法の解説まで行いたい。取り急ぎ今回はここまで。

その他の感情分析

思考が拡散するのはリラックスしてる証拠だろうか・・・。そもそもUDPで送るのならOpenCVにこだわる必要もないし,もっと使いやすい表情分析ソリューションはないのだろうか?
Py-Feat
Python用の表情認識ツールキット。7表情やAU,特徴点,頭部の姿勢もわかる。これ・・・GPTの作成するプログラムで直ぐに動きそうに思うが。
Py-Featを使って表情認識をやってみた 基本的な使い方がわかる。
表情分析OSS Py-Featをつかってみた 頭部の姿勢検出が強力とある。

FER(Facial Expression Recognition)
これがOpenCVの元ネタに思える。

Microsoft AZURE
顔認識のサービスがある

Affectiva
かなり昔からある感情評定サービス。Unity用SDKがあるらしい。ブラウザで動作するデモが秀逸。ああ,これくらいだと利用しやすいんだけどなぁ・・・

表情模倣しながらAIと話す

プロジェクトはWindowsネイティブアプリ用に
WebGLアプリはUDPで表情認識AIの情報受け取れないし・・・一体どうしたらよいのか。結局,WebGL版の模擬人格プロジェクトをコピーして,Windowsネイティブアプリにしてビルドしてみたら,意外に良い感じで動いたので,こちらで行くことにしました。プロジェクトの名前はNative6です。ビルドターゲットのスイッチは7分弱かかって,頻繁に行うのは現実的じゃないです。
表情データの送信方式
遅きに失した感もありますが,オープンCVで認識した感情データをudpで送る部分はすでにできていたので,後はAIの情報を受け取るプログラムをGPT4oに作成してもらい,そこから感情情報を抜き出し,コミュニケーションに加味できるように,調整してみました。
実際に動かしてみて
感想としては,感情認識のタイミングがOpenAIへの問い合わせ依存なので,ややテンポが遅いようにも感じる。しかし現実のコミュニケーションも案外こんなもんかもしれない。
1.リアルタイムで感情模倣が起こることが大切なのか
2.GPT4oにこちらの感情状態が伝わることが大切なのか
どちらにしても表情を合わせてくれるので,これらの要因が実際のコミュニケーションでどんな風に機能するのかまだよくわからない。生きた人間のコミュニケーションでは,相手の(時として細やかな)表情を瞬時に読み取り,相手の意図や,コミュニケーション内容の真偽を直感的に評定していたりする。こういったコミュニケーションがAIエージェントに果たして可能なのか,そもそも必要なのか,研究はまだ始まったばかりだから分からないことだらけだ。

PsychoPy+Processing#01

PsychoPyと外部プログラムの連携
ここでは,下記のようなシンプルな実験プロジェクトに外部プログラムで測定した測定結果をUDPで送り込み保存してみる。プロジェクトは,Fixation(+)の後にTarget(□)が出るので,スペースキーを押すと,反応時間が記録されるというもの。

BuilderのPythonマーク(青と黄のヘビ)をクリックすると,Coderが起動する。ここでコードを改造すると,UnityやProcessingからのデータを受け取ることができる。ただし,Builderでコードを生成すると,改造部分はすべて消し飛ぶので注意が必要だ。

まず冒頭で,ライブラリを呼んで,グローバル変数とUDPでデータを受け取るサブルーチンを用意する。

############# NAGANO #################
import socket
import threading

# UDPソケット設定
UDP_IP = "127.0.0.1"  # 受信するIPアドレス
UDP_PORT = 5005       # ポート番号

# グローバル変数に最新のUDPデータを格納
latest_udp_data = "No Data"

def udp_listener():
    """非同期でUDPデータを受信する関数"""
    global latest_udp_data
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    sock.bind((UDP_IP, UDP_PORT))
    while True:
        data, addr = sock.recvfrom(1024)  # 1024バイトまで受信
        latest_udp_data = data.decode("utf-8")  # デコードして文字列に
############# NAGANO #################

次にプログラム開始部分でスレッドをスタートする。

    win = setupWindow(expInfo=expInfo)
    setupDevices(expInfo=expInfo, thisExp=thisExp, win=win)
    
    ############# NAGANO #################
    # UDPリスナーをスレッドで起動
    udp_thread = threading.Thread(target=udp_listener, daemon=True)
    udp_thread.start()    
    ############# NAGANO #################

でさらに,UDPでうけとったデータを保存する。データの受取は,別スレッドが非同期で行ってくれる。

                    key_resp_target.duration = _key_resp_target_allKeys[-1].duration
                    
                    ############# NAGANO #################
                    # UDPデータをログに記録
                    thisExp.addData('UDP_Data', latest_udp_data)
                    thisExp.addData('KeyPress_Time', globalClock.getTime())  # キー押下時刻も記録
                    ############# NAGANO #################
        
                    # a response ends the routine
                    continueRoutine = False

実行すると,以下のような感じでUDP経由で送られたデータが保存される。ちなみに,データ送信側は,ローカルホストの5005ポートにProcessingでCerry,Diamond,Sevenのどれかひとつの文字列を送るもの。もう一度いうが,Builderで更新するとこれらの改造部分は消し飛ぶので注意

SpeakerID一覧

VoiceVOXやCoeiroInkのSpeakerIDが必要になるときがある。・・・あるんだってば。VoiceVOXに関してはここから参照。

キャラクター名 スタイル ID
四国めたん ノーマル 2
あまあま 0
ツンツン 6
セクシー 4
ささやき 36
ヒソヒソ 37
ずんだもん ノーマル 3
あまあま 1
ツンツン 7
セクシー 5
ささやき 22
ヒソヒソ 38
春日部つむぎ ノーマル 8
雨晴はう ノーマル 10
波音リツ ノーマル 9
玄野武宏 ノーマル 11
喜び 39
ツンギレ 40
悲しみ 41
白上虎太郎 ふつう 12
わーい 32
びくびく 33
おこ 34
びえーん 35
青山龍星 ノーマル 13
冥鳴ひまり ノーマル 14
九州そら ノーマル 16
あまあま 15
ツンツン 18
セクシー 17
ささやき 19
もち子さん ノーマル 20
剣崎雌雄 ノーマル 21
WhiteCUL ノーマル 23
たのしい 24
かなしい 25
びえーん 26
後鬼 人間ver. 27
ぬいぐるみver. 28
No.7 ノーマル 29
アナウンス 30
読み聞かせ 31
ちび式じい ノーマル 42
櫻歌ミコ ノーマル 43
第二形態 44
ロリ 45
小夜/SAYO ノーマル 46
ナースロボ_タイプT ノーマル 47
楽々 48
恐怖 49
内緒話 50

CoeiroINKは下記のような感じ
//つくよみちゃん(れいせい) 0
//つくよみちゃん(おしとやか) 5
//つくよみちゃん(元気) 6
//KANA(のーまる) 30
//KANA(えんげき) 31
//KANA(ほうかご) 32
//リリンちゃん(ノーマル) 90
//リリンちゃん(ささやき) 91
//モモイヒナ-A 1737595468
//KAKU_N 259
//KAKU_W 260

MMD その1

MMDとは「MikuMikuDance」の略称で樋口優氏によるフリーの軽快な3DPV作成ツールである(pixiv百科事典)。
元々は初音ミクを踊らせる3Dアニメーション制作ツールであり、現在ではその他キャラクターにも幅広く対応し、自作PVやキャラクターのダンス動画などがニコニコ、YouTubeに多数投稿されている。

背景や効果を凝ったり
アニメ調にも



・・・というか、キャラクター以外のアセットやモデルも多数存在し、その汎用性は幅広い。

現長野ゼミでは主にunityを用いてアニメーションや3D空間の作成を行っているが、キャラクターを踊らせる程度であれば、このソフトウェアも使えるかもしれない。
ということで、MMDの導入から簡単な3Dアニメーションの作成までの雑感をまとめておこうと思う(建前)。

以下導入に当たり、以下のサイトや動画を参考に進めていく。詳細はこちらを参照されたし。
MMDの導入を紹介している動画:
https://youtube.com/playlist?list=PL7Jbc_YxpkriO7nb-QzvDFwozgc1O3s0F&feature=shared
同作者による導入ブログ(他にもAIやDTMなど多数紹介):
https://how-to-use-music-video.com/
自作でモーションを作る方法の説明をしているブログ
https://note.com/tareire/n/n22d17c2a4c4b
初心者向けの解説動画
https://www.youtube.com/watch?v=Jp7wf4TNcA0
同じように初心者向けの動画
https://www.youtube.com/watch?v=G2vLiDWKMgY

また、使用したPCのスペックは以下の通り
プロセッサ Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz 2.59 GHz
実装 RAM 16.0 GB (15.8 GB 使用可能)
システムの種類 64 ビット オペレーティング システム、x64 ベース プロセッサ
GPU NVIDIA GeForce MX250

MMDの導入

前置きが長くなりましたが、本題に入ります
まず、
https://sites.google.com/view/vpvp/
のサイトにアクセスし64bit版Windows用をダウンロード(ZIPファイルでDLすることになる)する。
note:ほかに32bit版も存在する。この辺りは自分のPCスペックを参照のこと。

ZIPファイルを適当な場所に展開しその中にある「MikuMikuDance.exe」をクリックし、起動する。
note:その下にあるreadme.txtに開発者からの説明やバージョン情報などが書きこまれている

時折見る編集画面が出てきた。
導入自体はこれで完了。感想としてはひたすらに軽い。

プロパティを開くと18.2MBくらいしかない。
unityと比べるとだいぶ軽いなぁ・・・

今回はこの辺りで。

笑顔でShoot!240920

Unity用のDlibライブラリ,結構速かったように思う。フルバージョンでなく17ポイントバージョンなどを使えば高速化が期待できる。最新版に更新して試してみると,「sp_human_face_68_for_mobile」などのモバイル版モデルが入っていた(前から?)。ということは,WebGLでも高速な笑顔検出ができるのでは??試してみると普通に30FPS(おそらく内部的にはもっと?)出てる。ARHeadでは,頭部の姿勢推定も可能となっているはず。。。こちらもEnableDownscaleで30FPS出るようになった。笑顔推定をDlibで行えばAffectiveGamesも実運用可能と思われる。

あらためて冷静に見ると,WebCamで画面との距離や頭の姿勢,表情判定に使用可能な68特徴点を連続的に取得できるのは,かなりお得じゃないか?しかもWebGLでって。お手軽データ測定にこれを導入してみるのも良いかもしんない。

笑顔でShoot!

導入
いただきました,その名前。今日,諸先生がたと立ち話した収穫として,「クソゲー連発案は有用であること」,「感情把握アプリは老人業界にも有用」などのこと。FaceAnalyzerはよく見るとWebGL未対応のようで,そうなるとOpenGLでやるしかない。WebGLだとブラウザ立ち上げるだけで,AffectiveComputing技術ベースのアプリが利用できる可能性がある。
善は急げでビルドしてみる・・・
OpenCV4Unityはサポートバージョンが上がっていたので,いっそUnity6にしてみるが・・・ビルドできず(泣)。マニュアルを読むと,バージョンによってWebGLのプラグインが異なるらしいので,2023.2.20にしてみる。ビルドは通るが公式DEMOより明らかに遅い!何故だ!!MultiThredとSIMDを有効にしてみる・・・「ブラウザはマルチスレッドをサポートしてません(FirefoxもChromeも)」で起動すらせず。SIMDのみにしてみる。無事に動作した! これで表情利用したWebGLアプリをリリースできそうだ。・・・動作が13fpsなのが気になる。解像度を320x240にすると22FPSに。もう少し速くなるといいんだけどなぁ。科学技術のげ限界っ!

遅い・・・
どうも純粋にCPUを使っており、かつシングルスレッドのためか、かなり遅い。Corei5_9600kで6.7FPSは衝撃の遅さだ(Ryzen7_6800Uの方が速い)。AIアプリの実行環境はPCネイティブ環境しかダメということか・・・。いっそAndroidに行くというのは?手持ちで一番速そうなHelioG99にAndroidネイティブアプリを入れてみると、19~22FPS程度。WebGLよりは速いけど、ちょっと・・・なぁ。

マルチスレッド対応の効果見られず
WebGLはUnity2022あたりからマルチスレッドに対応しているという。そこでマルチスレッド対応バージョンをビルドしてみた。ブラウザが「マルチスレッドに対応していません」と言う場合は,下記のヘッダを.htaccessで設置すれば動くようになる。アプリがロード中に止まるのはメモリ不足なので,使用可能メモリを倍にすればロードするようになる。結果として,フレームレート変わらねぇ・・(怒)。プログラムがマルチスレッド対応してないと意味ないということか?

<IfModule mod_headers.c>
    Header set Cross-Origin-Opener-Policy "same-origin"
    Header set Cross-Origin-Embedder-Policy "require-corp"
</IfModule>

UnityXWhisper240913

導入
自動車の中でAIと会話する未来は「ほぼ確定」だと思う。いろいろ便利だし,気晴らしになるし,運転中一人で寂しいし・・・。OS標準の音声認識はいろいろボタンを押さなければならず,運転中の操作には問題がある。googleSTT(SpeechToText)やWhisperを使えば,ハンズフリーで会話ができるはずだ(OpenAIアプリのように)。PCアプリであっても,キー操作が必要なくなればより没入感というか,人と話してる感が高まるのではないか?
Whisper対応を強化
すでにUnityから利用可能なように知見を貯めていたが,ハンズフリーを目指して大幅介入だ。以前のバージョンはRecordを押して喋りStopを押すと変換されたが,これは2度もボタンを押さねばならん(しかも違うボタン)。次はRecordを押すと録音が始まり離すと変換される形式。最終的には音圧をチェックし,しきい値を超えたら録音開始,下回ったら停止して変換。これなら連続して変換が可能だ。画像じゃわからないので,動作の様子を録画しようと思う。明日にでも・・・。