Image Searchを使いこなそう

こんちには。クラウドソリューションアーキテクトの安齋です。
この記事はalibabacloud Advent Calendar 2019 の19日目の記事です。

12/7(土)にAliEatersCode支部第3回でImage Searchのハンズオンを行いました。
Image Searchへの画像検索リクエスト時に、検索条件付与と画像範囲指定ができるのですが、その説明がもっと欲しかったという声をいただいたので、今回アドベントカレンダーの記事としてまとめます。
※SB Cloud様より一部資料をお借りしています。


目次

  1. Image Searchの概要
  2. 画像検索リクエストのパラメーター一覧
  3. SearchByNameパラメーターの使用例
  4. ProductIdとPicNameパラメーターのデータ構造例
  5. CategoryIdパラメーターの検証
  6. Regionパラメーターの使用例
  7. NumとStartパラメーターの使用例
  8. IntAttrとStrAttrによるFilterパラメーターの使用例

Image Searchの概要

Image Searchの概要はハンズオンの前説明で使用した資料をご覧ください。
後半はインフラエンジニア向けの内容もあります。


画像検索リクエストのパラメーター一覧

画像検索リクエストのパラメーターとして、以下を付与することができます。
Alibaba Cloud公式ドキュメントを元に、パラメーターの説明をしていきます。

パラメーター名説明
InstanceName String Image Searchのインスタンス名です。英数字の小文字を指定できます。
Type String 以下のいずれかの値を指定します。未指定の場合はSearchByPicが採用されます。

1. SearchByPic・・・画像を元に検索をします。ユーザーがアップロードした画像を元に検索をしたい場合などに使用します。

2. SearchByName・・・Image Searchに登録済みの画像のProductIdとPicNameを元に検索をします。自社商品間で類似商品をレコメンドしたい場合などに使用します。

SearchByNameの使用例はこちらをご覧ください。
PicContent String ※SearchByPic時のみ使用可能です。

Base64でエンコードした画像を指定します。画像は以下の条件を全て満たす必要があります。満たさない場合は503エラーが返ってきます。特に2と3を満たすために、ユーザーがアップロードした画像をリサイズしてからリクエストします。3を満たせれば2も同時に満たせる場合がほとんどです。

1. jpgもしくはpng形式
2. サイズは2MBまで
3. 幅高さの画像数はともに200px以上1024px以下
4. 回転情報は付与できない
ProductId String ※SearchByName時のみ使用可能です。

PicNameとセットで画像をユニークに識別させる値です。自社商品の商品IDを指定するとデータ構造がシンプルになります。
PicName String ※SearchByName時のみ使用可能です。

ProductIdとセットで画像をユニークに識別させる値です。ProductIdに商品IDを、PicNameに画像ファイル名を指定するとデータ構造がシンプルになります。

ProductIdとPicNameのデータ構造例はこちらをご覧ください。
CategoryId Integer ※商品画像検索モードの
SearchByPic時のみ使用可能です。

Image Searchが認識する画像のカテゴリを指定します。未指定の場合は自動で画像から検出した値が採用されます。採用された値はレスポンスから取得できます。画像の背景に検索したい物体以外が多数ある場合、指定することにより精度が向上します。

精度の検証結果はこちらをご覧ください。
Crop Boolean ※SearchByPic時のみ使用可能です。

画像範囲を指定した被写体認識検索をする(true)か否か(false)を指定します。未指定の場合はtrueが採用されます。falseの場合は画像全体で検索されます。
Region String ※SearchByPic時のみ使用可能です。

被写体検索をするための画像範囲を指定します。左上を原点としたx1,y1と、右下を原点としたx2,y2を、カンマ区切りで指定します。Cropの値がfalseの場合でも、Regionが指定されている場合は、Regionの値で検索されます。未指定の場合は自動で検出された画像範囲が採用されます。採用された値はレスポンスから取得できます。 ユーザーがアップロードした画像を、ユーザー自身がトリミングして検索する場合に使用します。

Regionの使用例はこちらをご覧ください。
Num Integer レスポンスで返される画像枚数を1~100の間で指定します。未指定の場合は10が採用されます。ユーザーに上位5位までの画像を表示したい場合などに使用します。画像枚数はレスポンスのDocsReturnとして取得できます。
Start Integer レスポンスで返される画像枚数の開始位置を0~499の間で指定します。未指定の場合は0が採用されます。Numが先に評価されます。

NumとStartの使用例はこちらをご覧ください。
Filter String 数値属性と文字列属性の検索条件を指定します。
論理演算子は AND OR が両属性において使用できます。() による優先度付けはできず、左から順に評価されます。論理演算子の数に制限はありません。

1. 数値属性・・・画像登録時にIntAttrとして整数を付与できます。商品である洋服のトップスをさらに細分化してカテゴライズしたい場合に使用できます。1=セーター、2=ニットなどです。
比較演算子は <, >, <=, >=, = が使用できます。

2. 文字列属性・・・画像登録時にStrAttrとして128バイトまでの文字列を付与できます。商品である洋服のトップスをブランド名でカテゴライズしたい場合に使用できます。比較演算子は =, != が使用できます。

両属性の使用例はこちらをご覧ください。

SearchByNameパラメーターの使用例

画像検索時にSearchByNameを指定することにより、登録済みの画像の類似画像を検索することができます。

使用例は以下の資料の26ページをご覧ください。


ProductIdとPicNameパラメーターのデータ構造例

ProductIdとPicNameのデータ構造例を以下に示します。

ProductId PicName 画像の説明
111main商品の正面画像
111right商品の右側面画像
111back商品の背面画像
111logo商品のロゴのアップ画像

同一商品に対して向きが異なる画像を複数枚登録すると、検索ヒット数が増加することにより、検索精度が向上します。
検索ヒット数は画像検索レスポンスのDocsFoundとして取得できます。
レスポンスには同一商品の複数枚の画像のProductIdとPicNameが返却されるため、ユーザーには一商品一画像の形式で表示させるように、ProductIdで画像を間引く処理などを入れることが望ましいです。

精度の検証結果は以下の資料の11~12ページをご覧ください。


CategoryIdパラメーターの検証

画像検索時にCategoryIdを指定することにより、検索精度が向上します。

精度の検証結果は以下の資料の23ページをご覧ください。

同様のことが画像登録時にも言えます。
画像の背景に登録したい物体以外が多数ある場合、CategoryIdを指定して登録することで、検索精度が向上します。

精度の検証結果は以下の資料の13~14ページをご覧ください。


Regionパラメーターの使用例

画像検索時にRegionを指定することにより、特定の物体のみを検索することができます。

使用例は以下の資料の22ページをご覧ください。


NumとStartパラメーターの使用例

画像検索時にNumとStartを指定することにより、レスポンスとして返される画像枚数を調節することができます。

使用例は以下の資料の25ページをご覧ください。


IntAttrとStrAttrによるFilterパラメーターの使用例

画像検索時にFilterにIntAttrとStrAttrを指定することにより、特定の属性のみを持つ画像を検索することができます。

使用例は 以下の資料の24ページをご覧ください。

両属性における論理演算子と比較演算子の使用例は以下をご覧ください。

IntAttr
Filter期待値結果
int_attr >= 1 AND int_attr <= 30 OR int_attr = 1241以上30以下の数値、もしくは124期待通り
int_attr >= 1 AND int_attr <= 30 AND int_attr = 1241以上30以下の数値、かつ1240件:期待通り
int_attr >= 1 OR int_attr = 124 AND int_attr <= 301以上の数値、もしくは124かつ30以下の数値1以上の数値:期待通り
StrAttr
Filter 期待値 結果
str_attr = “B” OR str_attr = “BA”BもしくはBAの文字列期待通り
str_attr = “B” AND str_attr = “BA”BかつBAの文字列0件:期待通り

画像登録時に付与したIntAttrとStrAttrは、画像検索レスポンスから取得できます。
これにより、画像検索結果をフィルタリングすることができます。

フィルタリング例は以下の資料の15ページをご覧ください。


まとめ

Image Searchは画像検索時のパラメーターが多数あります。
画像検索の精度をさらに高めたり、ユーザーに商品のカテゴライズに基づいた検索を提供したい場合は、 登録・検索時の画像範囲の指定と登録時のIntAttr・StrAttrの付与と検索時のFilterの付与の実施をお勧めします。
もちろん、上記を実施しなくても、Image Searchは十分な検索精度が出ます。
Image Searchの使い方には自由度があるので、まずは自社アプリに組み込み、ユーザーの反応を確認しながら、徐々にパラメーターを追加していく方法が可能です。