IVRC – Real Baby – Real Family http://blog.shirai.la/baby IVRC2016にてLavai Virtual Awardを受賞したチーム「明るい家族計画」です。2人の体験者から未来の赤ちゃんの顔を推定し、リアルフェイス育児体験ができるコンテンツ「Real baby / Real family」を制作しています。 Wed, 28 Feb 2018 23:25:00 +0000 ja hourly 1 https://wordpress.org/?v=5.1.6 dlibでOpenCVが使えるかもしれない件 http://blog.shirai.la/baby/dlib%e3%81%a7opencv%e3%81%8c%e4%bd%bf%e3%81%88%e3%82%8b%e3%81%8b%e3%82%82%e3%81%97%e3%82%8c%e3%81%aa%e3%81%84%e4%bb%b6/ Tue, 15 Nov 2016 11:51:29 +0000 http://blog.shirai.la/baby/?p=146 dlibのメソッド見てたらこんなん見つけた

 

dlib

・・・これ完全にOpenCVと親和性あるんじゃね?

 

 

試してみたらマジでありました。

後日コードを載せます。

]]>
IVRC決勝大会振り返り http://blog.shirai.la/baby/ivrc_laval/ Wed, 09 Nov 2016 09:51:40 +0000 http://blog.shirai.la/baby/?p=196 こんにちは、ハード担当の我妻と代表の望月です。
今回は決勝大会を振り返ってみたいと思います。

———– 前日(10/28)———–
開場時間が10:00~なのでなるべく早く会場入りしたいところですが、本厚木にある大学から東京テレポートには二時間かかります。
メンバー全員が寝坊しない、現実的な時間(しても起こしに行けるくらいの時間?)として11時過ぎに会場入りしました。

14938304_1226970304037524_3831831029877044008_n
自分は初めて日本科学未来館にいったのですが、ガラス張りできれいな建物でした。
今回は、通常の入り口でなはなく出展者入り口で入ります。

先に会場に送っていた荷物を受け取り、骨組みを完成させて、いったんお昼にしました。近くにコンビニがあり助かります!
14900577_1226970097370878_7481563072560943363_n

ということで、お昼過ぎからブースの設営を再開します。こんな感じでブースの設営が終わりました。大体16時頃だったと思います。

 

14937178_1226969744037580_6285464703752365643_n

が、チームのメンバーにやってもらうと不親切さが目立つと言われました…

プログラム的なバグは前日までに直していたのですが体験の修正はしていなかったのでここにきて…という気持ちはありましたが
会場内でできる限りわかりやすくしようと修正しました。
しかし、撤収時間は20:30までなので限られた時間ではありましたが、なんとかある程度まで修正を間に合わせることができました。

この日は20時過ぎに解散して次の日に備えることにしました。

———– 審査当日(10/29)———–
この日は10:00~12:00展示審査なので、すこし早めに集まります。
8:30に会場入りをし最後の動作テストと、体験のフローを確認しました。

審査ではVRコンテンツでの視線誘導を促す方法や、顔画像についての学術的な意見を頂き、この展示を通して「Real baby / Real family」の発展に繋がる非常に大切な時間となりました。

審査時間が終わってからは、IVRCブースも一般開放され、たくさんの方にコンテンツを体験して頂くことが出来ました。
私たちのコンテンツは、友達同士や家族で来られた方に非常に好感触でした!
私たちのブースを去った後にも体験者にプレゼントした母子手帳に載せてある赤ちゃん画像を見比べて楽しんでいる様子が見ることができました。
夏からこのコンテンツを制作してきて良かったと思える最高の瞬間だったと思います。
また、体験者の中で二次元画像から推測した赤ちゃんを作りたいという方が来られ、私たちの企画の新たな切り口を発見することができました。

16:00からは表彰式がありました。
14937233_1226969704037584_4415885491108741627_n

今年は多くの協賛企業賞がありましたが、残念ながら私たちは受賞することができませんでした。
しかし、ほかのチームの作品も私たち同様に予選会からブラッシュアップを重ねており、さすがだと思うばかりでした。
授賞式終盤、企業賞の次に、フランスのLavalで展示することができる大変栄誉ある賞、Laval virtual賞の発表がありました。

ここまで、VR学会賞や協賛企業賞を受賞できなく、何一つとして賞をとって帰れないんじゃないかという思いや、
自分たちの英語力やフランスの示唆、Laval virtualのテーマとの関係性から受賞できるかもしれないという思いの中、
Laval virtualの委員であるLaurentさんに呼ばれたのは私たちでした。嬉しさと驚きを感じながら壇上に上がりました。
IVRCのグランプリは逃してしまいましたが、それ以上のものを勝ち取ることができたと思います。

14900359_1226969630704258_2164181498199001940_n
その後はIVRCの懇談会があり、私たちチームのスポンサーとして作品を支えてくれた富士通SSLの方や、IVRCの協賛企業の方、
夏からずっと私たちをずっと支えてきてくれた先輩方に挨拶し、また、他のチームの方とも交流を深めることが出来ました。

14947427_1226969430704278_7521713163392821016_n

———– 一般開放日(10/30)———–
一般開放日は多くの方に私たちの企画を体験して頂くため、赤ちゃんをあやす体験のほかに2人の顔から赤ちゃんの顔を推測するのみのブースを作りました。
そこで私たちが使用していたカメラの画角の狭さが良い方向に働き、撮影する際には体験者さん2人にとても近づいていただきました。
ふと思ったのですが、それだけでコミュニケーションツールとして大いに機能するのではないかと思いました。
img_3490

Laval virtual賞をいただいた記念として、Laurentさんと写真を撮らせていただきました。
Laurentさんに、「もっといろいろなことを経験して、もっともっとこの作品を向上してほしい!」と激励されました。
この言葉を胸に3月のLaval virtualにむけて、「Real baby/ Real family」をよくしていきます!
14947826_1226969157370972_6868130758833838473_n14907208_1226969234037631_5096206162981477767_n

この日はIVRC2016として作品を展示するのは最後ということもあり、他の作品を体験しに行きました。
どの作品も予選よりも強化されており、開発欲のそそられる作品ばかりでした。
また、他のIVRCチームの方にも私たちの作品を体験して頂き、交流を深めることができました。
来年も日本科学未来館で展示ができるように、さらなるスキルアップを目指したいです。

IVRC実行委員会や協賛企業の方々、個人的ではありますがスポンサーの富士通SSLのご協力のお陰で盛会に終わることができました。
また「Real baby / Real family」も100人を超える多くの方々に体験して頂き、開発者としても嬉しい限りです。
「Real baby / Real family」はLavalに向けて進化できるように、これからも尽力致しますので、ご支援ご協力の程、宜しくお願いします。

]]>
IVRC予選大会 http://blog.shirai.la/baby/ivrc2016intsukuba/ Sun, 23 Oct 2016 08:47:09 +0000 http://blog.shirai.la/baby/?p=135 こんにちは。
明るい家族計画の望月です。

少し遅くなりましたが、IVRC予選会の様子をお届けします。

————————————前日設営日———————————–
朝早く大学に集合し、コンテンツで使用する紙を確保するために、A4用紙を持ち寄り、裁断機でA5サイズに…
余裕をもって大学を出発し、秋葉原でブースを彩るためのフォトフレームや写真用紙を購入。
移動中の荷物がとても重く、会場に着いた頃にはメンバー全員疲れきっていました。

予定時間より早く機材が届いていたので、到着後すぐに筺体の組み立てに入ることができました。
筺体

筺体組み立て後は宿に帰り、印刷物の確認をしました。
しかしプリンタの調子が悪く、原因を追及したところ、移動時起きたインクの偏りと自作したA5の紙が悪さをしていたので、紙を市販のものにして、プリンタをクリーニングしたら正常に動いてくれました。

————————————1日目(審査日)———————————–

会場に到着したら、プリンタを設置しなおし一度クリーニング。
しかし、コンテンツを動かしてみるとViveがデフォルト画面のまま動かない不具合…
迷った末、我妻君のVR環境対応のノートPCを使うことになりました。
やはり、高い部品や製品であっても予備があると安心できます。

この日はプレゼンテーションの日でした。
私たちのコンテンツはインストラクター2~3人推奨でしたが、プレゼンテーション中は我妻君が頑張ってくれました。

プレゼン中に企業の方が沢山ブースに来たようで、このときIVRCシールをねだっておけば…と少し後悔しました。
また、外国人の方に英語対応する機会があったようで、今後のことを含めて、英語でのコンテンツ説明も練習しなければならないと思いました。

後半は東京ゲームショウの方の展示設営に向かっていた浅野君と合流し、4人でコンテンツを回すことができました。

一日目終了後、メイン機でViveが動かない問題を解決するために、パソコンをホテルに持ち帰り整備しました。
また、チームの別働隊(望月、浅野君)で秋葉原に行き、ヘッドホンを購入し、体験の回転効率の向上を図りました。

————————————2日目(結果発表日)———————————–

2日目は1日目に持って帰ったメイン機の設営と試運転のため、朝早く会場に行き入り口待機
会場でも無事 メイン機でViveが動き2日目からはデスクトップPCでコンテンツを動かすことができました。

作品コンセプト「これはあなたの未来の赤ちゃんに会えるVRメディアアート作品です

一般の方にはとても好印象で、たくさんの方にコンテンツを体験して頂けました。
後半は体験者への対応に慣れてきましたが、午前中コンテンツを回していただけなのに、とても疲れました。

この日は夕方から結果発表があったので、それまで待機。

結果は10位入賞し、決勝大会進出!!

その後はつくばの麺や 蒼 (AOI)で祝賀会ラーメン

ホテル到着後この日はひさびさの?自由時間
ホテルでテレビ見ながらゆっくりできました。
IVRC予選

%e8%9c%80%e5%92%8f%e6%82%84-2016-09-20-12-20-25

————————————3日目(一般公開日)———————————–
3日目(一般公開日)

チームメンバーで1人ずつ30分間の休憩を回しながら気になるIVRC作品探索
その後1時間休憩をはさんで、お昼兼IVRC作品探索兼企業出展を見る時間に

耳トンネル、しょくどう、ブラジル、浮世絵

多くの方にReal baby / Real family を紹介しました。
2人プレイで体験されていく方はやはり反応が良く、ブースを出たあとに証明書を見せ合ったりしているところが私のモチベーションを高くさせてくれます。
また、企業の方との名刺交換や、大学生の方や、御隣のブース、御向かいのブースとも仲良くさせていただきました。

3日間トラブルはあったものの、最後まで止まることなくコンテンツを動かすことができました。
14590428_1199857883415433_5343011320696780445_n

14470666_1199857643415457_6738891935708782461_n
「みかけハこハゐが 全部俺である」チーム:¬広重(公立はこだて未来大学)の方と記念写真を撮りました。
決勝でまた会えるのを楽しみにしています!

終了後、片づけをしてVR学会で展示をしていた先輩方と合流してサイゼリアでお疲れさまでした会
お疲れ様会

前日設営を含めて、凄まじい4日でしたが、一日一日がとても充実感溢れるものでした。
決勝大会では、コンテンツをより良いものに仕上げ、目指せ1位で頑張りたいと思います。

%e5%86%99%e7%9c%9f-2016-09-20-12-20-57

]]>
dlibでopencvを使いたい http://blog.shirai.la/baby/opencv_and_dlib/ Fri, 21 Oct 2016 12:45:14 +0000 http://blog.shirai.la/baby/?p=171 dlibをopencvと一緒に使うとき便利なメソッドがあったので、備忘録作成。

 

dlibで処理を行った後、使い慣れたopencvにデータを渡したいなーということがあると思います。

そのようなときはこうします。

1 dlibのデータをopencvに渡したいとき。

dlibで画像を表すクラスはdlib::array2d<dlib::bgr_pixel>です。

それをMatクラスに渡すには「dlib/opencv.h」をインクルードして、

cv::Mat cvimage = dlib::toMat(dlibimage);

みたいに書きます。

2 opencvのデータをdlibに渡したいとき。

Matクラスをarray2d<bgr_pixel>に渡すには以下のようにします。

「dlib/opencv.h」をインクルードして、

dlib::array2d<dlib::bgr_pixel> dlibimage;

assign_image(dlibimage, cv_image<bgr_pixel>(cvimage));

みたいに書きます。

以上備忘録

]]>
OpenCV cv::Matとメモリ http://blog.shirai.la/baby/opencv01/ Fri, 30 Sep 2016 11:14:37 +0000 http://blog.shirai.la/baby/?p=132 OpenCVにおいて画像を格納するクラスはほとんどの方がcv::Matクラスを使用していると思います。Matクラスの振る舞いを理解しておくとコーディングがはかどります。


cv::Mat blue(300,300,CV_8UC3,cv::Scalar(0,0,255));
cv::Mat copy = blue;
for(int y = 0;y < copy.rows;++y){
for(int x = 0;x < copy.cols;++x){
for(int i = 0;i < 3;++i){
copy.data[copy.step * y + copy.channels() * x + i] = 255;
}
}
}

みたいなコードがあったときに、変数copyは白一色を表しますが、Mat型では初期化演算子、代入演算子ともに値のコピーを作成するのではなく参照先のコピーを作るだけです。つまりcopyが指しているメモリ空間は変数blueと共用していて、copyの値を書き換えるとblueの値も書き換わってしまいます。この結果blueは白色の画像になります。

メモリーの共有を防ぐには
cv::Mat copy = blue.clone();
という様に書きます。

OpenCVでは前者を浅いコピー、後者を深いコピーといいます。前者のほうが高速にコピーを行えます。

なぜOpenCVがこのような使用になっているかというと、画像の範囲を指定して処理を行いたいときにこの使用が生きてきます。

 

例えば画像の中心だけ画像処理させたいとき、このように書けます。

cv::Mat white(300,300,CV_8UC3,cv::Scalar(255,255,255));
cv::Mat roi = white(cv::Rect(150,150,150,150));
for(int y = 0;y < roi.rows;++y){
for(int x = 0;x < roi.cols;++x){
for(int i = 0;i < 3;++i){
roi.data[roi.step * y + roi.channels() * x + i] = 0;
}
}
}

このコードでは白い画像の中心150*150ピクセルが黒色になります。

このように画像の範囲を指定して処理を行いたいときに、威力を発揮します。(自分はそれしか知りませんが、ほかにも使用用途があれば教えてください…)

]]>
Arduino自作 http://blog.shirai.la/baby/technology_arduino/ Wed, 28 Sep 2016 06:28:16 +0000 http://blog.shirai.la/baby/?p=84 チーム明るい家族計画が開発で行ったことを紹介します。

ハード担当の我妻です。ハード担当といっても予選まではほとんどプログラムのお手伝いしかしていませんでした。

なので数少ないハード関連の紹介です。

Arduinoはオープンソースなハードおよびソフトとして有名で、近年のIVRCでも多くのチームが使用しています。
しかし、製品版をそのまま買ってきて使用しているチームがおおく、さらにはブレッドボードで展示もみられる始末です。

組み込み機器を専攻している自分としては、自作してみたいと常々思っていました。
そこでネットに落ちている回路図と学科で習った基板加工の授業を思い出しながら作成してみました。

部品は秋葉原の秋月や千石で買ってきて、一台おおよそ1500円程度で作成できました。
書き込み機の部分が800円ほどかかり、本体部だけなら600円少しといったところでしょうか。

回路があっているか少し不安ですが、一応動作もチェックできて一安心といったとこです。

 

ArduinoPCB

img_0913

写真だとわかりずらいですが、結構コンパクトにまとめられました。

まだコア部分の作成で止まっているのですが、これから使うセンサやらを確定させてメインボードのほうも完成させたいですね。

本選ではハード担当として、チームに貢献したいです。

]]>
HTC Vive ゼロレイテンシー通信!? http://blog.shirai.la/baby/baby-project_07/ Sat, 17 Sep 2016 16:54:29 +0000 http://blog.shirai.la/baby/?p=66 こんにちは。
明るい家族計画の望月です。

HTC ViveのUDP通信に成功しました。

初期の段階では、UNETを使うのかUDPを使うのか決まらず、どちらも試してみました。

UNETを試した際に、SteamVR pluginのGameObjectをそのまま生成すると、1つのシーンで2つ以上のSteamVRが存在してしまいます。
これによりデバイスの取り合いが起こり、そのままでは使用できません。また、この競合を回避しようにも大幅なレイテンシーにより実用とはいきませんでした。

よって、今回はUNETを使用するのではなくUDP通信によりお互いのViveのpositionとrotationを送りあうようにして解決しました。
注意しなければならないのが、お互いにデータを送り付けているだけなので、基本的には同期処理はしていません。
(今回はほとんど同スペックのPCをローカルの有線接続しているので、致命的なエラーは出ないだろうという考えです。ネット経由で使うときにはまた違ったやり方でないとレイテンシー問題があるかもしれません)

これにより送受信におけるデータ量と、受信のタイミングもこちらでコントロールできるので最終段階では100~120fpsで描画することに成功しました。
したがって、遅延は10ms以下となるので「ゼロレイテンシー」といえるのではないかと。

最後にViveコントローラーの位置に手のAssetをつけて、遊んでみました(通称:ゼロレイテンシー芸人)。

補足として、SteamVRのルームセットアップを的確に行うと、現実での位置とVR空間上の位置が一致するのですが、
それをしてしまうと、VR空間上で相手に触れたときに現実でも相手に触れてしまい、デバック中に怪我人が出てしまうので、今回はこんな感じで….

9/19 我妻追記

]]>
IVRC直前ようやく体験フローの完成!宅配便の手配 http://blog.shirai.la/baby/syuppatumae/ Mon, 12 Sep 2016 12:26:01 +0000 http://blog.shirai.la/baby/?p=96 チーム明るい家族計画です!

IVRC前日ようやく筐体が完成しました!

img_0915

こんな感じで体験者は椅子に座って2人で体験するコンテンツとなっております。

大会前日にようやく資材がそろいました!

少しジョイントが甘いのでこれからジョイントを増やしていきます。

また配線があまりに汚いのでそれも要修正です。

 

体験のフローもまだ確認できないところが多かったので、筐体を組んでおいてよかったと思います。

時間の関係で削った部分もかなりあるので、完全版ではないですが、遜色ない内容となっております。

 

筐体を組み終わったら、そっこーで片づけて、機材を梱包します。

機材を梱包し集荷を待っていたら13日火曜には届かないらしい\(^o^)/

しかし先輩たちが配送場まで車で届けてくれたので、危機は脱出できました。

先輩たちに感謝です。

img_0862

 

チーム明るい家族計画の健闘を祈っています!(自分で・・・)

]]>
Maya迷走中 http://blog.shirai.la/baby/baby-project_06/ Mon, 29 Aug 2016 21:15:41 +0000 http://blog.shirai.la/baby/?p=45 こんにちは。
明るい家族計画の望月です。

2D画像の処理がトントン拍子で進み、平均顔を使ってβ版を作ろうという話になりましたが、ここで問題発生!

2D画像をどうやって3Dに起こすのか…

Kinectで赤ちゃん人形の顔を撮影し、MeshmixerやMeshLabで加工したり、
babydoll_mesh

Point Cloud Libraryというライブラリを使い、顔のメッシュを生成したりしました。
Point Cloud Libraryは点群情報と画像情報の両方を保持できるフォーマット(.ply)を使用できたので少しだけ便利でした。
pcl

最終的にたどり着いたのが、Mayaを使用し、赤ちゃんの正面画像と横画像からメッシュを生成していく方法です。
2016-08-19
2016-08-23
2016-08-23 (1)
2016-08-30
2016-08-30 (1)

しかし、作成したメッシュをUnityにエクスポートした際にメッシュの情報が欠損し、使い物にならない結果に…
mesh
どうやら法線が裏返っておかしくなってるようで、手直しに非常に手間がかかり、これ以上はメッシュに時間を割けないので、球体に顔画像を張ることで対処。最初の段階でメッシュに関しては考えていなかったことも非常に時間を取らされてしまった感じがあり、今回のことから、妥協点を見つけるということや、ある程度やってみて、実装が非常に難しい(時間がかかる)と感じたことからは手を引く潔さが大切だと思いました。迷宮入りしそうになったときは、目に見えるタスクから終わらせること、初心に返ることを心がけ、メッシュにとりかかる前の目標であるβ版制作にとりかかろうと思います。
2016-08-29 (2)

↑球体を若干潰したオブジェクトに顔画像を張ると、見た目が改善されます!

]]>
顔の特徴点取得できました! http://blog.shirai.la/baby/project_05/ Mon, 29 Aug 2016 18:31:33 +0000 http://blog.shirai.la/baby/?p=39 こんにちは。
明るい家族計画の望月です。

今回はdlibというC++のライブラリを使用しました。
dlibは画像処理や機械学習などの機能を持ち、顔の特徴点を取得するのに使用しました。

特徴点取得の参考画像がこちらです。
landmark

dlibに用意されている学習データを用いることで顔画像領域の切り出し、ランドマークの検出などが行えます。ちなみにOpenCVを用いても顔画像を切り出すことは可能ですが、それよりも精度よく顔画像を切り出すことができます。

またランドマークはdlibによって、ソートされて出力されるので、モーフィングなどで重要な対応点なども簡単に調べることができます。dlib_face_landmark_point

こんな感じで対応点をソートしてくれます。

ただdlibの導入は少し面倒なのでCMakeの使い方には慣れておいたほうが良いかもしれません。

まだ慣れていないのもありますが構文もかなり難しいです。

また、特徴点が取得できたので、赤ちゃんの平均顔画像も作成しました。
平均顔画像の作成にはOpenCVを使用しました。
baby_face.ave

平均顔の赤ちゃんは非常に可愛いです。
この可愛い赤ちゃん画像から若年変化について考えていきたいと思います。

]]>