Image Searchを使った商品の類似検索を試す【準備編】

# Image Searchとは

Alibaba CloudにはImage Searchという画像を検索するサービスがあります。
Image Searchには2種類の機能があります。

1. 商品画像検索
2. 一般画像検索

今回は、商品画像検索の機能を使ってみます。商品画像検索は、オンライン商品検索のユーザーエクスペリエンスを向上させるために開発されたものです。ECサイトなどに組み込んで使う事を想定しています。

Image Search の概要については、下記リンクを参照してみてください。
Image Search イメージサーチ 画像検索サービス | Alibaba Cloud（アリババクラウド） 
https://www.alibabacloud.com/ja/product/imagesearch

Image Searchのドキュメントはこちらから。　↓
Image Search の概要 | Alibaba Cloud ドキュメントセンター 
https://www.alibabacloud.com/help/ja/product/66413.htm

クイックスタートを参考に、Image Searchを動かしてみましょう。

## Image Searchインスタンスの作成
それではImage Searchのサービスを立ち上げます。
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/49ccd3f8-adb6-69cb-28dd-069b783ff83e.png)
![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/412b9be2-c083-926f-ee1a-7bc337e06e46.png)
![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/3f0079d1-5e33-87fd-12de-0567f8a0bcda.png)
![04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/e198f205-f8b4-dd82-15fc-f620026487ee.png)
![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/1d126d4f-cbd3-b9e8-bfcd-13844902d64f.png)
![06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/ae1bba16-97d4-5891-097c-404a155ac686.png)
![07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/cbfc0839-e185-cdab-8ce6-b9b23dfb7f3c.png)
![08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/2455164d-fa12-b7b8-a4c7-ded178af5509.png)
![09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/349fa221-291f-cf3c-5ace-77f985e53dc1.png)
![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/4b59d676-ab6a-5a03-c97c-a9112d534d15.png)
![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/fadc6400-622a-1225-55bf-9a9a687e728f.png)

以上でImage Searchの設定は完了です。


## OSS（Object Storage Service） の有効化

今回は、OSSからのインポート機能を使って画像を登録します。

![12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/bd6d16f4-ac68-4ca7-4d7b-4488a53a066b.png)
![13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/8ac89f2c-e692-7514-35af-40d55d821093.png)
![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/7aa30106-2fcf-fb4a-d53e-2442e3049bc2.png)
![15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/667ef5ca-2037-1134-fd5b-2779180885cc.png)
![16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/c22ed1f8-d51f-08f3-fcd3-ab6d1209f278.png)
![17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/80fda3fa-37b5-ef09-cb5a-48c6129113d4.png)
![18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/8e0debf7-1c5d-ac96-88e3-fb7a183f1e1e.png)

以上でOSSの設定は完了です。

### 画像ファイルと設定ファイルの準備
Image Searchに登録できる画像には以下の制約があります。今回は事前に制約に収まるように画像を準備してください。

1. ファイルの種類はJPEGまたはPNG
2. アップロードする各画像のサイズが 2 MB 以下であること
3. 各画像の高さと幅は、どちらも 200 ピクセルから 1024 ピクセルの範囲であること

![20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/3e0f59fe-853e-fb31-b5aa-0fa92aa53d62.png)

#### increment.metaを作成する

> 指定したパスに increment.meta ファイルが作成されていることを確認してください。このファイルには、インポートタスクの情報が保存されます。ファイル形式は次の要件を満たしている必要があります。
> 各行は、1 つの画像のみに対応すること。
> すべての画像情報は、JSON 形式でエンコードされていること (後述)。

| 名前  | タイプ | 説明 | 備考 |
|:-:|:-:|:-:|:--------------:|
| operator  | String  | 操作  |  このフィールドには、画像に対して実行される操作を指定します。ADD は、新しい画像を追加します。DELETE は、画像を削除します。 |
| item_id  | String  | 一意の商品/画像識別子  | 商品画像検索の場合、このフィールドには、商品 ID を指定します。一般画像検索の場合、このフィールドには、画像名を指定します。  |
| cat_id  | Integer| カテゴリ情報  | 商品画像検索の場合、このフィールドは必須ではありません。このフィールドには、画像が属するカテゴリを指定します。詳細は、「カテゴリ一覧」をご参照ください。一般画像検索の場合、このフィールドは不要です。このフィールドを空のままにするか、値を 88888888 に設定します。  |
| cust_content  | String  | カスタムコンテンツ  | このフィールドには、カスタムコンテンツを指定します。カスタムコンテンツは読み取り専用で、検索結果に表示されます。  |
| pic_list  | Array  | 画像リスト  |  このフィールドには、インポートする画像名のリストを指定します。 |

現在のImage Searchの最新版はV2と呼ばれるもので、上記パラメータはV1（以前のバージョン）のパラメータ名でした。ドキュメントにV2の記載がないので、上記パラメータで実行したところV2に変換されて登録されました。

``` increment.meta
{"operator":"ADD","item_id":"1000", "cat_id":9, "cust_content":"k1:v01,k2:v200,k3:v300", "pic_list":["01.jpg"]}
{"operator":"ADD","item_id":"1001", "cat_id":9, "cust_content":"k1:v02,k2:v201,k3:v301", "pic_list":["02.jpg"]}
{"operator":"ADD","item_id":"1002", "cat_id":9, "cust_content":"k1:v03,k2:v202,k3:v302", "pic_list":["03.jpg"]}
{"operator":"ADD","item_id":"1003", "cat_id":9, "cust_content":"k1:v04,k2:v203,k3:v303", "pic_list":["04.jpg"]}
{"operator":"ADD","item_id":"1004", "cat_id":9, "cust_content":"k1:v05,k2:v204,k3:v304", "pic_list":["05.jpg"]}
{"operator":"ADD","item_id":"1005", "cat_id":9, "cust_content":"k1:v06,k2:v205,k3:v305", "pic_list":["06.jpg"]}
{"operator":"ADD","item_id":"1006", "cat_id":9, "cust_content":"k1:v07,k2:v206,k3:v306", "pic_list":["07.jpg"]}
{"operator":"ADD","item_id":"1007", "cat_id":9, "cust_content":"k1:v08,k2:v207,k3:v307", "pic_list":["08.jpg"]}
{"operator":"ADD","item_id":"1008", "cat_id":9, "cust_content":"k1:v09,k2:v208,k3:v308", "pic_list":["09.jpg"]}
{"operator":"ADD","item_id":"1009", "cat_id":9, "cust_content":"k1:v10,k2:v209,k3:v309", "pic_list":["10.jpg"]}
{"operator":"ADD","item_id":"1010", "cat_id":9, "cust_content":"k1:v11,k2:v210,k3:v310", "pic_list":["11.jpg"]}
{"operator":"ADD","item_id":"1011", "cat_id":9, "cust_content":"k1:v12,k2:v211,k3:v311", "pic_list":["12.jpg"]}

```

![22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/9440c55e-accf-dced-a631-42774f6a4b6a.png)
![23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/f267b4b3-4e86-87ae-c44c-46dd84adeef9.png)
![26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/52bd5893-5eb5-60d4-a5a1-9b8ee1072a09.png)
![24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/e4269046-c216-e94e-e26f-4f9d2cd394c5.png)
![25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/e0748139-27df-ec39-d158-aec67f171577.png)

以上でOSSに画像と設定ファイルのアップロードが完了しました。

大量の画像をアップロードする場合はOSS Importというツールを使ってあげることができます。 ↓
OssImport を使用したデータの移行 - ベストプラクティス| Alibaba Cloud ドキュメントセンター 
https://jp.alibabacloud.com/help/doc-detail/59922.htm

## RAM（ Resource Access Management）を設定する

OSSからインポートできるように、権限を追加します。

![30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/ebe04260-c26a-0bd6-744c-9480bd14e648.png)
![31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/c92fac60-bea2-7c68-0852-3d556a36f7ae.png)
![32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/93c76733-8f7c-014b-6fa7-18363a5ca331.png)
![33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/f1b395ba-8a2f-2517-7980-f59f119744d9.png)
![34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/55ad2456-e34a-f2f3-6e6c-ded51f512d74.png)
![40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/5296a83f-cd2f-ad3d-c6fc-8b6f3f3e60cd.png)
![41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/d617440d-56be-b7c8-86d0-585b7a685d36.png)

```
{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "oss:GetObject",
            "Resource": "acs:oss:*:*:image-search-import-data/increment/*"
        }
    ],
    "Version": "1"
}
```
![35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/7a4764d9-9e18-cb03-fbfa-789967cdb751.png)
![36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/1ce12f2f-031c-06e6-6da9-c46e7598d6a1.png)
![37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/a0cbb3ef-7508-94c0-1fc8-1ebea73cfe20.png)


一部、中国語の部分はありますが、設定は以上となります。

## 管理画面を使った画像の取り込み

それでは、管理画面から画像を取り込んでみます。

![50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/6ab6c2fc-70c0-159f-01b4-f60a612df869.png)
![51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/0c78d7a0-dcf0-4b54-2e1e-484a9b5a2b68.png)
![52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/9a2d0ee3-063e-d453-59d6-ab0427587f22.png)
![53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/1903cd22-ade9-e258-b7d7-a7f8779c9b65.png)

## 管理画面からテストしてみる

![60.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/464161f7-f791-b9c6-7d0e-16b2047cd627.png)
![61.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/4dbb03f1-f7f6-519e-3564-92ea33dfd511.png)
![62.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/b4461d1a-9a9e-f766-a968-45a0616b93a6.png)


``` json
{
  "data": {
    "result": {
      "auctions": [
        {
          "catId": "9",
          "custContent": "k1:v12,k2:v211,k3:v311",
          "itemId": "1011",
          "picName": "12.jpg",
          "sortExprValues": "3.07306838035583;217"
        },
        {
          "catId": "9",
          "custContent": "k1:v11,k2:v210,k3:v310",
          "itemId": "1010",
          "picName": "11.jpg",
          "sortExprValues": "2.97270393371582;222"
        },
        {
          "catId": "9",
          "custContent": "k1:v09,k2:v208,k3:v308",
          "itemId": "1008",
          "picName": "09.jpg",
          "sortExprValues": "2.87724995613098;238"
        },
        {
          "catId": "9",
          "custContent": "k1:v10,k2:v209,k3:v309",
          "itemId": "1009",
          "picName": "10.jpg",
          "sortExprValues": "2.79507827758789;235"
        },
        {
          "catId": "9",
          "custContent": "k1:v02,k2:v201,k3:v301",
          "itemId": "1001",
          "picName": "02.jpg",
          "sortExprValues": "2.67687916755676;251"
        },
        {
          "catId": "9",
          "custContent": "k1:v05,k2:v204,k3:v304",
          "itemId": "1004",
          "picName": "05.jpg",
          "sortExprValues": "2.67470407485962;249"
        },
        {
          "catId": "9",
          "custContent": "k1:v06,k2:v205,k3:v305",
          "itemId": "1005",
          "picName": "06.jpg",
          "sortExprValues": "2.66586232185364;254"
        },
        {
          "catId": "9",
          "custContent": "k1:v04,k2:v203,k3:v303",
          "itemId": "1003",
          "picName": "04.jpg",
          "sortExprValues": "2.63756942749023;255"
        },
        {
          "catId": "9",
          "custContent": "k1:v01,k2:v200,k3:v300",
          "itemId": "1000",
          "picName": "01.jpg",
          "sortExprValues": "2.57631182670593;270"
        },
        {
          "catId": "9",
          "custContent": "k1:v07,k2:v206,k3:v306",
          "itemId": "1006",
          "picName": "07.jpg",
          "sortExprValues": "2.52564144134521;253"
        }
      ],
      "code": 0,
      "head": {
        "docsFound": 11,
        "docsReturn": 10,
        "searchTime": 104
      },
      "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": "9",
        "region": "140,474,36,578"
      },
      "requestId": "156283B6-4D49-4847-8BD1-51C4B8124C77",
      "success": true
    }
  },
  "success": true
}
```

検索結果を取得できました。JSONだけでは、ちょっと中身はわからないですが無事に取れたようです。
今回はここまで。次回は、プログラムから画像を検索してみます。

## プログラムからアクセスするためにユーザを作成する

![70.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/e3530403-aebd-9d19-725c-9fc687da08b1.png)
![71.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/45b0a5b9-6931-c419-143a-f9dcaf34d16b.png)
![72.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/c0cb24fc-ed34-316b-d966-35f1f66b774e.png)
![73.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/cc9c09bf-c329-e48d-1a24-237f53074052.png)
![74.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/130c05ba-9069-d154-01b3-b6515d1b3b15.png)
![75.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/aa7af717-9a16-4d47-006f-bc3de1b9e004.png)
![76.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/7ced9901-7adb-5f1a-ede1-98ec01d2a5c2.png)
![77.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18582/b09b2577-0f54-cb4d-07dc-da8367f459dd.png)


``` ユーザー情報.csv
UserPrincipalName,AccessKeyId,AccessKeySecret
aaaa@moro-xxxx.onaliyun.com,LTAI4AEXXXXXXXXXLBP,SCL3YYYYYYYYYJcduELq
```

今後、ここで作成したAccessKeyIDとAccessKeySecret を使ってプログラミングしていきます。