walkingmask’s development log

IT系の情報などを適当に書いていきます

MENU

令和ドローの裏側2、画像内オブジェクト領域の頂点をGUIで求める

謎シリーズ第一回に続き第2回目です。

令和ドローリリースから度々アップデートをかけてきたのですが、今回のアップデートが多分最後のアップデートです。あんまり使われてないからねorz

第一回でも述べられているように、平成ドロー、令和ドローは超アナログ手法で画像素材を作っています。

画像素材を作る工程はだいたいこんな感じです。

  1. 動画を用意する
  2. ちょっと動画を加工する
  3. 動画内で削除したい画像領域の頂点を求める
  4. 3で求めた領域の削除

そして、3, 4でpoints.jsoncropped/i001.pngと言った画像素材を得ています。

実際には 3, 4 を入れ替えて、macOSPreview で額内の白い領域を削除して、それを覆うように頂点を求めています。

前回は 4 の領域の自動削除を紹介しました。

ただ、(そこで使ったテクニックの有用性はともかく)得られた画像素材がいまいちだったので結局アナログに Preview で削除を行ったのが前のアップデートでした。

今回アップデートしたのは 3 の部分です。

アップデート前、頂点を求めるには

  1. 画像を表示
  2. 目視しながら4隅をクリックしていく
  3. 4回クリックしたら点を記録して次の画像へ

という残念な方法で頂点を求めていました。。。

今回は以下のようなGUIツールを作って頂点を求めました。

f:id:walkingmask:20190403003103p:plain

4つの点とそれを結ぶ線があり、それらを削除したい画像領域に合わせて配置することで、頂点を求めることができます。

ソースコードこちら

tkinterというpythonのbuilt-inライブラリを使用しています。インストールが必要なのはpillowくらい。

4つの点はマウスでD&D可能で、点を結ぶ線は点に合わせて移動します。

sキーを押すとその画像はスキップし、rを押すと頂点を保存します。

処理の流れはこんな感じ。

f:id:walkingmask:20190403003103p:plain

次のフレームへ。

f:id:walkingmask:20190403004520p:plain

ポイントを移動します。

f:id:walkingmask:20190403004535p:plain

これによって、

  • 目視クリックではなく、実際のポイントを視覚的に配置できる
  • やり直しが効く

と言ったことが可能になります。アナログなことに変わりはありませんが、この補助があるだけでめちゃめちゃ楽。そして精度もよくなります。

前と今回のアップデートを通して、どれくらい成長したかを比較。

f:id:walkingmask:20190403005327g:plain

f:id:walkingmask:20190403005411g:plain

画像枚数が増えたので、違いがいまいちわかりにくいですが、ドローシリーズのプロから見ると圧倒的に精度が上がっている(プルプルが抑えられている)と言えます。

その他応用

点は幾つでも増やせるので、もっと複雑な図形の領域選択や、逆に矩形にも応用できると思います。

そう言った汎用性の高いツールにできるだろうと思って、作りました。思ったより工数もかかりませんでした。

こう言った画像領域の選択および、その領域の頂点を求めるというのは、機械学習界隈でよく使われていて、その辺で使えないかなーという感じです。

もしかしたらもっといいツールがありませんが。。

あとは、ポイントがD&Dしてる間に落ちちゃったり、ガチで使うなら1pxくらいずれていたりするので、細かいチューニングが必要そうです。

戻るボタンとかもあると楽ですね。フレームを前後してポイントの遷移チェックとか。

まとめとしては、tkinterの勉強やこういうツール作るのも含めて、令和ドロー作るの楽しかった!!

本当はもっと使ってもらいたかったですけどね。これからちょくちょく使われるといいなあ。