1枚の画像から複数情報を読み取りカテゴライズできるかどうか調べても出てこなかったので質問しました。ご回答よろしくお願い致します。
面白そうなので回答します。やってないのでただの思考実験です。
「調べても出てこなかった」原因の一つは、「課題の認識粒度がでかすぎた」があると思います。下にかみ砕いた
課題を書きます。個々の課題を解決できうる技術はそろっているのですが、それをまとめて解こうとする技術はどこにもない(あっても公開されていない、便利なので誰も公開しない――たぶん営利企業がすること)と思います。
1枚の画像から複数情報を読み取りカテゴライズできるか
多分ですが、質問のいとは「リンゴ5玉500円の写っている画像で「りんご」「5玉」「500円」という出力をするニューラルネットワークが欲しい」、というものと思います。「途方もない数のPOPデータをかき集めて、出力層の出力数をそれらの数だけ用意すればできる」と思います。
が、でかい課題のままニューラルネットワークにつっこんでも、でかい課題を細かく分解してほしい形にしてくれるほど今のニューラルネットワークはまだ賢くないです。これが根底にあり、下記のような形の回答となりました。
POPには、以下の3つがあると思います。
- 商品名と値段、(あれば説明)
- 枠
- 商品の写真
#1
日本語用OCRは手書きで認識できるくらいですので、いろいろなフォントも学習させれば使えるレベルになりそうです。優秀なOCRのようで、塊ごとに認識して出力してくれるので使いやすいと思います。
次に、この認識した塊の文字列が何を指すか判別がいります。「りんご」「5玉」「500円」という文字列に価値を持たせる必要があるためです。人間であれば文字列の価値がわかりますが、ここまでだとプログラム的には「○○という文字列があるのは分かる(それの価値は知らん!)」というところで止まっているためです。これをする処理が、Word2Vecと呼ばれる処理です。「○○と文字列」を「x,y,z」みたいな座標データ(行列)に変換します。
#2
先の#1で「りんご」「5玉」「500円」の画像上の距離の近さで「どこまでがある商品の説明」か大体は判別できると思われるためです。これで処理できない場合のオプションが枠の認識です。OpenCVで探せばいくらでも出てくると思います。が、広告にもいろいろな表示があるのでもっとロバスト性の高い方法が好ましいとも思います。
※深層学習でやるなら、インスタンスセグメンテーションでしょうか。「1つの商品の説明がある場所を認識する」
処理をかませて、そこに対して#1をするのもありっぽいですね。
#3
商品の写真の認識自体は完全にオプションです。「5玉」「500円」の説明があっても「りんご」の説明がない場合の救済処置です。#2のインスタンスセグメンテーションをして、#1のW2Vをして、それでも分からないときに写真から何なのかを判別します。普通のImagenetの画像認識をそのままぶっこめば対応できると思います。
#4
説明するまでもないですがこれらの結果を「インスタンス」毎にlistに格納してCSVに吐き出すだけです。
#1-3はそれなりにゴツい作業が必要になります。手間を考えるとオンラインでPDFのチラシをDLして文字データから直接認識させるだとか、スーパーマーケットと提携して元からCSVの状態でデータをもらうとかしたほうが商売ベースに乗っけられそうです。