読者です 読者をやめる 読者になる 読者になる

ぺぷしのーげん

大企業からスタートアップに転職したアプリケーションエンジニアのブログ

おいおい画像処理は魔法の呪文じゃないんだぞ!

f:id:hazakurakeita:20150915195146j:plain

ぱくたそ - フリー写真素材・無料ダウンロード

仕事中でもそうなんですが、画像処理を魔法と勘違いしてる人が多すぎる!今回はそれがどういう意味なのかを説明してみます。今からあるシステム開発を行うという設定で考えてみましょう。

 

硬貨の総額を計算するシステムを作るとき

f:id:hazakurakeita:20150915195509j:plain

さて、ここで硬貨が何枚かあるとします。今回はこの硬貨の総額を自動で計算するシステムを作らなければいけません。別に自動販売機やレジに硬貨を数える機械はついているのですから、そんな未来のシステムではありません。しかし、結構な割合の人が「スマホで写真撮って画像処理で計算する」って答えますよ。

いや、別にそれはいいんです。問題はそこでどこまで深く考えているかです。大半は次のように考えています。

  1. 硬貨が全部写るようにスマホで写真を撮る
  2. 写真から硬貨を認識する
  3. 全ての硬貨の総額を計算する
  4. 計算した総額を表示する

これで違和感を感じないひとが大半だと思います。でもこれでプログラマーにお願いっていうと「そういうやつかー」ってなります。慣れてるので何も言われませんが、プログラマーからはあなたは「あまり詳しくない人」と認識されます。相手が良いひとであれば話を合わせて説明してくれますが、中には面倒なひとだなーって思うひともいるので気を付けてください。

 

何が問題なのか?

システムの仕組みをステップで分かり易くしたつもりが、全然粒度が違うことが問題です。つまり、「写真から硬貨を認識する」というのは粒度が大きすぎるのです。開発工数の90%以上がステップ2の「写真から硬貨を認識する」に集中してしまっています。例えばこれを「桃太郎」で例えると以下のようになります。

  1. おじいさんは山へ芝刈りにいく
  2. おばあさんは川へ洗濯にいく
  3. 川に大きな桃が流れてくる
  4. おばあさんは桃を拾って家に持って帰る
  5. おじいさんとおばあさんで桃を割る
  6. 桃太郎が鬼を退治する

いやいやいや、6番の粒度でかすぎるから。…みたいな感じです。

 

つまりどういうことなのよ?

いやだって写真に硬貨が写ってるでしょ?別にノイズがあるわけでもなく、はっきりと映ってるでしょ?…それはあなたの目だけです!システム開発中のプログラマーにはさっきの写真が次のように見えています。

f:id:hazakurakeita:20150915212927j:plain

ど、どこにも硬貨が写っていない!!!

画像はゼロイチで表現されているので、極端な話、結局はこのゼロとイチのデータから硬貨を認識するプログラムを書かないといけません。それなのに、一言で「画像処理で認識して次に進みます」済まされると「うそーん」ってなってしまうんですね。

 

とはいえ、最近は高機能なAPIも出てきていて、顔認証なんかは簡単にできるようになりました。もしかしたら硬貨を認識して計算することもAPIを組み合わせてばできるのかもしれません。とはいえ、「うん、そこは画像あるから大丈夫だよ」みたいな謎の言葉をプログラマーに言うのは控えてあげてくださいねー。

 

おしまい。