UnityとOpenCVとDlibとARでユニティちゃんになってみた facetracking 2018


カメラだけでVtuberになれるかも!?

最終的にこんな感じになります

使用したアセット

OpenCV for Unity - Asset Store

Dlib FaceLandmark Detector - Asset Store

実装

ベースはDlibFaceLandmarkDetectorWithOpenCVExampleのサンプルを変えていきます。 DlibFaceLandmarkDetectorWithOpenCVExampleはDlibFaceLandmarkDetectorの中のDlibFaceLandmarkDetectorWithOpenCVExampleカスタムパッケージ?をインポートすればディレクトリができます。 DlibFaceLandmarkDetectorWithOpenCVExampleの中のARHeadExampleのARHeadExample sceneをコピーして開きます。名前は自由ですが、私はARHeadExampleUnityChanにしました。HierarchyのARObjectsの中がARで表示されるオブジェクトになります。その中にunitychan_dynamic prefabをドラックアンドドロップします。Hierarchyはこんな感じです。

f:id:mswim2000189:20180304015426p:plain

スクリプトは全部チェックを外し、animatorのcontrollerはNoneにします。layerをUIに変えます。 transformを画像のように変更します。 f:id:mswim2000189:20180304014716p:plain

この時点で実行するとフェイストラッキングはできます。ただ、顔のまぶたや口を動かすことはできないので、参考サイトを見てください。

動画を見てもらえばわかると思うのですがfpsがあまりでないので改善したいですね。

だいぶ雑に書いたのでわからなければ質問ください。

ライセンス © UTJ/UCL

参考サイトです

iPhoneXがなくてもアニ文字したいんだ! 【Unity×OpenCV×Dlib】 - Qiita

FaceRig無しでも中の人(二次元)になりたい!【Unity × OpenCV × Dlib × Live2D】 - Qiita

Macの内蔵カメラで、Tensorflowを使って物体検出 (SSD)してみた DeepLearning

*修正版です。

 

久しぶりの投稿です。なかなかブログが習慣にならない…

 

SSD(Single Shot MultiBox Detector)とは?

一般物体検出の一つで、物体の領域検出を行うアルゴリズムです。

 

 

実装

こちらのフレームワークを使います。

もともと、学習済みモデルがあるのはありがたいですね。

github.com

 

notebooksの中にこのプログラムを入れると動きます。

SSD minimal exampleのプログラムと

SSDによる物体検出を試してみた - TadaoYamaokaの日記のサンプルプログラムを使わせていただきます。

僕のmac book airだと大分ラグがひどいです。リアルタイムとはいきませんね...

ただ画像認識は高精度だと思います。

他にもYOLOなどのアルゴリズムがあるみたいなのでそちらも試してみたいです。

また、強化学習にも挑戦してみたいです。

 

 

参考サイト

RaspberryPiとOpenCVで顔認識してパフォーマンスも改善してみる - 学生エンジニア小話

TensorFlowで物体領域予測(Region Proposal)を試してみる | Workpiles

SSDによる物体検出を試してみた - TadaoYamaokaの日記

SSD: Single Shot MultiBox Detector (ECCV2016)

 

機械学習でロボット制御してみた(2) EV3 & TensorFlow

 

前回の

機械学習でロボット制御してみた - 広く浅い高校生のブログ

は2クラス識別で色を判定していましたが今回は多クラス識別で色判定を行おうと思います。そこで今回はtensorflow を使おうと思います!

 本当便利でした。pythonのバージョンは3.5です。

 

方法

方法は前回とほとんど変わりません。

 

マインドストームでそれぞれの色、200個ずつデータを取ります。

              ↓

そのデータをmacに送る

              ↓

Pythonで学習プログラムを動かす

                                                  ↓

学習結果をEV3のプログラムに反映させる

 

 

プログラム

 

 

分類系の問題では、評価関数で交差エントロピーを使うのが普通らしいのですが、正答率があまり上がらなかったので二乗誤差を使うと正答率が97%まで上がりました。

 

今回使ったファイルをgithubに上げました。是非試してみてください。

GitHub - MisakiMa/exampleMachineLearning

機械学習でロボット制御してみた

 

python,機械学習、初心者です。間違いなどあるかもしれませんがよろしくお願いします。

 

動機

部活でマインドストームのEV3を使ってロボット制御しています。そこで、色を検知して制御をしているのですが誤検知したり検知できなかったりするので、そこで今何かと話題の機械学習をすることにしました。

 

方法

色は線形分離で分けることができるので(多分)、単純パーセプトロンを使って区別をしようと思います。流石にマインドストームで学習するのは厳しいのでMacで学習をします。センサーはハイテクニック社のカラーセンサーを使います。

 

マインドストームでポジティブとネガティブのデータを100個取る

              

そのデータをmacに送る

              

Pythonで学習プログラムを動かす

                                                 

学習結果をEV3のプログラムに反映させる

 

というのが大まかなEV3で機械学習を使ったプログラムを実行する流れです。この方法なら、処理速度の心配もないと思います。

 

プログラム

こちらのサイトを参考にしました。

qiita.com

RGBで分類するので、3次元で考えます。2次元だと線で分類しますが3次元は面で分類するという考え方になります。

 

 

結果

 

Color Result
空中 Black,Blue
White White
Black Black
Green Green
Red Red
Yellow Yellow
Blue Blue

 

大体合ってますが空中でBlueが出るのは嫌なので、Negativeデータに空中のRGBを追加します。

Color Result
空中 Black
White White
Black Black
Green Green
Red Red
Yellow Yellow
Blue Blue

完璧です!

 

感想

すごい!が一番最初の感想です。ロボットを制御しているとWhiteとRedの間の部分の色とかも検知したい時があるので、機械学習をすればできそうな気がします。また、色だけではなく他の部分でも応用ができそうです。なので、今後は機械学習を使ったライントレースなどに挑戦したいと思います。

 

参考サイト

 

パーセプトロンの学習規則をPythonで実装 - Qiita

pythonでcsvを読む方法 - 標準ライブラリ, pandas, numpy - minus9d's diary

 

 

 

 

 

 

 

 

 

myThingsとunityでユニティちゃんが天気を教えてくれるものを作ってみました。

 最近HoloLensなどで何かと話題なVR,AR,MRに興味を持ち、またunityとmyThingsを組み合わせたものをあまりみたことがなかったので作ってみようと思いました。

 

youtu.be

 

© Unity Technologies Japan/UCL

 

サーバーはazureを使っています。 

 こちらのサイトを参考にさせていただきました。

tips.hecomi.com

tips.hecomi.com

adarapata.hatenablog.com

 

 

ユニティちゃんとMMD4MecanimMMD4Mecanim-LipSync-Pluginを使わせていただきました。

  

  

 

f:id:mswim2000189:20170206112751j:plain

 

この作品はユニティちゃんライセンス条項の元に提供されています。

 

 

 

 

自動の窓

f:id:mswim2000189:20161029101101j:plain

 

AzureのサーバーにmyThingsからの天気の情報を送り、その状態をESPr Oneがwifi経由でhttps通信で取得し、窓を開け閉めする。また、Swiftで書いたIOSアプリで、リアルタイムの窓の状態をアニメーションで確認することができる。