ブログ名

【第1回】簡易体積算出アルゴリズム作成 作成方針の策定

このシリーズでは、簡易的に体積を算出するアルゴリズムを作成していきます。
第1回となる今回は、アルゴリズム作成の方針を決定したいと思います。

簡易体積算出アルゴリズム作成の方針決め

このシリーズを通して作成するアルゴリズムは、「冷蔵庫や洗濯機などの大型家電をスマホのカメラで撮影し、その撮影した画像から体積を求める」アルゴリズムです。
考えられる方法としては2つあり、1つ目は相対的算出です。
これは、体積情報が既知な物体のバウンディングボックス(BB)を基準にし、家電のBBがどれだけ大きいのかを計算し、体積を推定する手法です。 具体的には、ある体積、辺長、面積が既知のキューブもしくは物体を、体積を求めたい家電の隣に置いて1つの写真に収め、物体認識アルゴリズムにより基準となる物体と家電を認識させます。

2つ目は幾何学的算出です。 ステレオカメラのキャリブレーションに用いるチェスボードでは1辺35 mmと規格化されているため、 OpenCVによるチェスボードの認識とその頂点間の距離と傾き、歪みを算出することが可能です。
もしチェスボードを地面と水平に家電の角に設置できるとしたら、体積の測定が可能であると考えられます。
この手法では、汎用物体認識アルゴリズムを用いずに撮影者が家電の頂点をマーキングする必要があり、 それだけではなく、この2つの手法では精度向上のため拘束条件がいくつか必要です。しかし,今現在では考えずにこのアイディアを実装するところから始めたいと思います。 まずは物体認識アルゴリズムのYOLO、SSDを既に持っており、追加作業が少ないため1つ目の手法から試します。

テスト

1つ目の手法をテストします。
そのために、基準となる物体を用意します。今回は手元にあって、3辺がだいたい同じくらい(55×57×55 mm)のクリップ入れを基準としました。
これを基準に測りやすくて小さいものから体積を推定していきます。今回は本を使用しました。
用いた本は「カンデルの神経科学 第5版」で、3辺はそれぞれ277×216×56 mmです。これを、それぞれの物体の3辺が確認できるように斜めで撮影しました。
しかし、撮影したものをYOLO、SSDで物体認識したところ、識別しきい値を下げても基準物体、測定物体ともに認識することができなかったため、RetinaNetを用いて両物体を認識できるしきい値(0.14)に下げました。
座標の結果は下記です。

[1581.8142 2192.0422 2172.4907 2831.989 ], 0.14712857, 基準物体
[164.50221 956.82434 2326.2192 2859.439 ], 0.17319395, 測定物体

基準物体の面の大きさは590.6765×639.9468により378001.536となり、測定物体の面は2161.717×1902.615により4112915.19となりました。
よって、測定物体は基準物体の10.88倍となります。
基準物体の体積は172425 mm3、測定物体は3350592 mm3です。
基準物体の体積の10.88倍は1875984となり、相対誤差44%で測定物体と大きく違う結果となってしまいました。
次に配置を変えて(基準物体を測定物体の遠い方の辺にくっつけて)テストします。
その結果は下記です。

[ 953.4718   558.96063 1509.832   1172.4265 ], 0.1337462, 基準物体
[ 244.91884  561.4803  2974.4988  3615.8137 ], 0.19654943,測定物体

同様に計算したところ、測定物体は基準物体の24.42倍となりました。
つまり,予測体積は4211783 mm3となり相対誤差は25%です。
これらの結果から、撮影の角の位置により誤差が大きく不安定で精度も悪いため、アイディアとしては保持するとしてこれは完成品にすることはできません。
次回は2つ目の方法であるチェスボードを基準とした簡易体積算出アルゴリズムの実装を行います。


次の記事へ

戻る