パッケージ画像からエンゼルの出現を予測できるのか? 〜問題設定、前処理編〜
概要
- エンゼル獲得の攻略情報をGoogleで検索すると、「パッケージの印刷のズレで識別できる」という複数の情報が見つかる
- 印刷ラインが違うのでという、一見すると納得感のある予想がされているが、本当か?
- 人が見てわかるなら画像識別モデルにより予測ができるはず
- 予測モデル構築のための、前処理を作ってみた
- 予測モデルの構築はもう少しデータを集めてから
はじめに
これまでに当ブログでは、エンゼルの出現確率は実際にどのくらいなのかを予測してきました。(継続中)
ベイズ推定でエンゼルの出現確率を予測する - チョコボール統計
ベイズ推定で【銀の】エンゼルの出現確率を予測する - チョコボール統計
しかし、出現確率がわかったところで、 実際にコンビニでチョコボールを買うとき、 今手に持っているチョコボールにエンゼルが入っているのか否かを予測することには役に立ちません。
この問題に対して、ネットでエンゼルの攻略情報を検索してみるとたくさんの情報がヒットします。
チョコボール エンゼル 見分け方 - Google 検索
これらの情報を見てみると、以下の記事のように、 エンゼルの入っているパッケージは他の多くのパッケージと印刷の違いがあり、 その細かな差で判別できるとされています。 netallica.yahoo.co.jp
あたり箱とハズレ箱の間に生じている相違点を探します。同じグループであるにもかかわらず、印刷などの部分に違いがある「仲間外れ」の箱を探すのです。
これは本当なのでしょうか? 私がざっくりと情報を調べた限り、 一つまたは極少数の当たりパッケージとその他の少数のパッケージとの違いをもって 仮説を検証するとしているものが多いように見受けられます。 しかし、これまでに当ブログで言及してきたように、一つの例をもって一般化することはできません。 また、目視での比較では規準が曖昧です。
そこで、パッケージの印刷の違いでエンゼルの当たりが識別できるのかを、 識別モデルを用いて検証して見たいと思います。
ですが今回は、問題設定と前処理部分の説明になります。
現段階では、まだまだパッケージ画像が集まっていないため、
実際に識別モデルを構築するまでには至っていません。
今後、ある程度データが集まったら分析を開始する予定です。
問題設定
仮説
エンゼルが入っているパッケージと入っていないパッケージでは、 印刷のズレ、ノイズ、色の違い文字の太さの違いなどの違いがあると仮定します。
目的は、この仮説の検証です。
データ取得環境
上記の仮説を検証するために、 チョコボールのパッケージ画像を用意します。
撮影位置や照明環境を統一するために、 パケージを展開して、スキャナで画像ファイルを作成します。
スキャナは、以下の機種を利用します。 2年位前にビックカメラで買いました。
brother インクジェットプリンター複合機 PRIVIO DCP-J562N 両面印刷
- 出版社/メーカー: ブラザー工業
- 発売日: 2015/10/21
- メディア: Personal Computers
- この商品を含むブログ (1件) を見る
データ例
上記環境で収得した画像データは以下のようなものです。 サイズはA4サイズで、2512x3484pixelsです。
アプローチ
上記のパッケージ画像をトリミングするなどの前処理を行い、 Angel有無の確信度を出力する識別モデルを構築します(下図)。
識別モデルの構成は今後設計していきますが、 数層のConvolutional Neural Network(CNN)から初めて見ようと思います。 最初はベーシックなモデルからスタートしてみるってことですね。
前処理
前処理は、モデルの構造やデータ数に応じて設計していく必要があります。
今回のデータは、パッケージを展開してスキャナで取り込みます。 そのためパッケージを展開する際に、糊付け部分が汚くなってしまいます(下図Aの破線部分)。 また、スキャナを利用して手動で画像を取り込むので、どうしても傾いたり位置がずれたりします。
エンゼル有無を示す印刷のズレはあまり大きく無いと予想されます。 対して、上図Aのように画像毎に差異がはっきり出てくるような箇所があると、 本来見たい印刷の差異ではなく、このようなはっきりした差に過適応してしまうことが予想されます。
そこで、特定の部分だけをトリミングした画像(下図のような)を利用します。 今回は、画像を並行になるように回転し、上図中のB点を原点に一定の大きさを切り出すという処理を行いました。
エンゼルの出現率が多くないと予想されるので、 Augumentationなども必要ではないかと思いますが、 それらは具体的にモデルを設計する段で検討します。
前処理コード
前処理なので、汎用的ではないですが、一応参考までに前処理用のコードをあげておきます。 誰かの参考になれば幸いです。
ざっくりと解説を示します。
画像のトリミングをするために、
左と上の辺を見つけるために、茶色の領域を検出します。
そこで、2番めのセルで、特定の色の領域を示すフィルタ(ROI)を作成する関数を定義しています。
色の指定は、RGBでの指定よりもHSV色空間で指定するとわかりやすいかなと考えたのですが、
逆にわかりにくくなったかもしれません。
3番めのセルでは、 上記のROIでの色領域の境を検出するための関数を定義しています。 単純に1ピクセルでも反応するようにしてしまうと、ノイズを拾ってしまう可能性があるので、 n_filter個のピクセルが連続で反応する位置を境として検出します。
画像を取り込み、色フィルタをかけた様子が、5番目のセルに表示されています。 茶色が見えにくくなっていますが。。。
6番目から9番目のセルで回転補正しています。 ここでは、簡単のために、パッケージ上部の辺の一部が平行になるように補正しています。 茶色部分の座標を取得し(セル7)、 取得した座標を単回帰して傾きを検出しています(セル8)。 OpenCVのハフ変換で直線の検出ができるかと考え、試してみたのですが、 さっぱりうまくいかなかったので、このようなめんどくさい手法をとっています。
残りの部分で、パッケージの表に出ている部分(上の面と底の面を除く)だけを切り抜きます。 大きさが一定だと信じて、規定量を切り抜くように書いていますが、 もっとうまい方法を思いついた方いましたら教えてください。
前処理後の画像例
前処理後の画像は以下のようになります。
だいたい想定通りに切り出せていますね。
ちなみに、以下の4枚の画像には銀のエンゼルが出たパッケージが2枚あります。
どれかわかりますか?
答えは、BとCです。
まとめ
エンゼルの有無がパッケージの印刷のズレで検出できるのかを検証するためにデータを取り始めました。 まだ始まったばかりなのですが、ある程度データが集まったら識別モデルを試行してみようと思います。
今回の記事だけでは面白みは無いと思いますが、 チョコボールの永遠の課題に取り組み始めたので今後の展開をご期待いただけたらと思います。
また、データ収集手伝ってくれるよという奇特な方がいらっしゃったら、連絡いただけたらすごく嬉しいです。
広告
Amazonの欲しいものリスト作ってみました。
チョコボールのカンパ募集中です。
チョコボールをカンパする
- 出版社/メーカー: 森永製菓
- 発売日: 2016/03/01
- メディア: 食品&飲料
- この商品を含むブログを見る
SIMERST 改良版 携帯タイプはかり ポケットデジタルスケール(秤) 0.001g-100g精密 業務用(プロ用) デジタルスケール 電子天秤
- 出版社/メーカー: Simerst
- メディア:
- この商品を含むブログを見る