ユニファ開発者ブログスマートフォン用の表示で見るユニファ開発者ブログユニファ株式会社システム開発部メンバーによるブログです。2018-11-15手形のサイズを自動で計測するR&Dエンジニアの浅野です。先日ユニファの仲間から「手形の写真からサイズは自動的に分からないの?」と相談を受けました。最近のスマートフォンにはAR技術を使って長さなどを測る機能がありますが、始点終点を定める手間があるのと精度がまだ不安です。大きさの参照となるものが一緒に写っているなら写真だけ撮っておけば後は自動で測定できるはず、ということで今日はその仮説を検証してみたいと思います。前提として、大きさの分かっている紙(今回はA4用紙)に手形が押してあるとします。娘に協力してもらい、手の縁取りをして色鉛筆などで塗りつぶしてもらったものを撮影しました。サイズをできるだけ正確に測る上でポイントとなりそうなのが、手形が必ずしも真上から撮影されるわけではないことと、手の向きが必ずしも台紙に対して真っ直ぐではないことです。処理開始AI全盛の時代なので、深層学習で手形の部分をセグメンテーションして・・・といきたいところですが、基準となる性能を理解する上でも最初はできるだけシンプルな方法でやってみるのが得策です。カメラの角度によって用紙が台形に見えてしまっている部分に対処していきます。このままでは縮尺が歪んでいるため正しく大きさを知ることができないからです。基本方針として、用紙の四隅がどこにあるかを検出してそれを長方形に補正することにします。人間は簡単に四隅を見つけることができますが、ソフトウェアでそれを実現するにはいくつかのステップを踏む必要があります。具体的には、まず画像をグレースケールに変換した後に二値化という処理を行います。二値化とは、ある閾値以上の輝度をもつ画素を白に、下回る画素を黒に強制的に変換することをいいます。することで台紙の輪郭を抽出することが容易になります。グレースケール変換から2値化を経て台紙の輪郭が検出できた。台形補正から手形領域の検出へ輪郭がわかると四隅の座標を計算で求めることができます。するとその座標から射影変換という手法を使って台形に写っていた部分を長方形に補正することが可能となります。これで縮尺が正しくなったので、続いて手形の部分を検出してその大きさを推定するという作業に移っていきます。手形の輪郭抽出には先ほどと同様にグレースケール変換や二値化を活用していきます。二値化処理は単純なように見えますが、実は輝度ムラやノイズの影響を受けやすいため、様々な環境で撮影された画像に対して精度良く働くようにする部分はエンジニアとしての腕が試されるところです。うまく輪郭を捉えることができると手形の大きさの推定まであと一歩です。台形補正から上記と類似の変換を経て手形の輪郭が抽出できたいよいよサイズ推定へ。最終段階になって立ちはだかるのが、最初に挙げたポイントの二つ目です。手が台紙に対して真っ直ぐである保証はないため、単純に縦方向の座標の最大値から最小値を引けばよい、というわけにはいきません。主成分分析やパターンマッチングなどを使って手の向きを推定するという方向性もありますが、ここは検出した輪郭の外接円を描き、その直径を手形のサイズとする、という方針にしたいと思います。することで手の向きを気にする必要がなくなります。後は得られた直径を台紙の大きさと比較して実際のサイズを算出します。この方法で推定された大きさは14.0cm。それに対して自分で定規で実測した値は約13.8cmでした。良い精度です!人間が測るときにはどこに定規をあてればいいのか結構迷いますし、だからこそ人によって結果にばらつきがでそうです。それを考えるといつも同じ尺度で計測できるというのもソフトウェアで実行する利点の一つですね。最後に当初の目的であった仮説の検証は無事できましたが、もし仮にサービス化まで見据えると技術的な部分だけでも引き続き考えたいことはたくさんあります。切り取ったり飾りつけた後に写真を撮りたいのでは?写真に手形が写っていると(それこそ深層学習で)認識して、サイズ計測モードに自動で移行できたらかっこいい!どれも簡単なものではありませんが、だからこそやりがいがある内容です。技術的にできる/できない、お客様に刺さる/刺さらない、ビジネスになる/ならない、様々な葛藤を乗り越えて世に送り出したものが受け入れられて役に立ったときの言葉にならない喜び。これがあるからエンジニアはやめられません。弊社では一緒に働く仲間を大募集中です。iOSエンジニアをやっていますわたなべと申します。現...2019-11-21JUMP問題こんにちは、プロダクト開発部のちょうです。ユニファのQAチームの斉藤です。Fargate)で運用する際のログ設定で工夫した点こんにちは、Webエンジニアの本間です。学習済みモデルを使って顔画像のクラスタリングを行うお久しぶりになります、iOSエンジニアのしだです。Detection月別アーカイブスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。