ハイ。M10iです。
機械学習を使って型抜きクッキーの効率化
の続きです。前回の予告どおり
~~~どうにかサイズを取得してみよう!~~~
aws-Rekognitionでサイズ・形が取れなかったんですよね。前回の失敗は
このテーマをTwo-Dimensional Bin Packing Problem(2Dパッキング問題=四角形を並べる)と判断した結果ですね。
実際にはこれは Irregular Bin Packing=不規則な形状のパッキングに該当すると思います。
そもそも☆という凹凸のあるクッキー型を機械学習で学習できる状態にしなければいけません。
ふわっとしたchatGTPの答えでいける!と思わずに考えましょう。自戒。
今回の主題、☆を機械学習のデータとして扱う方法について考えていきましょう。
まず、データの変換を考えます。M10iの浅い理解の範疇で2種類の方法があります。
①ポリゴン化
データをの頂点を座標の配列で持ちます。ざっくりですが機械学習に向いてます。
クッキー型なので必ず頂点が結ばれて面ができます。
連続した位置情報なので相対的な距離で示せる=回転できます。
②グリッド化(2Dマップ画像)
形を 白(1)/ 空きスペースを黒(0) の画像として表現。
単純ですが回転させるなどに弱い。
今回は効率化を考えると回転させたいので、①で進めたいと思います!
では前回のコードをちょっといじって、さっとデータを作ります。
OpenCV(cv2)という画像処理・画像解析のためのライブラリを使ってサイズを取得します。
aws-Rekognitionのカスタムラベルを生成するのも考えたんですが、サイズと形を取るためだけにはちょーっと贅沢が過ぎるかなって。人や動物とか認識できちゃうサービス使うなんてリッチが過ぎる、今回は線だけでいいのに・・・ってことでオープンソースのOpenCVさんです。
ではさっそく。サイズが知りたいので3センチ角の正方形の型とその横に☆の抜型を配置します。
画像から濃淡で境界線を拾って、塊を認識します。
正方形と☆を拾って、正方形と☆の比率で☆のサイズを計算します。
※画像のノイズが多いと線が抜けないのでコントラストはっきりした画像がおススメ
早速コード。前回の再利用なのでDjangoです。
htmlに表示させるためのコードが多いのでちょっと長いです。
views.py
# 元の輪郭長の1%を誤差として許容
# ピクセル → cm に変換(サイズ確認用)
index.html
ではでは早速。
サイトにアクセスしてみます。画像にノイズが多くて苦労しましたが!!!!!(あんまり関係ないので省略)
なんと画像から☆の形がポリゴンとして抜き出せましたよ!
ちょーっと微妙な形ですが、これはもう元の写真のクオリティに依存するので・・・・
次回、ポリゴンデータを使ってどうやって機械学習させるのかをやっていきたいと思いますっ
え、機械学習してなくない?!
M10iでした。