アリババAIイメージサーチでオリジナル画像検索エンジンを作ろう!

こんにちは!SBクラウドソリューションアーキテクトLeoです。ついにAI/人工知能に関するプロダクトがアリババクラウドにてリリースされました。

その名も「Image Search(イメージサーチ)」です!簡単に言えばタイトルの通り、オリジナルな画像検索を皆さんのWebサイトやその他アプリケーションの中へ簡単に実装することができるようになります。今回はその触りをご紹介していこうと思います。

 

Image Search(イメージサーチ)で何ができる?

イメージサーチを活用したECサイトを展開した場合を例にお話しすると、ユーザーは欲しいと思う商品の画像を送信することでドンピシャに同じ商品のみならず複数の似たようなデザインの商品までを検索結果として受け取ることができるようになります。

 

商品の検索だけでなく、画像全体のデザイン・テーマ性で似ているかどうかという判断をしてくれる機能もご提供しています。

商品画像検索:ECサイト等での活用に最適化させたサービス。検索元の画像と類似の”商品画像”を探すことが可能。

一般画像検索:写真共有を始め(商品検索以外)とした幅広い分野で活用できるサービす。検索元の画像と類似の主題・要素を持つ画像を探すことが可能。

 

Image Search(イメージサーチ)をどうやったら使える?

イメージサーチを使うために必要なことは2つです。

1.イメージサーチに検索対象の画像を覚えさせる

2.イメージサーチのAPIを叩けるようにする

 

では早速イメージサーチに画像達を覚えさせていきましょう。覚えさせ方も実は2種類あります。

1. OSS(Alibaba Cloudのストレージサービス)連携:Alibaba Cloudのオブジェクトストレージサービスに画像群を配置。イメージサーチインスタンスと連携させれば全て一度にアップロード可能。*ImageSearchと同じリージョンを使ってください

2. API連携:APIを活用して一枚一枚アップロードしていくことも可能。OSS連携した後の運用で画像を追加する際に使うのが吉か?

今回はOSSと連携して一気に覚えさせていきます。OSSは自分のバケットを作成すればGUIベースでどんどん画像をアップできます。

ただ画像に加えてもう1つ、これも必ずアップしてください。それぞれの画像がどんな商品カテゴリーなのかを定義するメタファイルです。(ファイル名:increment.meta)

{"operator":"ADD","item_id":"1001", "cat_id":8, "cust_content":"k1:v1,k2:v2,k3:v3", "pic_list":["bottle01.jpeg"]}
{"operator":"ADD","item_id":"1002", "cat_id":8, "cust_content":"k1:v1,k2:v2,k3:v3", "pic_list":["bottle02.jpeg"]}
{"operator":"ADD","item_id":"1003", "cat_id":8, "cust_content":"k1:v1,k2:v2,k3:v3", "pic_list":["bottle03.jpeg"]}
{"operator":"ADD","item_id":"1004", "cat_id":8, "cust_content":"k1:v1,k2:v2,k3:v3", "pic_list":["bottle04.jpeg"]}
{"operator":"ADD","item_id":"1005", "cat_id":8, "cust_content":"k1:v1,k2:v2,k3:v3", "pic_list":["bottle05.jpeg"]}

上記はサンプルですが、重要なのなcat_idの部分ですね。TaoBao(タオバオ)の商品カテゴリーが元にはなっていますが、覚えさせたい画像に一番近いものを記述してください。

 

cust_contentでは任意に独自のjsonを仕込んで置くことができます。検索結果の画像によってアプリ側の処理を変化させる等々にぜひ使ってください。

 

次にロール/ポリシーの設定をしないといけないのですが、ブログで説明すると長くなってしまうので、こちらでチェックしてください!

 

ロールが作成できたら、購入したイメージサーチの固有ID、画像群を溜め込んだOSSの場所を記入して実行するだけです!

 

いよいよ検索してみる

お待たせしました。いよいよ検索の時間です。

今回はテスト的にCLIから実施してみましょう。APIの利用については各種言語でSDKが用意されていますので、ダウンロードして使ってみてください。

Java:SDKダウンロード

PHP:SDKダウンロード

ここではPHPでご紹介します。手取り早く検索を試すのであれば、SDK内のSearchItemSample.phpを編集しましょう。

chdir(dirname(__FILE__));
    require_once "../../../aliyun-php-sdk-core/Config.php";

    $product = "ImageSearch";
    $region = "要変更"; // 实例的地域信息,如: cn-shanghai(华东2), ap-southeast-1(亚太东南1)
    $accessKeyId = "要変更"; // 获取地址: https://ak-console.aliyun.com
    $accessKeySecret = "要変更";
    $instanceName = "要変更"; // 购买的图像搜索实例名称,如: imagesearchtest
    $domain = "imagesearch.".$region.".aliyuncs.com";

    $profile = DefaultProfile::getProfile($region, $accessKeyId, $accessKeySecret);
    DefaultProfile::addEndPoint($region, $region, $product, $domain);
    $client = new DefaultAcsClient($profile);

    use ImageSearch\Request\V20180120\SearchItemRequest;

    $req = new SearchItemRequest();

    $req->setinstanceName($instanceName);
    $req->setNum(20);
    $req->setStart(0);

    // Read Image File
    $sampleFileName = "要変更(例 ./test001.jpg)";
    $content = file_get_contents($sampleFileName);

    fclose($handle);

    $req->setSearchPicture($content);
    if (!$req->buildPostContent()) {
        return ;
    }

    try {
        $response = $client->getAcsResponse($req);
        print_r($response);
    } catch(ServerException $e) {
        print "Error: " . $e->getErrorCode() . " Message: " . $e->getMessage() . "\n";
    } catch(ClientException $e) {
        print "Error: " . $e->getErrorCode() . " Message: " . $e->getMessage() . "\n";
    }

region:購入したイメージサーチのリージョンを指定してくださ

accsessKeyId:取得していない方はこちらを参照ください

accessKeySecret:accessKeyと同様です

inatanceName:イメージサーチインスタンス購入時に設定した名前です

sampleFileName:検索したい画像を指定します(例:ローカルのパス, 画像URL)

以上まで設定できたら、ターミナル等のCLIから使ってみましょう。

 

php SearchItemSample.php 

meta:s,0,1#n,1,3#pic_list,3,15#c2VhcmNoUGlj,15,4063stdClass Object
(
    [Auctions] => stdClass Object
        (
            [Auction] => Array
                (
                    [0] => stdClass Object
                        (
                            [CustContent] => k1:v1,k2:v2,k3:v3
                            [ItemId] => 1001
                            [PicName] => bottle01.jpeg
                            [CatId] => 8
                            [SortExprValues] => 5.37633353624177e+24;0
                        )

                    [1] => stdClass Object
                        (
                            [CustContent] => k1:v1,k2:v2,k3:v3
                            [ItemId] => 1002
                            [PicName] => bottle02.jpeg
                            [CatId] => 8
                            [SortExprValues] => 4.041748046875;197
                        )

                    [2] => stdClass Object
                        (
                            [CustContent] => k1:v1,k2:v2,k3:v3
                            [ItemId] => 1011
                            [PicName] => bottle11.jpeg
                            [CatId] => 8
                            [SortExprValues] => 3.89881300926208;229
                        )

結果として上記のようなレスポンスが帰ってきました。

Acutionの中に、事前に覚えさせた画像が今回検索にかけた画像とどれだけ似ていたかがランキング形式で格納されています。参考になる数値としてはSortExprValuesになります。

この数値やCustContentなどでオリジナルの  jsonを仕込んでおけば、類似度が非常に高ければ直接商品詳細ページや購入画面に飛ばしてしまうといった流れが作れそうです。ECサイトに限らなくてもチャットボットの一機能として使えたり、頑張れば監視業務、店舗商品管理にも応用が効くかもしれませんね。

 

まとめ

画像検索エンジンを自作しようとすればかなり大変な作業になりますが、イメージサーチであればご覧いただいたように簡単にエンジンを作成することができます。操作感の観点でみると自然言語処理に強みのあるWから始まるAIサービスに近いなという印象を抱きました。

類似度評価の値についてどういう画像の覚えさせ方をすればどういう変化をするのかといったところは今後深掘りしていきたいところです。

ひとまず、独自のエンジンをこれほどサクサク作れるサービスもないと思うので是非ぜひ皆さんも触ってみてください。

この記事をシェアする