ついにLooking Glass Portraitが来た!
ということでさっそくiPhoneのポートレートモード写真を表示しようとしたが、ほとんどHEIC形式で撮ってしまっていたためどうにかしたかった。
結局やったこと
- ポートレートモードで撮った写真をiPhoneからMacにAirDrop(どう頑張ってもHEICで転送されてしまう)
- HEICファイルから
heif-convert
コマンドで深度マップを摘出 - ImageMagickの
convert
コマンドで、RGBと深度マップが横並びになったJPEG画像を作成 - HoloPlay Studioに"RGBD Photo And Video"として読み込み
画像の処理は以下よのうなシェルスクリプトでやった。ImageMagickのインストールが必要なことに注意。
TMPDIR=/tmp/depth_heic
mkdir -p $TMPDIR
for f in "$@"
do
/usr/local/bin/heif-convert $f $TMPDIR/tmp.jpg
/usr/local/bin/convert -resize 2048x2048 $TMPDIR/tmp.jpg $TMPDIR/tmp-rgb.jpg
/usr/local/bin/convert -resize 2048x2048 $TMPDIR/tmp-depth.jpg $TMPDIR/tmp-d.jpg
/usr/local/bin/convert $TMPDIR/tmp-rgb.jpg $TMPDIR/tmp-d.jpg +append $TMPDIR/tmp-rgbd.jpg
cp $TMPDIR/tmp-rgbd.jpg $f-rgbd.jpg
done
rm -rf $TMPDIR
画像ファイルを右クリックしてこんな感じで実行すれば、HoloPlay Studioに入れられるJPEGができる。
詳細
画像の読み込み
Looking Glassの公式ページに書いてあることをやってみたが、
- 転送設定を「自動」にしてAirDrop → 無事HEICで転送される😇
- Mailアプリで送信 → JPEGにはなるがHoloPlay Studioによると深度情報がないとのこと
という感じであきらめた。
ちなみに、カメラの設定でもともとJPEGで撮影した写真はそのままAirDropしてHoloPlay Studioで読み込めた。
RGBD写真の作成
RGBDのJPEGってどうやって作るのだろう?と思って調べたがいまいち要領を得なかった。それもそのはずで、RGBD形式なんてものはないのだ!
以下のようにRGB情報と深度マップを並べたものをそう呼んでいるらしい。
なのでがんばってこういう画像を作る。
まずはheicファイルから深度情報を取り出す。
heif-convert your_pic.heic output.jpg
# output.jpgとoutput-depth.jpgができる
これでRGB情報がoutput.jpg
に、深度情報がoutput-depth.jpg
に出力される。
あとはこれをくっつければいいのだが、RGBと深度で解像度が違うので、きっちり横並びにするには深度のほうを拡大してやる必要がある。
ついでにRGBのほうもLooking Glassの解像度に合わせてリサイズしてみる。
convert -resize 2048x2048 output.jpg pic-rgb.jpg
convert -resize 2048x2048 output-depth.jpg pic-d.jpg
convert pic-rgb.jpg pic-d.jpg +append pic-rgbd.jpg
convert
コマンドはbrew install imagemagick
で使えるようになる。
+append
で横並びに結合するようだ。(縦並びは-append
らしい)
クイックアクション化
シェルスクリプトをいちいち叩くのも面倒なのでクイックアクションにしてみる。
これで上に貼ったように右クリックから変換できる。
クイックアクションはautomatorで作れる。
新規作成でクイックアクションを選択。
Finderからのイメージファイルのみ受け入れるようにしておく。
「シェルスクリプトを実行」を追加して、「入力の引き渡し方法」を「引数として」にした。これでシェルスクリプトの引数に選択したファイルのパスが渡される。
中身のスクリプトに書き換えて保存。
TMPDIR=/tmp/depth_heic
mkdir -p $TMPDIR
for f in "$@"
do
/usr/local/bin/heif-convert $f $TMPDIR/tmp.jpg
/usr/local/bin/convert -resize 2048x2048 $TMPDIR/tmp.jpg $TMPDIR/tmp-rgb.jpg
/usr/local/bin/convert -resize 2048x2048 $TMPDIR/tmp-depth.jpg $TMPDIR/tmp-d.jpg
/usr/local/bin/convert $TMPDIR/tmp-rgb.jpg $TMPDIR/tmp-d.jpg +append $TMPDIR/tmp-rgbd.jpg
cp $TMPDIR/tmp-rgbd.jpg $f-rgbd.jpg
done
rm -rf $TMPDIR
仕組みはわからないが、automatorで保存するとすぐクイックアクションのところに追加される。
HoloPlay Studioに読み込み
できた画像をHoloPlay Studioにドラッグアンドドロップ!
"RGBD Photo And Video"を指定すればよい。