mieki256's diary



2023/06/01(木) [n年前の日記]

#1 [cg_tools][python] ZoeDepthが気になる

1枚の静止画像からAIが奥行きを推測してデプスマップ画像を生成してくれる MiDaS というプログラムをローカルで動かして実験していたけれど。同様の処理をしてくれる ZoeDepth というアルゴリズム? プログラム? も気になり始めた。コレもローカル環境で動かせるのだろうか?

_GitHub - isl-org/ZoeDepth: Metric depth estimation from a single image
_ZoeDepthを使ってみた(Google Colabo)|Masayuki Abe
_ZoeDepthを用いて単一画像から深度推定するレシピ

github上の README.md に導入の仕方は書いてあると思うのだけど、自分、この手の知識はほとんどないから、何がなんだか…。

デモページを少し触ってみた :

サーバに設置された ZoeDepth の動作をWebブラウザ上から試せるデモページがあるっぽい。

_ZoeDepth - a Hugging Face Space by shariqfarooq

お試しで触ってみた。ページが表示されるまで結構待たされる。

下のほうにサンプル画像があるので、どれかしらをクリックして、「送信」ボタンをクリックすれば処理してくれる。デプスマップ画像が生成されるまで1分近く待たされるけど…。

「Image to 3D」というタブが気になる…。試してみたら、生成したデプスマップ画像を元にして3D形状を作って表示してくれた。これも出てくるまで1分以上待たされるけど…。

condaってなんぞや :

ローカル環境でも動かしてみたいので、git clone でファイル一式を持ってきて、その中で Python + venv で仮想環境を作成して、environment.yml の記述を参考にして pip を使って Pythonモジュールをインストールしようとしたのだけど。

_ZoeDepth/environment.yml at main - isl-org/ZoeDepth - GitHub

「そんなモジュールは無い」と結構言われてしまう…。

調べてみたら、どうやら conda なるツールを使うとそれらのモジュールをインストールできるらしい。というか、そのプロジェクトに environment.yml が存在する場合、その環境は conda を使って構築されたものだよ、ということになっていたらしい…。

その conda なのだけど。ググってみたら、Anaconda だの、miniconda だの conda-forge だの、もう何がなんだか…。

_AnacondaとMinicondaの比較、どちらで環境構築するべきか | In-Silico NoteBook
_conda-forgeとは?主な使い方や活用のポイントをご紹介 | 株式会社キャパ CAPA,Inc. コーポレートサイト
_conda-forgeからのPythonパッケージインストール - われがわログ
_Anacondaの有償化に伴いminiconda+conda-forgeでの運用を考えてみた - Qiita

よく分からないけど、Anaconda なるものは有償化されたとの話なので、miniconda + conda-forge なるものを使ったほうがいいのだろう…。たぶん。知らんけど。

2023/05/31(水) [n年前の日記]

#1 [cg_tools][blender] デプスマップで人物画像を動かしてみたい

ここ数日、画像生成AI Stable Diffusion web UIで生成した風景画像から、デプスマップを推測・生成して、blender で立体化して動画を作成する実験をしていたけれど。

これを人物画像でやったらどんな感じになるのか気になってきた。結構印象は変わってくるのだろうか。試してみたい。

環境は以下。
先に成果物を提示しておきます。こんな感じになりました。

元画像を生成 :

Stable Diffusion web UIで以下のような画像を生成。画像サイズは512x512。

00056-3036143978.i2i.03.png
_00056-3036143978.i2i.03.png
parameters

1 girl, solo, beautiful, japanese, idol, actress, photo realistic, masterpiece, best quality, school uniform, standing against the wall,
Negative prompt: EasyNegative, painting, sketches, (worst quality:1.4), (low quality:1.4), (normal quality:1.4), lowers, (monochrome), (grayscale), text, logo, watermark, message, bad anatomy, bad arms, bad legs, bad hans,
Steps: 25, Sampler: DPM++ SDE Karras, CFG scale: 7, Seed: 2713881344, Face restoration: CodeFormer, Size: 512x512, Model hash: ac68270450, Model: braBeautifulRealistic_brav5, Denoising strength: 0.6, Clip skip: 2, Version: v1.2.1


このままだと画像が小さ過ぎる気がしたので、Upscayl 2.5.1を使って、2048x2048に拡大。アルゴリズムは Ultramix balanced を選択。

_GitHub - upscayl/upscayl
_Releases - upscayl/upscayl

_00056-3036143978.i2i.03_upscayl_4x_ultramix_balanced.jpg

デプスマップを作成 :

Stable Diffusion web UI の拡張機能、ControlNet のプリプロセッサで、デプスマップを作成。種類は zoe を選んだ。

00056-3036143978.i2i.03-depth_zoe.png
_00056-3036143978.i2i.03-depth_zoe.png


一応、leres や MiDaS も使ってデプスマップを作ってみたのだけど。御覧の通り、結果がマチマチで…。

00056-3036143978.i2i.03-depth_leres.png
_00056-3036143978.i2i.03-depth_leres.png

00056-3036143978.i2i.03-dpt_beit_large_512.png
_00056-3036143978.i2i.03-dpt_beit_large_512.png

00056-3036143978.i2i.03-dpt_hybrid_384.png
_00056-3036143978.i2i.03-dpt_hybrid_384.png

対象物が近距離に収まってる場合は zoe のデプスマップが一番それっぽい気がする。上記の例では、髪、鼻、襟元が違うというか…。

blenderで読み込み :

blender 3.3.7 x64 LTS + ImportDepthMapアドオンで、元画像とデプスマップをインポートして、2.5D的な立体形状を作成。

そのままでは、遠方が小さくなってしまうので、ラティス変形を使って形を歪ませた。以下のような状態になった。

depthmap_take03_01_ss02.png


ちなみに、MiDaSで作ったデプスマップを使って同じことをしてみたのだけど…。

depthmap_take03_01_ss01.png

まだ zoe のデプスマップを使ったほうがマシかなあ、と…。

カメラにモーションをつけてレンダリング。512x288、24fps、120フレームで連番pngを作成して、ffmpeg で mp4 に変換。
ffmpeg -framerate 24 -i render\%04d.png -vcodec libx264 -crf 18 -pix_fmt yuv420p -r 24 out.mp4 -y

成果物 :

そんな感じで作業をして、以下のような動画ができました。

雑感 :

2D画像を単にPANする動画よりは多少それっぽくなった気もするけど、所詮は2.5D的な見せ方と言うか…。ううーん。

デプスマップに顔のパーツの凸凹も含まれるかなと期待したのだけど、そのあたりの情報はほとんど含まれない状態で出力されてしまって…。鼻の高さが微妙に含まれているかな、どうかな、というレベルで…。結果、作った動画も、なんともビミョーな出来になってしまった。

以前、カメラマップ(カメラマッピング)の実験をした時も思ったけれど、こういった流れで動画を作るとしたら、モデルデータをどれだけ精巧に作れるかがポイントになるのかもしれない。少なくとも、静止画の人物画像からデプスマップを推測して云々というやり方では、人物部分の奥行き情報がざっくりとしたものになってしまうので、期待した結果から程遠いものになってしまうなあ、と…。

余談 :

人物が映った動画を眺める際、見ている側は、おそらく顔周辺を最も注目して視聴しそうな気がするので…。そこだけでも精密なモデルデータを作れたら結構違うのかもしれない。

であれば…。あらかじめテンプレートになりそうな顔モデルデータを用意して、画像を顔認識させて、目・鼻・口・耳などの位置にアタリをつけて、それらの位置に沿うように顔モデルデータを変形させて、そこに元画像をテクスチャとして貼り込めば、などと妄想したりもして。

もっとも、たしかそういった方法で、動画内の顔部分を差し替えていた技術が既にあったような気がする。

ただ、動画内の顔を差し替えるソレは、元になる動画が存在しないと作業できないデメリットはありそうだなと。一枚の画像さえあれば少しは動かせますよ、というソレとは、ちょっと方向性が違ってくるような気もする。既に存在する動画を改変してしまう技術と、ほとんど何もない状態から動画を作るソレは、ジャンルが違うのでは…。まあ、どちらでも共通して使える技術もありそうだけど。

そういえば、一枚の人物写真を渡すだけで口パク動画を作れてしまうアニメーション作成ソフトがあったような…。CrazyTalk、だったっけ? ググってみたら、Character Creator + HeadShotプラグインに変わってた。

_画像から 3D 頭部モデルを生成 | Headshot | Character Creator
_Generate Faces from Photos in Minutes | Headshot Plug-in for Character Creator - YouTube

というわけで、顔だけでもそれっぽく、という技術やソフトなら既に色々ありますなと。

2023/05/30(火) [n年前の日記]

#1 [cg_tools][ubuntu][linux] MiDaSをLinux上で動かしてみた

_昨日、 Windows10 x64 22H2上で MiDaS を動かしてみたけれど。GPUを使わずにCPUだけで処理できるなら、内蔵GPUしか持ってないサブPC(Intel Core i3-6100T、Ubuntu Linux 22.04 LTS機)上でも動かせるのかなと疑問が湧いた。

そんなわけで、Ubuntu Linux 22.04 LTS上でも実際に動くのか試してみた。フツーに動いてくれた。とメモ。

導入の手順は、 _昨日の作業内容 と大体同じ。

ちょっとハマったのが、Pythonの仮想環境を用意して切り替えるあたり。Ubuntu Linux 22.04 LTS の場合、Python 3.x を動かすには、python3 と打つ。Python 2.x を動かしたい場合は python2 と打つ。単に python と打ったら「そんなものはねえ」と言われた…。なので、仮想環境を作る際は以下を打つ。
python3 -m venv venv

仮想環境への切り替え方も、Windowsとはちょっと違う。
以下が参考になった。ありがたや。

_【venv】Ubuntuでpython仮想環境をつくる - Qiita

また、今回Pythonモジュールは以下の順番でインストールした。一番最後に timm をインストールことで、一度インストールしたtimmの依存モジュール群を後から別バージョンでインストールし直す状態を避けてみたつもり。
pip install numpy==1.23.4
pip install einops==0.6.0
pip install imutils==0.5.4
pip install torch==1.13.0
pip install torchvision==0.14.0
pip install opencv-python==4.6.0.66
pip install opencv-contrib-python==4.6.0.66
pip install matplotlib
pip install timm==0.6.12

余談。Python3 をpythonにしておいた :

せっかくだから、以下のページを参考にして、python と打ったら python3 が使われるようにしておいた。とメモ。

_Ubuntu Linux 22.04 LTSで、"python"コマンドがないと言われたら - CLOVER

sudo apt install python-is-python3
$ python -V
Python 3.10.6


他に、update-alternatives を使って切り替える方法もあるらしい。「update-alternatives python」でググれば解説ページに辿り着ける。

_Ubuntuでpythonのバージョンを切り換える - Qiita
_デフォルトで使うpythonのバージョンをめちゃ簡単に切り替える方法|かつお

#2 [cg_tools] pfm画像の中身を目視したい

MiDaS の run.py は、処理結果を .png と .pfm (Portable Float Map) の2つで出力してくれる。.pfm にはどんな情報が含まれているのか確認してみたい。しかし、.pfm を開けそうなツールは存在するのだろうか。気になったので少し調べてみた。環境は Windows10 x64 22H2。

結論を先に書いておくと、.pfm を .exr に変換して使うのが妥当かなと…。

GIMPで試した :

GIMP で開くことはできないのかな。ググってみたら、file-pnm で PFM を開けるように機能追加、という話を目にしたけど…。

_[gimp] plug-ins: add PFM reading support to file-pnm

GIMP 2.10.34 Portable で開いてみた。真っ白な画像しか出てこなかった。ただ、どれを開いてもそうなるわけでもなく…。一部の画像は隅っこのほうに黒いもやもやが入ってる。ただ、.png とは全く違う見た目なわけで…。どうも正常に開けているとは思えない。

ImageMagickで試した :

ImageMagick 7.1.0-37 Q16-HDRI x64 で試してみた。とりあえず png に変換してみる。
magick convert dog-dpt_beit_large_512.pfm out.png

GIMP と同様、真っ白な画像になった…。


_ImageMagick - Image Formats

上記ページによると、PFM は Read/Write対応済みと書いてあるように見えるのだけど…。うーん。


magick identify -verbose を使って画像の情報を眺めてみる。
> magick identify -verbose dog-dpt_beit_large_512.pfm
Image:
  Filename: dog-dpt_beit_large_512.pfm
  Format: PFM (Portable float format)
  Class: DirectClass
  Geometry: 1546x1213+0+0
  Units: Undefined
  Colorspace: Gray
  Type: Grayscale
  Endianness: LSB
  Depth: 32/16-bit
  Channel depth:
    Gray: 16-bit
  Channel statistics:
    Pixels: 1875298
    Gray:
      min: -5.00881e+06  (-76.4295)
      max: 6.35226e+08 (9692.93)
      mean: 3.36157e+08 (5129.42)
      median: 1.78825e+08 (2728.69)
      standard deviation: 2.23969e+08 (3417.55)
      kurtosis: -1.66082
      skewness: -0.306461
      entropy: 5.32168e-05
  Rendering intent: Undefined
  Gamma: 0.454545
  Matte color: grey74
  Background color: white
  Border color: srgb(223,223,223)
  Transparent color: none
  Interlace: None
  Intensity: Undefined
  Compose: Over
  Page geometry: 1546x1213+0+0
  Dispose: Undefined
  Iterations: 0
  Compression: Undefined
  Orientation: Undefined
  Properties:
    date:create: 2023-05-29T21:45:37+00:00
    date:modify: 2023-05-29T00:41:42+00:00
    signature: d65a7beee69bd2d2af7f3b85e73a82873cfe59fdf4777940af366f38d93ba316
  Artifacts:
    verbose: true
  Tainted: False
  Filesize: 7.15372MiB
  Number pixels: 1.8753M
  Pixel cache type: Memory
  Pixels per second: 78.9084MP
  User time: 0.063u
  Elapsed time: 0:01.023
  Version: ImageMagick 7.1.0-37 Q16-HDRI x64 1b8963a:20220605 https://imagemagick.org

別のフォーマットなのではと疑ったりもしたけど、PFM (Portable float format) と表示されてるから、画像ファイルであることは間違いなさそう。たぶん。


いきなり .pfm を開くのではなく、MiDaS が出力した .png を、ImageMagick を使って .pfm に変換して、各ツールで開けるのか試してみることにした。

.png から .pfm への変換は以下。
magick convert dog-dpt_beit_large_512.png out.pfm

変換してできた .pfm を、ImageMagick に同梱されてるビューア、imdisplay で表示してみる。
imdisplay out.pfm
これなら .png と似たような見た目になった。また、 GIMP 2.10.34 Portable でも開いてみたけど、そちらも .png と同じ見た目になった。

つまり、ImageMagick (imdisplay) や GIMP で .pfm を開ける場合もある、ということだよな…。全ての .pfm が開けないわけではなさそう。ひょっとして、カラーの .pfm は開けるけど、グレースケールの .pfm は開けない、とか?


_Depth in float32 in meters units - Issue #36 - isl-org/MiDaS - GitHub

上記のやり取りによると、MiDaS が出力する .pfm には float32 が入ってる、と書いてある。最小値と最大値を調べて、各ドットの値を8bitに収めないと目視できる状態にならないと思うのだけど、各ツールはそういうことをしているのかどうか…。1000だの2000だのの値を取り出せても、0 - 255でクリッピングされていたら真っ白になっちゃいそうだけど…。

blenderで試した :

blenderで読み込めないものかなと、blender 3.3.7 x64 LTS で試してみたけど、.pfm という拡張子は画像として認識されなかった。

PFMに対応させるためのパッチが送られたこともあったらしいけど…。

_#28360 - Portable Floatmap format support - blender - Blender Projects

「マイナーなフォーマットをサポートしてたらキリが無いので」という理由で取り込まれることはなかった模様。

また、blender関係の掲示板を眺めてみたけど、「PFMを使いたい」という質問が出てくると「OpenEXRを使え」「PFM? そんなもん使ってるんじゃねえ」と言われることがほとんどのように見えた。OpenEXRは16bitの浮動小数点数で、PFMは32bitの浮動小数点数なんだけどな…。まあ、フツーは16bitで足りるやろという共通認識があるのだろう。

exrに変換してみた :

以下のサービスを使って、.pfm を .exr に変換してみた。

_PFM EXR 変換。オンライン フリー - Convertio


得られた .exr を Luminance HDR 2.6.0 Build 50b31d で開いてみた。

_Luminance HDR
_Releases - LuminanceHDR/LuminanceHDR

それらしい形が目視できた。つまり、MiDaS が出力した .pfm には、ちゃんと情報が含まれているようだなと…。

得られた .exr を、blender 3.3.7 x64 LTS 上でディスプレイスモディファイアのソース画像として使ってみたところ、それらしい形状が得られた。ただ、かなり長い距離が得られるようで、縮小や移動をしてイイ感じのサイズにする作業が面倒…。奥行き方向の解像度が粗いとしても、グレースケールpng画像を利用したほうが使いやすそうだなと…。

余談。ImageMagick 7.1.0-37 Q16-HDRI x64 でも、.pfm から .exr に変換できた。
magick convert dog-dpt_beit_large_512.pfm out.exr

変換後の .exr を Luminance HDR 2.6.0 Build 50b31d で開いてみたけど、こちらもそれらしい形が目視できた。

Darktableで試した :

Darktable 4.2.1 x64 で .pfm を開いてみた。

_darktable

最初に開いた時は真っ白だったけど、コントラスト、明るさ、その他を色々弄ってたらそれらしい形が見え始めた。ただ、どのあたりを変更すればどうなるのかがさっぱり分らない…。それでも一応、.pfm の中にそれらしい情報が入ってることぐらいは分かるけど…。

2023/05/31追記 :

ググっているうちに、 HDRViewというビューアと遭遇。「シンプルな研究指向の深度マップおよびハイダイナミックレンジ画像ビューア」とのこと。PFM、EXR、HDR をサポートしているらしい。

_GitHub - cdcseacave/HDRView
_Releases - cdcseacave/HDRView - GitHub

HDRView_Windows_x64.7z を解凍して、中に入っている HDRView.exe を実行してみた。ウインドウに .pfm をエクスプローラからドラッグアンドドロップしてみたら、それっぽい形が一発で表示された。素晴らしい…。これを使えば .pfm の中身がざっくり分かりそう。ありがたや。

以上、3 日分です。

過去ログ表示

Prev - 2023/06 -
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project