iOSのデプスで自動背景合成する際に、カメラに超近接する物体が背景となってしまう問題

リアルタイムにデプスを活用する場合のユースケースの多くは背景自動合成(クロマキー合成的な)ではないかと思う。で、それを本気でプロダクションレベルに持っていこうとするとこの問題にぶち当たると思うのだけど、デプスを実際に実装してみて自分でこの問題にぶち当たった人にしか伝わらないと思うので自分用メモとして雑に書く。

ちなみにTrueDepthのフロントカメラ側でデプスデータを利用する場合の話。あとARKit使用時ではなくAVFoundationからカメラを利用する場合の話。

問題: ものすごく近くにあるものが背景と判定される

手をカメラから10センチぐらいまで近づけると、その手の領域が背景と同化する。

画像1

それは「しきい値処理が悪いんじゃないの」と思われるかもしれないが、AVCaptureDepthDataOutputが返してくるデプスデータの段階で既に背景と同じ1.0にされてしまっているのだ。

画像2

データとして存在しないんじゃどうしようもない。

どういうケースで困るのか?

これは実際に仕事上であったケースなのだが、商品紹介動画を録れるiOSアプリがあるとして、デプス利用により自動で背景を合成できる機能が売りだとする。

商品をよく見てもらうためにカメラに近づけると・・・

「背景に合成されて商品が消えた」となる。

いや、商品紹介動画に限らず、カメラに近づけるという行為は「視聴者にもっとよく見てもらいたい」という動機である場合がほとんどで、それが背景が合成されて消えてしまうというのは致命的な問題だと思う。

ここから先は

972字 / 2画像
文章やサンプルコードは多少荒削りかもしれませんが、ブログや書籍にはまだ書いていないことを日々大量に載せています。たったの400円で、すぐに購読解除してもその月は過去記事もさかのぼって読めるので、少しでも気になる内容がある方にはオトクかと思います。

技術的なメモやサンプルコード、思いついたアイデア、考えたこと、お金の話等々、頭をよぎった諸々を気軽に垂れ流しています。

最後まで読んでいただきありがとうございます!もし参考になる部分があれば、スキを押していただけると励みになります。 Twitterもフォローしていただけたら嬉しいです。 https://twitter.com/shu223/