Image Searchを使ってみる#3 コンソールからのテスト編

今回は実際に画像を検索するテストを行います。 コンソールの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)として以下の通り仕様が公開されています。

名前データタイプ説明
SuccessBooleanリクエストが成功したかどうか。
RequestIdStringリクエストの ID。
Codeintエラーコード。コードが 0 の場合、リクエストは成功です。コードが 0 でない場合、リクエストは失敗です。
MessageStringエラー情報。
HeadMap検索結果の説明。
DocsReturnint返された検索結果の数。
DocsFoundint指定された画像と一致する、インスタンス上の画像の数。
PicInfoMap画像カットアウト情報
CategoryString画像が属するカテゴリー。
RegionString左上座標 (x1, y1) と右下座標 (x2, y2) で決まる矩形領域。
AllCategoryMapシステムでサポートされているカテゴリー。
NameStringカテゴリー名。
IdStringカテゴリー ID。
AuctionsMap返品されたプロダクトすべてに関する情報。
CustContentStringカスタムプロダクト情報
PicNameString画像名。
CatIdString画像カテゴリー ID。
ProductIdStringプロダクト ID。
SortExprValuesStringシーケンス番号。

Image Searchの動きとして、API経由で画像を検索すると、ヒットした画像に関する情報の応答を確認出来ました。

なお、画像検索における評価スコアの考え方は以下の記事をご確認ください。

2.缶コーヒーのテスト

次は缶コーヒーを使って検索のテストを行います。

Image Searchにインポートしている21の画像のうち6つは缶コーヒーです。基本”BLACK”を買ってきました。

No.12を検索キーとした結果

No.12のコーヒーをキーに検索します。 

応答結果について、順位とsoftExprValuesの1番目の値を表にしました。(5位までの結果を記載)

Search RankitemIdsortExprValuesの1番目の値
1125.37633353624177e+24
2134.25297927856445
3194.11212825775146
4164.00491619110107
5143.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 RankitemIdsortExprValuesの1番目の値
1135.37633353624177e+24
214108.648193359375
31625.9466304779053
41723.2223033905029
5155.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 RankitemIdsortExprValuesの1番目の値
165.37633353624177e+24
23437.998474121094;101
347.05062103271484
475.89424085617065
595.10314464569092

以下画像の同じメーカの姉妹製品が2位となりました。 スコアも約438.0と2桁分、1位に近いというImage Searchの判断のようです。 色目も違いますし、製品名も異なるので似てはいるけど別の商品という判断がされているようです。

3位 人間から見ると色目的に似ていますが、スコアは1桁の約7.1点と別の製品と判断されています。

3. まとめ

とりあえず使ってみての感想です。

  • 似ているものを抽出するという意味では十分に機能している
  • まだまだ試行錯誤が必要(角度、色バランス、背景削除、サンプル数追加などに応じてどのように検索結果が変わるのか) 
  • ”softExprValues”のスコアの判断は閾値の設定を別途行う必要がありそう
    • 今回のテストから、検索キーの画像と一致する場合は約5e+24、異なる製品となると1桁から一番良くて3桁台のスコア
    • 検索結果を表示する際に、閾値を超えているものだけを抽出し順位を表示したり、類似度を数値化し合わせて表示するなど