MediaPipeを使ってみた

公式ページを参考にMediaPipeのデモを使ってみます
どれも試してみたいですが、とりあえず使ってみたいのはMediaPipe Handsです

環境

macOS 10.14.4 Desktop (HandsにはAndroid, iOS, Desktop, Webの環境がある)

インストール

MediaPipeのページが詳しいのでそのまま進めていきます

Hello Worldの実行でエラーがでました

bazel run --define MEDIAPIPE_DISABLE_GPU=1   mediapipe/examples/desktop/hello_world:hello_world
ERROR: Analysis of target ‘//mediapipe/examples/desktop/hello_world:hello_world’ failed; build aborted: Either the path attribute of android_sdk_repository or the ANDROID_HOME environment variable must be set.
INFO: Elapsed time: 0.161s
INFO: 0 processes.
FAILED: Build did NOT complete successfully (0 packages loaded, 0 targets configured)
FAILED: Build did NOT complete successfully (0 packages loaded, 0 targets configured)
  currently loading: @rules_foreign_cc//tools/build_defs/shell_toolchain/toolchains
  Fetching @local_config_cc_toolchains; fetching

公式ページのAndroidのところに

MediaPipe recommends setting up Android SDK and NDK via Android Studio (and see below for Android Studio setup). However, if you prefer using MediaPipe without Android Studio, please run setup_android_sdk_and_ndk.sh to download and setup Android SDK and NDK before building any Android example apps.

とあるので入れてみました

再度実行すると無事表示Hello World実行できました!

I20200918 14:23:55.252943 380831168 hello_world.cc:56] Hello World!
I20200918 14:23:55.254393 380831168 hello_world.cc:56] Hello World!
I20200918 14:23:55.254407 380831168 hello_world.cc:56] Hello World!
I20200918 14:23:55.254418 380831168 hello_world.cc:56] Hello World!
I20200918 14:23:55.254428 380831168 hello_world.cc:56] Hello World!
I20200918 14:23:55.254437 380831168 hello_world.cc:56] Hello World!
I20200918 14:23:55.254446 380831168 hello_world.cc:56] Hello World!
I20200918 14:23:55.254456 380831168 hello_world.cc:56] Hello World!
I20200918 14:23:55.254465 380831168 hello_world.cc:56] Hello World!
I20200918 14:23:55.254477 380831168 hello_world.cc:56] Hello World!

こちらにしたがって進めていきます

デモ実行

どれも問題なく実行できて、サンプル画像の通りの結果になりました

Face Detection

6つのランドマークとマルチフェイスサポートを備えた超高速の顔検出ソリューション

実行コマンド

bazel build -c opt --define MEDIAPIPE_DISABLE_GPU=1 mediapipe/examples/desktop/face_detection:face_detection_cpu
GLOG_logtostderr=1 bazel-bin/mediapipe/examples/desktop/face_detection/face_detection_cpu \
  --calculator_graph_config_file=mediapipe/graphs/face_detection/face_detection_desktop_live.pbtxt

横を向いても追従してきます
ちなみにマスクをしてみても追従してきました
顔を画面からはみ出させても追従してきます
画面に顔が一つもない状態で顔が認識されるということがありました
判定されたものは小物だったりバッグだったり、目鼻口に見えるものがあったわけではありません

Face Mesh

リアルタイムで468の3D顔ランドマークを推定する顔ジオメトリソリューション

実行コマンドはFace Detectionを参考にファイル名を変更するだけです

f:id:filot_nextd2:20200930173509p:plain:w100 f:id:filot_nextd2:20200930181357p:plain:w100 f:id:filot_nextd2:20200930181519p:plain:w100
こちらもマスク着用で判定され、少し横を向いても横から覗き込んでも追従してきました
真横になると判定できないようです
f:id:filot_nextd2:20201001170026p:plain:w80
複数顔が写った画像も試してみましたが1人しか認識されませんでした ついでに目と鼻っぽい3点があれば認識されるのだろうかと思ってプーさんに登場してもらいました
f:id:filot_nextd2:20201001175506p:plain:w100

顔として認識されているようですが、やっぱり人間とは違っておかしいです

ついでに会社のマスコットキャラのトドも試してみました
f:id:filot_nextd2:20201001175559p:plain:w100

こちらは顔とすら認識されませんでした

Iris

虹彩、瞳孔、目の輪郭を含むランドマークをリアルタイムで追跡

f:id:filot_nextd2:20201001155705p:plain:w80f:id:filot_nextd2:20201001155753p:plain:w80 f:id:filot_nextd2:20201001160010p:plain:w100f:id:filot_nextd2:20201001155837p:plain:w100 f:id:filot_nextd2:20201001160024p:plain:w130

目の輪郭を追跡ということでしたが、顔の認識もしてくれてるのでこちらもマスクをしてみました
見えていない鼻と口が多少ゆがんでます 片目を隠した状態でも同じように歪みましたが画面に写ってる目はしっかり追跡されました
f:id:filot_nextd2:20201001161729p:plain:w70
目をつむった場合はちゃんと目の輪郭が一本になりました

こちらもプーさんに登場してもらいました
かろうじて顔として認識されていますが、やはり目鼻口の位置はわからないようです
Faceの枠は表示されたり消えたりするので顔としての認識は怪しいです またトドも登場させてみましたが認識されませんでした 鼻と口の問題なのでしょうか。。

Hands

画像全体を操作し、方向付けられた手のバウンディングボックスを返す手のひら検出モデル

f:id:filot_nextd2:20201001150604p:plain:w100 f:id:filot_nextd2:20201001150320p:plain:w100f:id:filot_nextd2:20201001150340p:plain:w100f:id:filot_nextd2:20201001150407p:plain:w100f:id:filot_nextd2:20201001150450p:plain:w100
手の表裏と左右、指が見えないように縦にしたりしてみました すべて右手なのですが、掌がわからない状態だとLeftになる場合がありました
はじめに掌か手の甲を見せて認識させて動かすと良いようです 早い動きにも問題なく付いてきます

f:id:filot_nextd2:20201001161058p:plain:w100f:id:filot_nextd2:20201001161309p:plain:w90

指が5本見える状態で手の向きなどを変えた場合は問題なく認識されました

Pose

BlazePoseの調査を利用して、RGBビデオフレームから25の2D上半身ランドマークを推測する、忠実度の高い上半身ポーズ追跡用のMLソリューション

上半身のポーズ追跡をやってみました カメラから遠ざかるのでスクショはできませんでしたが、サンプル通りの結果になりました
画面から顔や体を半分はみ出させても追従されます アクロバティックにY字バランスポーズなどもやってみましたが足が手と認識されることはありませんでした
横向きは認識されなかったり、奥側にまわる腕の認識が点滅したりしてました
後ろ向きはでも認識され、目もそれっぽいところに配置されていました

広い部屋(後ろに何もない場所)で試してみると横向きになっても奥に位置する腕も認識されました

Hair Segmentation

DesktopはLinux対応なようなので、webで実行しました
f:id:filot_nextd2:20201002141657p:plain:w110 f:id:filot_nextd2:20201002141735p:plain:w100 f:id:filot_nextd2:20201002142014p:plain:w100
RGB(0,0,255)に設定されてます 少し下を向くと全体青くなりました
跳ねてる髪まで色が変わってますが前髪は変化しないときもありました
赤と緑もしてみました
青にしたときより黒髪が目立つ気がします
f:id:filot_nextd2:20201002142449p:plain:w100 f:id:filot_nextd2:20201002142839p:plain:w100 f:id:filot_nextd2:20201002151828p:plain:w100 f:id:filot_nextd2:20201002151848p:plain:w90

ついでにEdge Detectionもやってみました
f:id:filot_nextd2:20201002143104p:plain:w100
細かい髪の毛まで検出されてます こちらは参考にしてるページに詳細が載ってません

Object Detection

f:id:filot_nextd2:20201001185159p:plain:w100 f:id:filot_nextd2:20201001185314p:plain:w100

机にあったものが黒や青しかなかったせいなのか、ペンしか認識されませんでした
手を横から入れてみるとノートも認識されました プーさんは認識率が良いですね テディベアとして認識されています

会社の棚も撮ってみました
f:id:filot_nextd2:20201002150543p:plain:w150
ボトルはどれも似てるから判定されると思ったのですがそうでもないようです

デスクの上を動画に撮って認識させてみましたが、イヤホンやメガネははさみとして認識されました
ファイルはmp4で試しました
角度や背景にもコツが必要なのかもしれません
ボトルが並んでるところもmp4で試してみましたがどれも認識されませんでした
mp4で認識させると認識率が下がる気がします

Box Tracking

personやcell phoneは認識されますが、ペンは認識されませんでした
イヤホン(結んだ状態)は認識されるときもありましたがすぐ外れました
ノートも認識されるノートとされないノートがありました
こちらはなかなかコツが必要そうです

Face Tracking

ちょうどこの記事を書こうとしていたときにMediaPipeを使ったセミナーがあったので参加してみました

顔に画像を貼り付けて追従させるものです
会社のマスコットであるトドフェイスを貼り付けてみました

f:id:filot_nextd2:20201001200717j:plain:w100 f:id:filot_nextd2:20201001195446p:plain:w80

サンプル画像として用意されていた画像(目鼻口がちゃんと人の顔の通りになっている)だとやはりいい感じでした

これだけ簡単で正確に認識できるのでMediaPipeを使って色々遊べそうです
Hands機能を使ってハンドジェスチャーの認識をやってみたいです

UE4公式オンラインラーニングの備忘録を作る_5

目的

UE4公式オンラインラーニングの備忘録を作る_1
本記事の目的は↑を参照のこと

後で振り返りそうな内容のみ記載

今回の題材

リアルタイムレンダリング基礎入門
リアルタイムレンダリング基礎~リアルタイムレンダリング詳細
※ログイン必要

感想

エンジンに特化した内容ではなく、
レンダリング、シェーダー周りの用語やフローといった、全体像が知れる。

リアルタイムレンダリング基礎

リアルタイムレンダリングの裏側

r.ShadowQuality = 0~5

リアルタイムレンダリングのパフォーマンス

t.MaxFPS = xxx
stat fps
stat unit
Game -> CPU
stat rhi
stat scenerendering

リアルタイムレンダリングの詳細

リアルタイムレンダリングの詳細

透過処理は、フォワードレンダリングの方がディファードレンダリングより有利
world Settingss -> Pre Computed Visibility(Pre Computed Visibility Volume)
freezerenderingコマンド

ジオメトリのレンダリング (パート 1)

ドローコール

ジオメトリのレンダリング (パート 2)

UE4 <--> RenderDocの使い方
パフォーマンスに適するマージの条件
Instanced Static Mesh

ラスタライズ、オーバーシェーディング、GBuffer

GBufferと取得方法 -> High Resolution Screen Shot(Render Custom Depth Pass、Use Custom Depth as a mask、Include Buffer Visualization Targetsの設定必要)

リアルタイムレンダリングの詳細 - 反射

Plane Reflection(Capture Every Frame)
Post Process Volume(Screen Space Reflection)
優先度:Screen Space Reflection -> Plane Reflection -> Reflection Capture
短所を補うために3つを組み合わせる
Project Settingで反射の詳細設定可能(Reflection Capture Resolution)
r.SSR.Quality
SkyLightでワールド全体のバックアップ

静的ライティング

WorldSettingsからライトマップの確認可能
Lightmass Importance Volume(Indirect Lighting Cache)
Lightmass Character Indirect Detail Volume

動的ライティング

Cascade Shadow
Distance Field Shadow
Inset Shadow
Contact Shadow
Capsule Shadow
動的ライトと静的ライトの併用

フォグと透過処理

透過コスト高い
Sub Surface Rendering
Reflection
Displacement Mapping
Screen Space Ambient Occlusion
UI Rendering
Decals

リアルタイムレンダリングの詳細 - ポストプロセス

Light Bloom
Depth Of Field/Blurring
Lensflares
LightShafts
Vignette
ToneMapping/Color Collection
Exposure
Motion Blur

AnacondaでHMR2.0環境をつくってみる

参考にしたのはこちら
russoale/hmr2.0

前回HMRを試してみたのですがpython2.7で環境を作りました
サポートされていないのでやはりpython3で試してみたくなり、こちらを発見しました

実行環境

・MacBook Pro10.14.4
・Anaconda3
・python3.6.10

結論

環境はつくれませんでした
SMPLのTFRecordが作れずうまくいきませんでした
トレーニング方法も記載してくれていたのですが作れず、、
時間がかかってしまったので断念することにしました

注意点

今回はpython3で試すことが目的でしたが、SMPLのデータセットがfor python2.7になってるのが気になります
また容量の少ないPCでやっているため、何をするにもディスクがいっぱいになってしまって辛かったので
容量は確保してやるべきでした
MPIIのデータセットダウンロードには何時間かかかったので注意です

推奨通りにvirtualenv+python3.x環境

Python > 3.6
が推奨されていますので、3.7で試してみました
3.8もありますが、安定しているのは3.7らしいので3.7をvirtualenvでいれてみたところ
エラーが発生しました

エラー

どうやら前回作ったanaconda環境と競合が発生したようです
参考リンク - pyenvとanacondaを共存させる時のactivate衝突問題の回避策3種類

Anacondaの環境は残しておきたかったのでAnacondaで環境をつくってみます

Anaconda3で環境作り

conda環境でpython3.8でHMR2.0を試してみましたがこちらもできませんでした
pythonを3.8にした理由は新しいからというだけです
Recomendが3.xなので新しい方が良いだろうという安易な判断です

conda install matplotlib==3.1.2

こちらが異常に時間がかかり、はいりません
どうやらpythonのバージョンを落とす必要があります
参考リンク

python3.6に変更することでmatplotlibは入りました!

他にも入らないものが、、

  • opendr==0.77
  • deepdish[version='>=0.3']
  • opencv-python
  • ipdb

ダウンロード先チャンネルを追加することで2つは入るようになりました

conda config --append conda-forge

残った2つをどう入れるのか。。
- opendr==0.77
- opencv-python

condaとpipは混在NGですが、pipだと入るみたいなので入れてみました

× conda install opencv-python
○ pip install opencv-python==4.1.2.30
とりあえず今のところ問題なく入ってるのでopendrの解消を目指します

こちらを参考に進めますがダウンロードが長い!
入らない気がするので中断します
こちらを参考にtensorflowを入れます

conda install -c conda-forge tensorflow

We recommend you use --use-feature=2020-resolver to test your packages with the new resolver before it becomes the default.  

と言われることがあるので、その時は言われた通り --use-feature=2020-resolver をつけてあげれば大丈夫です

この後もまだtensorflowをいれるためにエラーが発生します

ERROR: awscli 1.16.144 requires botocore==1.12.134, which is not installed.  
awscli 1.16.144 requires docutils>=0.10, which is not installed.  
awscli 1.16.144 requires s3transfer<0.3.0,>=0.2.0, which is not installed.  
awscli 1.16.144 requires rsa<=3.5.0,>=3.1.2, but you’ll have rsa 4.6 which is incompatible.   

そしてawscliを入れるとbotocore、s3transfer、、とないものが続きます
必要なものはいれていき、requirements.txtに書かれているものは入れてしまいます

名称 バージョン
matplotlib 3.1.2
numpy 1.18.1
scipy 1.4.1
opencv-python 4.1.2.30
pycocotools 2.0.2
trimesh 3.8.5
tqdm 4.48.2

デモを実行

環境が整ったはずなので手順通りにlogsフォルダの作成をしてパッケージを解凍します
解凍したらデモの実行をします

cd src/notebooks
python trimesh_renderer.py

ここからまだまだエラーが続きます
実行した流れの通りに記載します

importエラー

デモ実行後、importエラーが発生しました

Traceback (most recent call last):
File "trimesh_renderer.py", line 8, in
from main.local import LocalConfig
ModuleNotFoundError: No module named 'main'

どうやらlocalのimportに失敗しているのでパスを通してみます

import sys
sys.path.append(os.path.join('..', 'main'))
import local

実行するとエラー内容が変わりました

PermissionError

mkdir(name, mode)
PermissionError: [Errno 13] Permission denied: '/data'

mkdirに失敗しているようです
main/config.py
の中でフォルダ作成されているようです

ROOT_DATA_DIR = os.path.join('/', 'data', 'ssd1', 'russales')

パスの場所を自分で管理できる場所にしたいので
os.path.join の第一引数の場所を適当に自分のわかる場所に変更してしまします

そしてデモを実行

Configurations:

と表示されて情報が表示されていきます、、、
building model...
Downloading data、、、、、
、、、、、、、、、、、、、、
いけそうでしたが エラー発生です

AttributeError

...main/model.py", line 434, in detect
AttributeError: 'Model' object has no attribute 'restore_check'

ソースを確認してみると↓でひっかかっているようです

if self.restore_check is None:
raise RuntimeError('restore did not succeed, pleas check if you set config.LOG_DIR correctly')

checkpoint_manager.latest_checkpointNoneとなっているため、self.restore_checkがNoneになるようです
公式の例文をみるとcheckpoint_manager.latest_checkpointは取得できそうなので調べてみます
ちなみにcheckpoint_manager.checkpointsも[]でした

初め、matplotlib==3.3.1、numpy==1.19.1を入れていたので推奨通りに入れなおしましたがエラーに変化はありませんでした

checkpoint.save()を呼ぶことでself.checkpoint_manager.latest_checkpointが作成され、restoreに成功しましたが、ドキュメントをみるとここでsaveする必要がなさそうに感じますが、restoreできなければ次へ進めないのでsaveすることにしました
とりあえず次のエラーが出たので解消します

ModuleNotFoundError : networkx, pyglet

ModuleNotFoundError: No module named 'networkx'
ModuleNotFoundError: No module named 'pyglet'

conda install によって解消しました

名称 バージョン
networkx 2.5
pyglet 1.5.7
ValueError

ValueError: operands could not be broadcast together with shapes (448,448) (224,224)

for c in range(0, 3):  
        img[y1:y2, x1:x2, c] = (alpha_mesh * image[:, :, c] + alpha_image * img[y1:y2, x1:x2, c])  

imageとimgのサイズが違うのでこのエラーがでているようです
調べてみると引数にあたるresolutionとは解像度なようです
渡しているh, wは画像のサイズのようなのでいい感じに同じサイズにしてくれるというわけではなさそうでした

image_bytes = scene.save_image(resolution=(h, w), background=bg_color, visible=True)

save_imageでなんとかできるのかもしれないのですが、見つからず
opencvでリサイズすることにしました

image2 = cv2.imdecode(np.frombuffer(image_bytes, np.uint8), -1)
image = cv2.resize(image2 , (w, h))

デコード後にリサイズします
ここでやっとデモが動きました!
f:id:filot_nextd2:20200925153902p:plain

ただこれはデモの結果として理想としているものとは違います
このissueはclosedになっていたのでさっそく試してみます

トレーニング

  • データセットをダウンロードしてdatasets_preprocessing/convert_datasets.shのパスを書き換えます
  • data/ssd1/russalesdatasets/xxxtfrecords_with_toes/xxxフォルダを作成しスクリプトを実行します

  • HMR2のREADME.mdにしたがってjupyterをいれます

    conda install jupyter

名称 バージョン
jupyter 1.0.0
jupyter_client 6.1.6
jupyter_console 6.2.0
jupyter_core 4.6.3
  • 実行します

    jupyter nbconvert inspect_dataset.ipynb --to python

[NbConvertApp] Converting notebook inspect_dataset.ipynb to python  
[NbConvertApp] Writing 3368 bytes to inspect_dataset.py  

これでpyファイルが作成されたはずです

python model.py
を実行しましたが、エラーです

six.raise_from(core._status_to_exception(e.code, message), None)
File "", line 3, in raise_from
tensorflow.python.framework.errors_impl.InvalidArgumentError: buffer_size must be greater than zero. [Op:ShuffleDatasetV2]

smplデータセットが無いことが原因なようです
またrussalesの下にtfrecordsフォルダも必要なようです

pklファイルをデータセットの下に置く必要がありますが、このファイルがどれにあたるものなのかがわからず、ここで断念することにしました

keypoint_markerフォルダ内にあるpklファイルを使ってみたところ

key = 'poses' if 'poses' in res.keys() else 'new_poses'  

というところでエラーがでました
確かにpklファイル内部にposesというキーもnew_posesというキーもありません
SMPL公式ページからファイルをダウンロードしても同じようにキーがありませんでした

そこでlsplsp_extをダウンロードしてTFRecordファイルを作成します

こちらは説明通りTFRecordファイルの作成ができます
SMPLのTFRecordもmodel.pyの実行に必要なのですが、どう作れば良いのかわからず
ここでどうやって進めれば良いのかがわからなくなり作業が止まってしまいました
model.pyファイルの途中でsaveが悪影響になっているのではないかとも思いました
時間をかけすぎてしまったのでちょっとここら辺でストップして他の作業をしながら空いた時間で引き続きみていきたいと思います

あとちょっとでできそうなのに。。

pklファイルの中身をterminalでみる

python -m pickle [filename]

UE4公式オンラインラーニングの備忘録を作る_4

目的

UE4公式オンラインラーニングの備忘録を作る_1
本記事の目的は↑を参照のこと

後で振り返りそうな内容のみ記載

今回の題材

ブループリントの学習
ブループリントの基礎概念~ブループリントによるプロダクトコンフィギュレータの作成
※ログイン必要

感想

ブループリントの基本知識や扱い方を、作りながら習得できるので、
最初の一歩としてアリ。

ブループリントの基礎概念

ブループリントとは?

Object - Actor - Pawn - Character
Level Blueprint(One Per Level)
Class Blueprint(Multiple, Modular)

ブループリントの作成とエディタのUI

Construction Script
関数ライブラリとマクロライブラリ

ブループリントコンポーネント

Default Scene Root

ブループリントグラフ

Ctrl + マウスホイール -> イベントグラフ内のズーム比率を+(1:1以上)
Context Sensitive
Alt + 左クリック -> ノード接続解除
ノード選択 + C -> コメント挿入
Graph, Macro, Function

様々な種類のブループリント

Level, Actor, Animation, UMG(Widget), 子

ブループリント使用時に注意すべきこと

Cast to XXX

ブループリントを使用したインタラクティブなマテリアル切り替え

コース紹介とマテリアルコレクション

Material Parameter Collection
Ctr + ドラッグ -> ノード切り替え
Component Maskノード

ウィジェットユーザーインターフェイスへの表示

Create Widgetノード
Add to Viewportノード
Player Controllerノード
Show Mouse Cursorノード

ウィジェットボタンとマテリアルコントロールの接続

Make LinearColorノード
Vector Parameter Valueノード

UIウィジェットのアニメーション

Flipflopノード
Play Animationノード
Selectノード

ブループリントによるプロダクトコンフィギュレータの作成

ブループリントイベントグラフ

Event Inputノード
Consume Input

変数と配列

Get All Actors Of Classノード
For Each Loopノード

データテーブル

構造体には、データテーブルの2列目から定義(1列目のUE Identification Number(UE4)は、定義必要なし)
Get DataTableRowノード
Integer -> to String -> RowNameに接続
Out Rowからデータを取得

HUD (ヘッドアップディスプレイ)

Sequenceノード

ゲームモード

Player Controller
Game Mode
Set View Target with Blendノード

マテリアル交換 パートA: コントローラーブループリントの作成

Add ...ノード
modulusノード
switch on ... ノード

マテリアル交換 パートC: 操作への反応

Rerouteノード

起動時のカバースクリーンの有効、無効の切り替え

Set Collision Response to All Channelsノード

アクセントマテリアルの交換

Make Arrayノード

データのHUDへの設定

Pure
AsCurrency
Append

ユーザーインタラクション用のHUD準備

Event Dispatcher
bind event to...ノード
Add Custom Eventノード

カメラインタラクションロジックの開発

Integer + Integer ノード
CompareIntノード
Delayノード

ボタン操作音の追加

Play Soundノード

単純な音楽再生プレイヤーと曲トラックの追加

Audio Component
Sound Base
Stopノード
Set Soundノード
Playノード

HMR(Human Mesh Recovery) をつかってみた

参考にしたのはこちらのプロジェクト
End-to-end Recovery of Human Shape and Pose
akazawa/hmr

Python2.7が推奨されています
サポートは切れていますがとりあえず動きがみたいので2.7で環境設定していきます

環境設定

macOS 10.14.4

サイトを見るとLinuxとWindowの設定が記述されていたのでWindowsを設定していたのですが、環境が作れなかったため、macで環境設定することになりました
macでもデモが動きました

手順

  1. Anaconda3を入れます
    公式ページの下の方に Installersリンク があります
    (前の記事でAnacondaのコマンドをまとめてます)

  2. 環境を作ります
    $ conda create -n [env_name] python=2.7

  3. Tensorflowをいれる
    公式ページに入れ方が載っています

  4. モデルをダウンロード
    $ wget https://people.eecs.berkeley.edu/~kanazawa/cachedir/hmr/models.tar.gz && tar -xf models.tar.gz

  5. デモを動かす
    $ python -m demo --img_path data/im1954.jpg
    これで動くと思います

エラー

私はデモ実行で複数のエラーがでました

ImportError: No module named absl

abls-pyを入れます
$ sudo pip install abls-py
私はpipで入れてしまったのですがpipとcondaが入るのはよくないので
condaで入れた方がよかったと思います

$ conda install -c anaconda absl-py

一度pip uninstallをしてcondaで入れ直しましたが問題なくデモは動きました

ImportError: No module named cv2

absl-pyを入れたあと、さらにエラーが発生しました

pythonでopencvを使うときによくみるやつです
$ conda install opencv
こちらで入ります

ImportError: No module named opendr.camera

次のエラーはopendrです
$ conda install opendr==0.77

デフォルトチャンネルのままだと入らないようでした

PackagesNotFoundError: The following packages are not available from vurrent channels

このときpipではいるという記事をみてpipでインストールしてしましました
$ pip install opendr==0.77
無事 "Successfully installed opendr-0.77" となりましたが
インストール先のチャンネル追加ができるコマンドを見つけたので
そちらで入れた方がよかったかもしれません

ダウンロード先を追加
$ conda config --append channels [channel_name]
ダウンロード先を確認
$ conda config --get channels

次のエラーです

TypeError: load() got on unexpected keyword argument 'encoding'

このエラーの上の行に
File "src/tf_smpl?batch_smple.py" line 32, in __init_
とありました

dd = pickle.load(f, encoding="latin-1")
このpickle.loadの引数がpython2とpython3で変わってしまったようです
32行目を
dd = pickle.load(f)
と書き直して
デモ実行!

デモ実行

無事実行されました

f:id:filot_nextd2:20200925153522p:plain

名称 バージョン
abls-py 0.5.0
opencv 3.4.2
opendr 0.77

windows10で設定をやめた理由

windowsが推奨されていたため、Anaconda3を入れて環境をつくっていました
python2.7はサポートがないと思ってpython3.6でやってみてました
macと同じようにエラーが発生
cv2がないとかscikit-imageがないとか、、、
macより色々でましたがだいたいモジュールが見つからないエラーでした
ただ、致命的なのがopendrがpython3に用意されていないということです

そこでpython2.7にしようと環境をつくりなおしました
今までと同じようにエラーを一つずつ潰していきます
そしてTensorflowが対応していないことに気づきました、、
https://www.tensorflow.org/install/pip?lang=python2#windows_1
なるほど。
python2.7を推奨しているのに

Windows Setup with python 3 and Anaconda

と書いてあるわけです

python2.7の環境を消そうとしたらAnacondaが起動しなくなりました、、

anaconda-navigator 起動しない

結構検索でてきます

https://github.com/ContinuumIO/anaconda-issues/issues?q=anaconda-navigator+
結果win64bit版のインストーラーが壊れているらしいという、、
そこでmacでやってみることにしました

anaconda-navigatorが動かないことに関しては
minicondaなどを試してみてもよかったかもです
condaコマンドが使えたら良いと思うので。

初めてさわるものばかりで
あとでこうした方が良かったと思うことがちらほらですが、
デモが動いたので次はpython3で動かしたいのと動画で実行してみたいです

UE4公式オンラインラーニングの備忘録を作る_3

目的

UE4公式オンラインラーニングの備忘録を作る_1
本記事の目的は↑を参照のこと

後で振り返りそうな内容のみ記載

今回の題材

Unreal Engine 入門
Unreal Engine 最初の一時間~よりよいパイプラインの構築
※ログイン必要

感想

「よりよいパイプラインの構築」が勉強になった

Unreal Engine 最初の一時間

Epic Games Launcherにようこそ

エンジンのインストール方法
マケプレで購入したアセットの使い方

初めてのプロジェクトを作成する

特に振り返りそうなことなし

コンテンツを扱う

Starter Contentの取り込み方
MarketPlace上のコンテンツの取り込み方
他のPJからのMigrate

初めてのレベルを作成する

Alt + ドラッグによるオブジェクト複製
Player Start
Atmosphere FogをDirectional Lightにattach
Reflection Capture

ビジュアルをコントロールする

反射光(Skylight)
露光(Post Process Volume)
BP_Sky_Sphere + Directional Light

アクタ

Lightingのビルド

Unreal Engine 入門

Viewport

Bookmark
Game View
Focus

World Outliner

ActorのGroup化(Lock、UnLock)

Details(詳細)パネル

プレイ中に非表示となるPropertyの表示方法
Property Matrix
Property Lock

Modes(モード)パネル

Geometry Editing

コンテンツブラウザ

Column View
Developer Content
Engine Content
Plugin Content
Localize Content
Collection(静的、動的)

メインツールバー

Settings(Preview Rendering Level)
BruePrintClassへの変更

エディタの環境設定

設定のexport/import

プロジェクト設定

設定のexport/import
Maps & Modes
Packaging
Collision
input
Rendering(Default Settings)

ワールドセッティング

Kill Z

プロジェクトとファイル構造について

プロジェクトの管理

新versionで開く際のプロジェクトのコピー

.uprojectファイルについて

switch version
Visual Studio Project生成
plugin version

プロジェクトの構造

削除可能(Intermediate、Binaries)
基本削除不能(Config、Content、Source)

ダウンロードキャッシュ

格納先パスの変更

DDC(Derived Data Cache)

格納先パスの変更
チームでの共有

よりよいパイプラインの構築

Document Reference
Project Download(and Powerpoint)

ソースコントロール

Perforce
SVN

テクスチャ

スタイルガイド
https://github.com/Allar/ue4-style-guide

サイズ(2の累乗)
alpha channel(埋め込み、分離)
RGB Mask Packing
Embed Alpha対応している拡張子はPNGとPSDとTGA、
HDR形式のみCube Mapが2の累乗である必要が無い
Mip Map
Mip Gen Settings(ちらつき対策)
Texture Groups

スタティックメッシュ

1 Unreal Unit = 1 Centimeter
LightMapとShadowMap(UV01内、重ねずに配置)
UCX{FullNameOfMesh}Number
Convex Decomposition
Overdrawの制限
Shader Complexity
LOD

エクスポートとインポート

Static Mesh(Smoothing Groups、Triangulate、Preserve Edge Orientation)
Skeltal Mesh(Smoothing Groups、Triangulate、Preserve Edge Orientation、Animation、Deformation、Skin)
Reimport
Auto Reimport
Full Scene Import(MaterialはDiffuseとNormalのみ、CameraはAnimationを含めない)

マテリアル パート1

Material Domain
Blend Mode
Shading Model
Master Material
Material Instance
RGB Mask Packing
Static Switches
Feature Level Switch

マスターマテリアルとマテリアル関数

VectorParameter node
テクスチャ選択後T Key
パラメータ変換
StaticSwitchPatameter node
scalar(1キー + 左クリック)
StaticComponentMaskParameter node
Lerp(Lキー + 左クリック)
Texture Cordinate node
Function Input node
Multiply(Mキー + 左クリック)

マテリアルインスタンスの活用

Material Property Overrides(確認用で使う)
頂点アニメーション
Opacity Mask
SimpleGlassWind

テクスチャストリーミング

UE4 Console 開き方(バッククオート、USキーボードはチルダ(日本語環境では@))
Default.iniで設定可能

LODとスタティックメッシュのマージ

Automatic LOD Creation Tools
BaseEngine.iniで設定可能
LOD Group

Marge Actor Tool -> 破壊的
LODSelection Type(Use specific LOD levelを選択 -> 新しいマテリアルの選択および調整が難しくなる)
Specific LOD(0を選択 -> 他はマージ後、最適か判別が難しいため)
Texture Sizing Type(用途に合わせて試す)
Blend Mode(親マテリアルによる)
マージ失敗対策で、事前にメモ帳などにコピぺ

HLOD(階層的LOD) -> 非破壊的

UE4公式オンラインラーニングの備忘録を作る_2

目的

UE4公式オンラインラーニングの備忘録を作る_1
本記事の目的は↑を参照のこと

今回の題材

Unreal Engine Kickstart (デベロッパー向け)
プログラミングキックスタート~マテリアルキックスタート
※ログイン必要

1-1. プログラミング - 概要と理念

f:id:filot_nextd2:20200925172139p:plain

1-2. プログラミング - スキマティック f:id:filot_nextd2:20200925172157p:plain

f:id:filot_nextd2:20200925172212p:plain f:id:filot_nextd2:20200925172235p:plain f:id:filot_nextd2:20200925172330p:plain f:id:filot_nextd2:20200925172403p:plain f:id:filot_nextd2:20200925172414p:plain GameMode
GameState
PlayerController
PlayerState
f:id:filot_nextd2:20200925172426p:plain f:id:filot_nextd2:20200925172448p:plain memreport

1-3. プログラミング - アドバイス

f:id:filot_nextd2:20200925172506p:plain Live++
f:id:filot_nextd2:20200925172517p:plain f:id:filot_nextd2:20200925172531p:plain f:id:filot_nextd2:20200925172606p:plain f:id:filot_nextd2:20200925172623p:plain f:id:filot_nextd2:20200925172635p:plain f:id:filot_nextd2:20200925172643p:plain f:id:filot_nextd2:20200925172656p:plain f:id:filot_nextd2:20200925172704p:plain

2-1. ブループリント - 概要と理念

f:id:filot_nextd2:20200925172716p:plain

2-2. ブループリント - スキマティック

f:id:filot_nextd2:20200925172724p:plain f:id:filot_nextd2:20200925172733p:plain
f:id:filot_nextd2:20200925172743p:plain f:id:filot_nextd2:20200925172755p:plain f:id:filot_nextd2:20200925172805p:plain f:id:filot_nextd2:20200925172814p:plain Event Dispatchers
Replication
f:id:filot_nextd2:20200925172822p:plain Child Actors
Blueprint Components
Blueprint Nativization
f:id:filot_nextd2:20200925172832p:plain Actor BluePrint
Level BluePrint
Anim BluePrint
Sequencer
UMG
Niagara
Variants Manager
f:id:filot_nextd2:20200925172842p:plain Direct References
Casting
Interfaces
f:id:filot_nextd2:20200925172854p:plain Blueprint Debugger
Logic Visualizer
Blueprint Watcher
Visual Logger

2-3. ブループリント - アドバイス

f:id:filot_nextd2:20200925172909p:plain f:id:filot_nextd2:20200925172914p:plain f:id:filot_nextd2:20200925172934p:plain f:id:filot_nextd2:20200925172940p:plain f:id:filot_nextd2:20200925172949p:plain f:id:filot_nextd2:20200925172958p:plain f:id:filot_nextd2:20200925173005p:plain f:id:filot_nextd2:20200925173014p:plain f:id:filot_nextd2:20200925173023p:plain f:id:filot_nextd2:20200925173032p:plain f:id:filot_nextd2:20200925173040p:plain f:id:filot_nextd2:20200925173048p:plain dumpticks
f:id:filot_nextd2:20200925173056p:plain f:id:filot_nextd2:20200925173137p:plain

3-1. キャラクター - 概要と理念

f:id:filot_nextd2:20200925173144p:plain

3-2. キャラクター - スキマティック

f:id:filot_nextd2:20200925173154p:plain f:id:filot_nextd2:20200925173201p:plain f:id:filot_nextd2:20200925173208p:plain f:id:filot_nextd2:20200925173216p:plain f:id:filot_nextd2:20200925173224p:plain SpringArm
f:id:filot_nextd2:20200925173230p:plain Behavior Tree
Black Board
Perception System
Environment Query System
f:id:filot_nextd2:20200925173243p:plain NavLink Proxies
NavModifiers
f:id:filot_nextd2:20200925173256p:plain f:id:filot_nextd2:20200925173305p:plain f:id:filot_nextd2:20200925173313p:plain Crowd Manager
Movement Component
Character Movement Component

3-3. キャラクター - アドバイス

f:id:filot_nextd2:20200925173322p:plain f:id:filot_nextd2:20200925173328p:plain f:id:filot_nextd2:20200925173336p:plain f:id:filot_nextd2:20200925173343p:plain f:id:filot_nextd2:20200925173350p:plain f:id:filot_nextd2:20200925173357p:plain f:id:filot_nextd2:20200925173406p:plain

4-1. マテリアル - 概要と理念

f:id:filot_nextd2:20200925173414p:plain

4-2. マテリアル - スキマティック

作成、操作方法、最適化
f:id:filot_nextd2:20200925173428p:plain f:id:filot_nextd2:20200925173437p:plain USF、HLSL
Shading Model
Blend Mode
Material Domain
Material Node
Expressions Workspace
f:id:filot_nextd2:20200925173445p:plain Texture Groups
Texture Streaming (StreamingPool)
Streaming Virtual Texturing
Compression (GrayScale Mask ×)
DDC
f:id:filot_nextd2:20200925173452p:plain Material Functions
Material Layers
Parameter Collections
Material Instances
f:id:filot_nextd2:20200925173500p:plain Shader Permutations
f:id:filot_nextd2:20200925173511p:plain Decal
Post Processing
Volumetric
Light Function
Runtime Virtual Texture
f:id:filot_nextd2:20200925173517p:plain Material Stats
Platform Stats
Shader Complexity
Quality / Feature Switches
Material Analyzer

4-3. マテリアル - アドバイス

f:id:filot_nextd2:20200925173525p:plain f:id:filot_nextd2:20200925173534p:plain f:id:filot_nextd2:20200925173541p:plain f:id:filot_nextd2:20200925173549p:plain f:id:filot_nextd2:20200925173556p:plain Incredibuild
f:id:filot_nextd2:20200925173604p:plain f:id:filot_nextd2:20200925173613p:plain f:id:filot_nextd2:20200925173619p:plain f:id:filot_nextd2:20200925173627p:plain

落ち着いたらどこかで辞書的にまとめる。