post Image
機械学習用の画像切り出しツールを作る

OSX向けに画像切り出しツールを作りました。
https://github.com/t-ae/ImageTrimmer

動機

  • 近々こういうのが必要な案件が来そうな気がした
  • OSX向けアプリを作ったことがないのでやってみたかった
  • SwiftやRxSwiftのバージョンアップへのキャッチアップ
  • 仕事がなくて暇だった

要件

30分ほど手動で切り出しをして要件を洗い出しました。

  • 一枚の画像中にPositiveな箇所が複数あり、Negativeも同一画像から取ることを想定
  • 二値分類のための画像をできるだけ早くたくさん作る
  • 切り出し部分がわかりやすいように
  • とりあえず案件特化で汎用性は後々

できたもの

こんなの
https://github.com/t-ae/ImageTrimmer
GIMPでちまちまやってるとサイズ揃えるの面倒だなーというのがあったのでサイズ固定での切り抜きは真っ先に実装しました。
あとNegative画像なんて手で切り出さなくてもいいだろ!とは思っていたのでランダム切り出し機能も付けてみました。
使い方やその他はreadmeの英語を解読してください。

Positiveっぽいの探索機能

ランダムだとNegativeばっかり集まるので、サンプルデータを入れてPositiveを探せるような機能もつけてみました。特徴量とかよくわかんないので輝度値をそのまんまSVMにつっこむ簡単仕様です。
パラメータは適当な範囲で探索させており、とりあえずテストに使った48×48のデータでは上手く見つけられていましたが、一般的に上手くいくかはわからないです。
(そもそもこれで見つかるPositiveが汎化性能に寄与するのか、という疑問があります。むしろある段階でPositiveっぽいNegativeを集めるのに役立つかもしれません。)

感想

OSXアプリについて

iOSと変わらんだろうと思っていたら全然違うので大変でした。
これからやろうという人は体系的にまとまってるのを先に読むほうが(どうでもいいことでイライラしないで済むという意味で)捗りそうな気がします。

RxSwiftについて

単一の値に入出力は複数あるケース(今回はxの値等)はReactiveに書くと恐ろしくスッキリしますね。マルチウインドウだとデリゲートでのやり取りが結構ありそうなのでそこをRxに置き換えていくのも良いかもしれません。
3になって~OnNext系に丸括弧が必要になったのはう~んどうなんでしょう。命名規則やなんかが変わっただけなので2からの移行で迷うことはなかったです。
deprecatedなsubscribeNextなんかを自動変換するとsubscribe(Event)に変換されるのだけ注意。

EasyImagyについて

先輩社員(@koher)の作成したライブラリです。最近は画像処理が要るものを作る時はだいたい使わせていただいています。
今回はOSXであることと処理が比較的単純なせいか十分な速度が出ていると思います。遅かったらCで書き直しも考えていたので良かったです。
詳しくは以下の記事を読んで、使ってみてください(宣伝)。
Swiftで画像をめちゃくちゃ簡単にあつかえるライブラリ

できたものについて

マウス+キーボードショートカットで切り出しできるようにしたので百枚くらいならサクッと集められるようになり、当初の目的は達成できました。キーボードショートカットの設定が予想以上に簡単だったのが幸い。

これからやりたいこと

  • マルチクラス用に拡張
  • メニューの使い方がよくわからなかったので調べる
  • 切り抜き枠と実際の切り抜き画像がズレてる感があるのでどーにかする
  • OpenCV勉強してなんか機能つけるとか

その他

機械学習にも画像処理にも縁のない半生だったので、知らないだけで便利なツールがある気がしてます。専門でやってる方は日頃どんなツールを使っているのか教えてください。あったらさっさと乗り換えます。

機械学習案件は地味に増えて来ていて使う機会も多そうなので、改善点などあったらバンバン指摘してください。


『 機械学習 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。