ViSenzeとAlgoliaでビジュアル検索

Algoliaのソリューションガイドページに画像検索に関する章がありますが、そこにはViSenze(ヴィセンズ)を使ったImage Classification and Taggingのサンプルが載っていて、日本語でも ユニクロ&楽天も取り入れた注目ベンチャー「ViSENZE」の画像解析技術画像認識で世界はつながる。シンガポールのAI企業「ViSenze」が見据える未来 という記事があったりして、ポピュラーなプラットフォームなのかもしれないと思い、ViSenzeを使って抽出した画像の情報を使ってAlgoliaで検索を行うデモを作ってみたいと思います。


画像の分類とタグ付けとAlgoliaへのIndexing

流れとしては 1. ViSenzeを使って画像分類を行い、2. その情報をAlgoliaにIndexingします。

ViSenzeで画像をタグ付け

今回は以下3つのTシャツの画像を作成して、ViSenzeのAPIでタグ付けのリクエストをしてみました。

今回はcurlコマンドでサクっと👇こんな感じで叩きました。

curl http://virecognition.visenze.com/v1/image/recognize \
    -F url=画像のURL \
    -F tag_group=fashion_attributes \
    -u access_key:secret_key

そうすると👇こんなレスポンスが返ってくるので、

{
    "error": [],
    "status": "OK",
    "method": "image/recognize",
    "reqid": "1138557339939516416",
    "result": [
        {
            "objects": [
                {
                    "tags": [
                        {
                            "tag": "sleeve_length:short",
                            "score": 0.9999591112136841
                        },
                        {
                            "tag": "category:apparel",
                            "score": 0.9995850324630737
                        },
                        {
                            "tag": "closure_type:pullover",
                            "score": 0.9985271692276001
                        },
                        {
                            "tag": "apparel:upper_body_garment",
                            "score": 0.9943287968635559
                        },
                        {
                            "tag": "upper_body_garment:t_shirt",
                            "score": 0.9514302611351013
                        },
                        {
                            "tag": "neckline:round_neck",
                            "score": 0.8796393275260925
                        },
                        {
                            "tag": "product_pattern:text",
                            "score": 0.852317750453949
                        },
                        {
                            "tag": "upper_body_length:regular",
                            "score": 0.7817147970199585
                        },
                        {
                            "tag": "sleeve_style:flared",
                            "score": 0.7528149485588074
                        },
                        {
                            "tag": "product_color:blue",
                            "score": 0.7502201199531555
                        }
                    ],
                    "box": [
                        43,
                        110,
                        2882,
                        4028
                    ]
                }
            ],
            "tag_group": "fashion_attributes"
        }
    ]
}

今回は抽出したタグを全て👇のようにAlgoliaにインデクシングすることにしました。

[
  {
    "url":"https://shinodogg.com/wp-content/uploads/2021/03/12336_img_604ee004812b4_abnb.jpg",
    "sleeve_length":"short",
    "category":"apparel",
    "closure_type":"pullover",
    "apparel":"upper_body_garment",
    "upper_body_garment":"t_shirt",
    "neckline":"round_neck",
    "product_pattern":"text",
    "upper_body_length":"regular",
    "sleeve_style":"flared",
    "product_color":"blue"
  },
  {
    "url":"https://shinodogg.com/wp-content/uploads/2021/03/12336_img_604ee00daf494_algolia_blue.jpg",
    "sleeve_length":"short",
    "category":"apparel",
    "closure_type":"pullover",
    "apparel":"upper_body_garment",
    "product_color":"blue",
    "upper_body_garment":"t_shirt",
    "product_pattern":"text",
    "sleeve_style":"straight",
    "neckline":"round_neck",
    "upper_body_length":"regular"
  },
  {
    "url":"https://shinodogg.com/wp-content/uploads/2021/03/12336_img_604ee016d7b48_algolia_gray.jpg",
    "sleeve_length":"short",
    "closure_type":"pullover",
    "category":"apparel",
    "product_color":"grey",
    "apparel":"upper_body_garment",
    "product_pattern":"text",
    "upper_body_garment":"t_shirt",
    "neckline":"round_neck",
    "upper_body_length":"regular",
    "sleeve_style":"straight"
  }
]

Algoliaにインデクシングされた様子が👇こちら

例えば、これだけでも grey で検索をすることもできるようになりました。こういった作業を自動化できるだけでも大量の商材を扱うビジネスをされている方には重宝するのではないかと思います。

画像から抽出したタグ情報で検索

では、今度は、別に写真を撮ったグレイのTシャツで検索ができるか試してみましょう。まずはAlgoliaのインデックスの設定で product_color と sleeve_length と upper_body_garment をfacetの属性に追加していきます。

本来であれば、スマホアプリで写真を撮ったりフォトライブラリにある画像を選択して、検索側もViSenzeにリクエストを投げるべきですが、今回は便宜上、事前に同じTシャツだけど別の角度から撮ったTシャツの写真を、インデクシングした時と同じ用に以下のような形でcurlであらかじめタグ情報を取得します。

そして、検索リクエストをする際に、上記で抽出できた👇の情報を元に(スコアのフィルタリングはしてもよかったかもしれませんね、、)

  • {“tag”:”sleeve_length:short”,”score”:0.9985986351966858}
  • {“tag”:”product_color:grey”,”score”:0.9647703170776367}
  • {“tag”:”upper_body_garment:t_shirt”,”score”:0.553947925567627}

Facet Filterに設定して検索をすると、

👇のように目的のTシャツがヒットしました。

ということで、テキストで検索をすることもできるし、画像で検索(実際は画像から抽出したタグ情報を元にした検索)をすることもできました。そして、厳密に絞り込むのではなくて、マッチしたものをブーストさせるような挙動にしたい場合は Optional Filters が便利で、例えば、クエリパラメーターが何もない場合は 1. AirBnb の青いTシャツ -> 2. Algoliaの青いTシャツ -> 3. AlgoliaのグレーのTシャツ で並んでいたところが、

ViSenzeのタグから抽出した情報を optionalFilters に設定して検索を行うことで、

グレーのTシャツが一番上にくるようになりました。

ということで、AlgoliaとしてはViSenzeから取得したタグ情報のみを扱う形になるので、もちろん画像検索とテキスト検索を併用することができますし、Custom AttributesやPersonalizationといったAlgoliaならではの Relevance を活用していくことができます。


以前 AI-poweredなサイト検索とは何か? にも書きましたが、ビジュアル検索はそのディマンドがあるにも関わらず、実際に導入している企業はまだ少ないということで、こういったViSenzeのようなソリューションとAlgoliaを組み合わせてお使いいただくのも、1つの選択肢になるのではないかと思い、こちらの記事を執筆させていただきました。

何かご質問や気になることなどございましたらTwitterの #AlgoliaJP までお寄せいただければ幸いです。

コメント

タイトルとURLをコピーしました