PHP SDKを利用し、写真の中の商品のカテゴリーを判別するサイトを作成しました。
目次
カテゴリー判別サイトの利用イメージ
今回作成したカテゴリー判別サイトは以下の感じです。 20年前のようなサイトデザインですが現時点では手抜きしています。

写真ファイルを選択し、アップロードをクリックします。

Image Searchから応答されたBODY情報をHTMLのTABLEタグに吐き出します。 カテゴリーに”Bottle”と表示されます。 これは、検索キーの写真の中にある商品をImage Searchが”Bottle”として識別したことを示しています。

カテゴリーはBODYからは数字”8″が返されるので別途”Bottle”に変換しています。 また、スコアも”NN;NN”と応答されているのを一番目の値だけを取り出しています。
また、次のバージョンアップではImage Searchが写真の中で商品として認識した部分を切り出して表示する機能の追加を考えています。そのために座標情報も取り出しています。
色々なものを判別してみる
前回Taobaoで試した写真をサンプルにカテゴリー判別を行います。
時計は”Other”となりました。 Taobaoでは時計として認識されたのですが。

今度はラジコンのおもちゃです。 こちらはTabao同様に”Toy”として認識されました。

とりあえず、画像のカテゴリー判別としてはある程度機能していることは確認できました。
ソースコードについて
プログラミング素人がガチャガチャと作ったのでとても汚いコードとなっています。きれいにしてから公開しようと思います。
とは言いつつもポイントのみご紹介します。 プログラムには大きく以下の機能を持たせています。
- HTMLのFormから画像を読み込み、Webサーバ上に一時保存
- Image SearchにインスタンスIDやAccessKeyを指定し接続
- Image Searchに画像を読み込ませる
- Image Searchから応答されたstdClass Objectについて必要な情報を取り出し、HTMLのTable内に表示
- スコア、カテゴリー、座標について取得した値を分解(explode)
基本的には以下の記事で紹介したPHP SDKにてSampleとして提供されている” SearchItemSample.php ”をベースに画像読み込みとHTML出力を追加しています。
Image Searchから返されるBODY情報は stdClass Objectで返されます。
以下はBODY情報の冒頭部分で、1番目にヒットした画像情報です。
( [Auctions] => stdClass Object ( [Auction] => Array ( [0] => stdClass Object ( [CustContent] => k1:v1,k2:v2,k3:v3 [ItemId] => 1 [PicName] => 1.jpg [CatId] => 8 [SortExprValues] => 5.37633353624177e+24;0 ) ~省略~ |
この中にある ”SortExprValues” の ”5.37633353624177e+24;0” の ”5.37633353624177e+24” を取り出す場合は以下のように処理しています。
//Image Searchから応答されたBODY情報を格納$response = $client->getAcsResponse($req); //配列に格納 $obj_items1 = $response->Auctions->Auction; //explodeを使用し区切り文字”;”で最初の値を取り出し $score = explode(“;”, $obj_items1[0]->SortExprValues); |
今日のところはここまでとします。 次はImage Searchからヒットした画像を一覧表示するサイトを構築します。