えいあーるれいの技術日記

ROS2やM5 Stack、Ubuntuについて書いています

背景を切り抜いて線画化するプログラムで壁紙生成(PastePicture2Wallpaper)

この記事の概要を簡単に説明すると、「技術の無駄遣い」です。


きっかけ

組込み・画像処理・AI界隈でTLを賑わすエンジニア・クリエイターの高橋かずひとさんがAxrossに投稿された記事がきっかけでした。

その内容は「単眼デプス推定を用いて距離を計測するレシピ」だそうです。

axross-recipe.com


『え!?単眼なのに深度推定!?』


深度を測定するのであれば、直接レーザーや超音波を当てて返ってくるまでの時間を用いる方法や複数のカメラの視差画像をもとに距離を計算する方法などがあります。Lidarやステレオカメラの性能は進化を続けており、深度の抽出に関しては多くの選択肢があります。


ここで紹介するMidasは単眼の画像(WebカメラとかでもOK)から深度を抽出してしまうらしいです。意味がわかりませんね。しかし、Webカメラとコンピュータを組み合わせるだけで深度を測定できるのであれば大きさやコストの面で有利かもしれません。

現在の計算リソースでは厳しいかもしれませんが、将来的にコンピュータの計算性能が飛躍的に進化すれば小型な端末上でも動くかもしれません。


手元に画像がなかったのでヒト(っぽい)画像を使ってみた。

フリー素材を探せばいくらでも候補が見つかるはずなのに、私は某馬育成ゲーム画面の画像をいくつか引っ張ってMidas推論をしました。

なぜこんな画像を使ったのか? Urara-Challengeを見てください。


するとなんということでしょう!かなり正確に深度が取れてしまいました。

そこで、私はこの技術を使って壁紙を作ることにしたのでした。(!?)


リポジトリは以下のURLの通り。Google Colabで動きます。

github.com

技術

ネタリポジトリなので、そこまで凝ったことはしていません。手順としては、

  1. 画像をアップロード&パラメータ調整
  2. Midas(チュートリアル通り)を用いて深度抽出して背景除去
  3. Canny法を用いて線画化
  4. 線画を透過
  5. PowerPointなどを使って壁紙のベースに貼り付ける

です。枯れた技術と新しい技術を連結しただけ!


結構ウケた

とりあえずUrara-Challengeの元ネタを変換してみました。

すると結構反応がよく、私のプログラムのユーザがちょこちょこと現れました!!


私が尊敬する(闇のエンジニアの)からあげ先生も猫の画像を線画化していました。さらにこのネタで記事も書かれていました。

zenn.dev

残念ながら、記事中ではうまく変換できなかったようです。私が作成したプログラムのトレース元が線がはっきりと写っているものだったので、実際の物体の線画抽出には強くなかったみたいです…

私も猫を使ってLinyax…!したかったのですができませんでした。


ロボットだと結構うまくいくみたいです。色がはっきりと区別できればいけそうです。


全部Colabで動きます!

最初は深度情報の抽出のみをColabで計算させていましたが、Google Colab で全て動くようにしました。


パラメータ調整もColabでできるようになっています。この機能は結構便利だなーと思ったので、ぜひチュートリアルをColabで作成される際は使ってみてください。

以下にそのコードを示します。

# プルダウン式の選択肢
mode = 'Anime' #@param ["Anime"] {allow-input: true}
OS =  'Mac-Gray' #@param ["Ubuntu","Windows","Mac-White","Mac-Gray"] {allow-input: true}

# スライドバー
median_ksize = 5 #@param {type:"slider", min:1, max:9, step:2}
morph_g_ksize = 5 #@param {type:"slider", min:1, max:9, step:2}
depth_threshold = 150 #@param {type:"slider", min:0, max:255, step:1}
canny_threshold = 150 #@param {type:"slider", min:0, max:255, step:1}


画像はOSの雰囲気に合わせて4種類出力できます。

Macだけ雰囲気がわからなかったので、鮮やかな背景とパステル風の背景の2種類に対応させています。

Linux風」とありますが、よく考えたらLinuxって青や緑の背景ありましたね… Ubuntu風です。


まとめ

新しい技術を無駄遣いするの、楽しいですね❗