今回は実際に画像を検索するテストを行います。 コンソールのImage Search管理画面にあるテスト機能を利用します。
目次
1. コンソールからのテスト
Image Searchには以下の21個の画像をインポートしています。
コンソールからインスタンスをクリックします。
インスタンスの詳細画面でテストをクリックします。 この画面からテストを行うことが出来そうです。 なお、このテスト画面に関するマニュアルは見当たりません。 試してみましょう。
真ん中に検索キーとなる画像を指定(アップロードし)、”テストを開始”を実行します。 そうしますと”結果データ”が表示されます。
結果データの中身は以下の通りです。 マッチした画像の情報が順番に応答されています。
{ “data”: { “result”: { “auctions”: [ { “catId”: “8”, “custContent”: “k1:v1,k2:v2,k3:v3”, “itemId”: “16”, “picName”: “16.jpg”, “sortExprValues”: “5.37633353624177e+24;0” }, { “catId”: “8”, “custContent”: “k1:v1,k2:v2,k3:v3”, “itemId”: “15”, “picName”: “15.jpg”, “sortExprValues”: “85.3700790405273;176” }, { “catId”: “8”, “custContent”: “k1:v1,k2:v2,k3:v3”, “itemId”: “14”, “picName”: “14.jpg”, “sortExprValues”: “35.7254829406738;171” }, { “catId”: “8”, “custContent”: “k1:v1,k2:v2,k3:v3”, “itemId”: “13”, “picName”: “13.jpg”, “sortExprValues”: “25.9466323852539;175” }, { “catId”: “8”, “custContent”: “k1:v1,k2:v2,k3:v3”, “itemId”: “17”, “picName”: “17.jpg”, “sortExprValues”: “4.06835699081421;220” }, { “catId”: “8”, “custContent”: “k1:v1,k2:v2,k3:v3”, “itemId”: “12”, “picName”: “12.jpg”, “sortExprValues”: “4.00491619110107;225” }, { “catId”: “8”, “custContent”: “k1:v1,k2:v2,k3:v3”, “itemId”: “19”, “picName”: “19.jpg”, “sortExprValues”: “3.7469220161438;218” }, { “catId”: “8”, “custContent”: “k1:v1,k2:v2,k3:v3”, “itemId”: “18”, “picName”: “18.jpg”, “sortExprValues”: “3.5771472454071;225” }, { “catId”: “8”, “custContent”: “k1:v1,k2:v2,k3:v3”, “itemId”: “21”, “picName”: “21.jpg”, “sortExprValues”: “3.56994247436523;240” }, { “catId”: “8”, “custContent”: “k1:v1,k2:v2,k3:v3”, “itemId”: “3”, “picName”: “3.jpg”, “sortExprValues”: “3.37384438514709;201” } ], “code”: 0, “head”: { “docsFound”: 21, “docsReturn”: 10, “searchTime”: 183 }, “message”: “success”, “picInfo”: { “allCategory”: [ { “id”: “0”, “name”: “Tops” }, { “id”: “1”, “name”: “Dress” }, { “id”: “2”, “name”: “Bottoms” }, { “id”: “3”, “name”: “Bag” }, { “id”: “4”, “name”: “Shoes” }, { “id”: “5”, “name”: “Accessories” }, { “id”: “6”, “name”: “Snack” }, { “id”: “7”, “name”: “Makeup” }, { “id”: “8”, “name”: “Bottle” }, { “id”: “9”, “name”: “Furniture” }, { “id”: “20”, “name”: “Toy” }, { “id”: “21”, “name”: “Underwear” }, { “id”: “22”, “name”: “Digital device” }, { “id”: “88888888”, “name”: “Other” } ], “category”: “8”, “region”: “26,178,27,289” }, “requestId”: “8E22BB97-F36C-47C0-94D9-ECF4D9ED2C84”, “success”: true } }, “success”: true } |
公式サイトでは応答内容(BODY)として以下の通り仕様が公開されています。
名前 | データタイプ | 説明 |
---|---|---|
Success | Boolean | リクエストが成功したかどうか。 |
RequestId | String | リクエストの ID。 |
Code | int | エラーコード。コードが 0 の場合、リクエストは成功です。コードが 0 でない場合、リクエストは失敗です。 |
Message | String | エラー情報。 |
Head | Map | 検索結果の説明。 |
DocsReturn | int | 返された検索結果の数。 |
DocsFound | int | 指定された画像と一致する、インスタンス上の画像の数。 |
PicInfo | Map | 画像カットアウト情報 |
Category | String | 画像が属するカテゴリー。 |
Region | String | 左上座標 (x1, y1) と右下座標 (x2, y2) で決まる矩形領域。 |
AllCategory | Map | システムでサポートされているカテゴリー。 |
Name | String | カテゴリー名。 |
Id | String | カテゴリー ID。 |
Auctions | Map | 返品されたプロダクトすべてに関する情報。 |
CustContent | String | カスタムプロダクト情報 |
PicName | String | 画像名。 |
CatId | String | 画像カテゴリー ID。 |
ProductId | String | プロダクト ID。 |
SortExprValues | String | シーケンス番号。 |
Image Searchの動きとして、API経由で画像を検索すると、ヒットした画像に関する情報の応答を確認出来ました。
なお、画像検索における評価スコアの考え方は以下の記事をご確認ください。
2.缶コーヒーのテスト
次は缶コーヒーを使って検索のテストを行います。
Image Searchにインポートしている21の画像のうち6つは缶コーヒーです。基本”BLACK”を買ってきました。
No.12を検索キーとした結果
No.12のコーヒーをキーに検索します。
応答結果について、順位とsoftExprValuesの1番目の値を表にしました。(5位までの結果を記載)
Search Rank | itemId | sortExprValuesの1番目の値 |
1 | 12 | 5.37633353624177e+24 |
2 | 13 | 4.25297927856445 |
3 | 19 | 4.11212825775146 |
4 | 16 | 4.00491619110107 |
5 | 14 | 3.91119813919067 |
1位 インポートした画像と同じものを指定しているので順当な結果。
2位 順位は2位ですが、sortExprValuesの値は大きく差があります。 約4.3ですので1桁のスコアです。1位は約5.4e+24なので24桁の差があります。
3位 コーヒーではない製品が3位になっています。2位と同様、sortExprValuesの値は大きく差があります。 スコアは約4.1です。
No.13 を検索キーとした結果
No.13のコーヒーをキーに検索します。
応答結果について、順位とsoftExprValuesの1番目の値を表にしました。(5位までの結果を記載)
Search Rank | itemId | sortExprValuesの1番目の値 |
1 | 13 | 5.37633353624177e+24 |
2 | 14 | 108.648193359375 |
3 | 16 | 25.9466304779053 |
4 | 17 | 23.2223033905029 |
5 | 15 | 5.50158643722534 |
No.12をキーとした時と同様に、1位と2位以下ではsoftExprValuesに大きな差があります。
ちなみに2位の画像は以下になります。スコアは109.0です。 ひとつ前のテストの1位と2位よりは桁1つ分の似ているということになるのでしょうが、それでも23桁分の差があります。 Image Searchのアルゴリズムからすると大きな違いがあるとということなのでしょう。
No.14を検索キーとした結果
No.14のコーヒーをキーに検索します。
No.14では1件もヒットしませんでした(docsFound:0)。 検索キーはインポートした画像と同じ画像を指定しています。もちろん、Image Search独自のアルゴリズムで特徴量を抽出しているはずなので、同じ画像が必ずヒットするとは限りません。 そもそも0件なので、何か別の問題の可能性が高いと考えます。こちらは別途調べることにします。
この段階である考えが頭に浮かびました。 そもそも”缶”はカテゴリーの非対象なのではないか? と。
Image Searchが対応しているのは以下のカテゴリーです。 今回、缶コーヒーはカテゴリーIDとして”8″を指定しました。 ”8″はボトルドリンクで缶とは確かに違います。
カテゴリー ID | 説明 |
---|---|
0 | トップス |
1 | ドレス |
2 | ボトムズ |
3 | バッグ |
4 | シューズ |
5 | アクセサリー |
6 | スナック |
7 | メイクアップ |
8 | ボトルドリンク |
9 | 家具 |
20 | おもちゃ |
21 | 下着 |
22 | デジタル機器 |
88888888 | その他 |
ということでボトルドリンクでテストを続けることにします。
3. ペットボトルのお茶のテスト
以下の11種のペットボトルをサンプルにします。
No.6を検索キーとした結果
No.6のお茶をキーにします。
応答結果について、順位とsoftExprValuesの1番目の値を表にしました。5位までの結果を記載します。
Search Rank | itemId | sortExprValuesの1番目の値 |
1 | 6 | 5.37633353624177e+24 |
2 | 3 | 437.998474121094;101 |
3 | 4 | 7.05062103271484 |
4 | 7 | 5.89424085617065 |
5 | 9 | 5.10314464569092 |
以下画像の同じメーカの姉妹製品が2位となりました。 スコアも約438.0と2桁分、1位に近いというImage Searchの判断のようです。 色目も違いますし、製品名も異なるので似てはいるけど別の商品という判断がされているようです。
3位 人間から見ると色目的に似ていますが、スコアは1桁の約7.1点と別の製品と判断されています。
3. まとめ
とりあえず使ってみての感想です。
- 似ているものを抽出するという意味では十分に機能している
- まだまだ試行錯誤が必要(角度、色バランス、背景削除、サンプル数追加などに応じてどのように検索結果が変わるのか)
- ”softExprValues”のスコアの判断は閾値の設定を別途行う必要がありそう
- 今回のテストから、検索キーの画像と一致する場合は約5e+24、異なる製品となると1桁から一番良くて3桁台のスコア
- 検索結果を表示する際に、閾値を超えているものだけを抽出し順位を表示したり、類似度を数値化し合わせて表示するなど