このトピックでは、Image Search に画像をアップロードする方法について説明します。
背景情報
Image Search では、画像をアップロードする方法として、API 操作を呼び出す方法と Image Search SDK を使用する方法の 2 つが用意されています。 バッチ操作機能を使用すると、Object Storage Service (OSS) から Image Search に複数の画像を一度にアップロードすることもできます。
少数の画像のみをアップロードする場合は、Image Search API または Image Search SDK を使用することをお勧めします。 詳細については、「画像の追加」をご参照ください。
エンタープライズ ユーザーの場合、または OSS バケットに保存されていない複数の画像を一度にアップロードする場合は、ossimport を使用して画像を OSS にインポートしてから、Image Search にアップロードできます。 詳細については、このトピックの「手順」セクションをご参照ください。
エンタープライズ ユーザーの場合、または OSS バケットに保存されている複数の画像を一度にアップロードする場合は、バッチ操作機能を使用できます。 詳細については、「バッチ操作の実行」をご参照ください。
重要Image Search のバッチ操作機能を使用する前に、OSS バケットと Image Search インスタンスが同じリージョンにあることを確認してください。
ossimport の概要
Ossimport は、OSS が提供する、OSS にデータを移行するためのツールです。 オンプレミスのマシンまたは Elastic Compute Service (ECS) インスタンスに ossimport をデプロイして、サーバーまたは他のクラウドストレージ システムから OSS にデータを移行できます。
Ossimport には、画像のアップロードに関して次の利点があります。
画像を画像検索エンジンにすばやく更新できます。
開発プロジェクトやオンライン プロジェクトなど、異なるプロジェクトで同じ OSS バケットを使用できます。
ビジネス要件に基づいて、さまざまな画像ソースを整理および管理できます。
開発プロジェクトやユーザー受け入れテスト (UAT) プロジェクトなど、複雑なプロジェクトを簡単に管理できます。
一度に多数の画像をアップロードできます。 アップロードされた画像は、さまざまなシナリオで再利用できます。 これにより、ネットワーク帯域幅を最大限に活用できます。
画像検索サービスの管理を標準化できます。
画像の制限
画像のサイズは最大 4 MB です。
画像の長さと幅は 100 ピクセルより大きく、4,096 ピクセル以下である必要があります。
手順
ステップ 1: ossimport をダウンロードする
ossimport は、スタンドアロン デプロイメント モードと分散デプロイメント モードをサポートしています。
スタンドアロン デプロイメントは、サイズが 30 TB 未満のデータの移行に適しています。 移行するデータと、データを移行する OSS バケットにアクセスできるマシンに ossimport をデプロイできます。 スタンドアロン モードで ossimport をデプロイするには、[スタンドアロン パッケージ] をダウンロードします。
分散デプロイメントは、サイズが 30 TB を超えるデータの移行に適しています。 移行するデータと、データを移行する OSS バケットにアクセスできる複数のマシンに ossimport をデプロイできます。 分散モードで ossimport をデプロイするには、[分散パッケージ] をダウンロードします。
大量のデータの移行に必要な時間を短縮するには、OSS バケットと同じリージョンにある ECS インスタンスに ossimport をデプロイすることをお勧めします。 その後、Express Connect 回線を使用して、ソースデータを保存するサーバーを Virtual Private Cloud (VPC) に接続できます。 内部ネットワーク経由で ECS インスタンスから OSS にデータを移行すると、移行効率が大幅に向上します。
ステップ 2: OSS をアクティブ化する
詳細については、「OSS のアクティブ化」をご参照ください。
ステップ 3: OSS バケットを作成する
詳細については、「バケットの作成」をご参照ください。
OSS バケットと Image Search インスタンスが同じリージョンにあることを確認してください。
ステップ 4: increment.meta ファイルを作成する
画像が保存されている OSS バケットに increment.meta ファイルを作成します。 このファイルは、バッチタスクで処理される画像の詳細を保存するために使用されます。
increment.meta ファイルと、increment.meta ファイルで指定された画像は、同じバケットに保存する必要があります。 そうしないと、バッチ操作は失敗します。
increment.meta ファイルの名前は固定されており、Image Search は、ファイル名に基づいてバッチタスクで処理される画像の詳細を読み取ります。 ファイル名は変更しないでください。 そうしないと、バッチ操作は失敗します。
Image Search のバッチ操作機能は、同じバケット内の異なるパスに保存されている画像を処理できます。 たとえば、increment.meta ファイルが imagesearch という名前のバケットのルートディレクトリに保存されており、girl_cloth8.jpg という名前の画像がバケット内の girlCloth という名前のディレクトリに保存されているとします。 この画像の場合、increment.meta ファイルで PicName パラメーターを
"PicName":"girlCloth/girl_cloth8.jpg"
として指定する必要があります。 girlCloth の前または girl_cloth8.jpg の後にスラッシュ (/) を追加できないことに注意してください。 このロジックは、複数レベルのディレクトリにも適用されます。OSS に保存されている画像の名前には、ファイル名拡張子を追加する必要があります。 たとえば、画像の名前が girl_cloth10.jpg の場合、PicName パラメーターを "PicName":"girl_cloth10" ではなく "PicName":"girl_cloth10.jpg" として指定する必要があります。 そうしないと、バッチ操作は失敗します。
increment.meta ファイルでは、1 行に 1 つの画像のみを指定できます。 1 行に複数の画像を指定すると、バッチ操作は失敗します。
次のサンプルコードは、increment.meta ファイルで画像を指定する方法の例を示しています。
{"OperationType": "ADD","ProductId": "1000","PicName": "girl_cloth1.jpg","CategoryId": 0,"IntAttr": 0,"StrAttr": "value1","CustomContent": "k1:v1,k2:v2,k3:v3","Region": "20,40,60,80"}
{"OperationType": "ADD","ProductId": "1000","PicName": "girl_cloth2.jpg","CategoryId": 0,"IntAttr": 0,"StrAttr": "value2","CustomContent": "k1:v1,k2:v2,k3:v3","Region": "20,40,60,80"}
{"OperationType": "ADD","ProductId": "1001","PicName": "girl_cloth3.jpg","CategoryId": 1,"CustomContent": "k1:v1,k2:v2,k3:v3"}
{"OperationType": "ADD","ProductId": "1002","PicName": "girl_cloth4.jpg","CategoryId": 0,"CustomContent": "k1:v1,k2:v2,k3:v3","Crop": false}
{"OperationType": "ADD","ProductId": "1003","PicName": "girl_cloth7.jpg","CustomContent": "https://www.aliyun.com/imagesearch/girl_cloth7.jpg"}
{"OperationType": "ADD","ProductId": "1003","PicName": "girl_cloth6.jpg","CustomContent": "k1:v1,k2:v2,k3:v3"}
{"OperationType": "ADD","ProductId": "1006","PicName": "girlCloth/girl_cloth10.jpg","CustomContent": "k1:v1,k2:v2,k3:v3"}
{"OperationType": "DELETE","ProductId": "1004","PicName": "fengyi.jpg"}
{"OperationType": "DELETE","ProductId": "1005"}
このファイルでは、各画像の情報が JSON 形式でエンコードされています。 次の表に、ファイル内のパラメーターを示します。
パラメーター | タイプ | 必須 | 説明 |
OperationType | 文字列 | はい | 操作のタイプ。有効な値:
|
ProductId | 文字列 | はい | 画像の一意の ID。 ID の長さは最大 512 文字です。 |
PicName | 文字列 | はい | OSS バケットに保存されている画像の名前。 名前の長さは最大 512 文字です。 重要
|
CategoryId | 整数 | いいえ | 画像のカテゴリ。 カテゴリの詳細については、「カテゴリ リファレンス」をご参照ください。
|
CustomContent | 文字列 | はい | ユーザー定義コンテンツ。 値の長さは最大 4,096 文字です。 説明 画像のユーザー定義コンテンツは、検索結果に自動的に返されます。 このパラメーターを使用すると、画像の URL や画像の説明などの情報を追加できます。 |
IntAttr | 整数 | いいえ | 整数型の属性。 この属性は、画像を検索するときに画像をフィルタリングするために使用できます。 説明 画像を検索するときに、「整数属性」パラメーターとフィルター条件を指定して画像をフィルタリングできます。 詳細については、「フィルター条件を指定して画像を検索する」をご参照ください。 |
StrAttr | 文字列 | いいえ | 文字列型の属性。 値の長さは最大 128 文字です。 この属性は、画像を検索するときに画像をフィルタリングするために使用できます。 説明 画像を検索するときに、「文字列属性」パラメーターとフィルター条件を指定して画像をフィルタリングできます。 詳細については、「フィルター条件を指定して画像を検索する」をご参照ください。 |
Crop | ブール値 | いいえ | 画像内の被写体を識別し、識別された被写体に基づいて画像を検索するかどうかを指定します。 デフォルト値: true。有効な値:
|
Region | 文字列 | いいえ | 画像の主題領域。 主題領域は、 説明 このパラメーターを指定すると、Crop パラメーターは無効になります。 |
ステップ 5: Image Search が OSS にアクセスすることを承認する
Image Search でバッチ操作機能を実装するには、Image Search と OSS を一緒に使用する必要があります。 バッチ操作機能を初めて使用するときは、Image Search アカウントに OSS へのアクセスを承認します。 アカウントが承認されている場合は、このステップをスキップします。
ステップ 6: 画像をアップロードする
[Image Search コンソール] にログオンします。
サービス タイプを選択し、管理する Image Search インスタンスの名前をクリックします。
[バッチ操作] タブをクリックします。
[バッチタスクの作成] をクリックします。
バッチタスクの次のパラメーターを設定します。
リージョン
このパラメーターは、Image Search インスタンスが存在するリージョンを指定します。
バケット名
このパラメーターは、OSS で作成したバケットの名前を指定します。
重要OSS バケットと Image Search インスタンスが同じリージョンにあることを確認してください。
パス
このパラメーターは、画像と increment.meta ファイルが保存されているパスを指定します。
META ファイル
このパラメーターは、処理される画像の詳細を保存するために使用されるファイルを指定します。 ファイル名は increment.meta です。 フィールドの右側にある更新アイコンをクリックして、ファイルが存在するかどうかを確認できます。
操作完了後のコールバック
このパラメーターは、コールバック URL を指定します。 URL は HTTP または HTTPS で始まる必要があります。
{ "finishTime": "2021-05-19 17:50:00", "instanceId": "imagesearch-cn-xxxx", "instanceName": "instanceName", "message": "success", "processResultUrl": "https://image-search-task-info.oss-cn-shanghai.aliyuncs.com/yyyyyyyyyy", "status": "NORMAL", "taskId": 111 }
パラメーター
説明
finishTime
バッチタスクが完了した時刻。 時刻は秒単位まで正確です。
instanceName
Image Search インスタンスの名前。
instanceId
Image Search インスタンスの ID。
status
バッチタスクの結果。 NORMAL の値は、バッチタスクが完了したことを示します。 FAIL の値は、バッチタスクが失敗したことを示します。
taskId
バッチタスクの ID。
message
タスク結果の説明。 success の値は、タスクが完了したことを示します。
processResultUrl
エラー情報をダウンロードするために使用される URL。
結果の確認
アップロード タスクが完了したら、インスタンス ID をクリックして、アップロード タスクのステータスを確認できます。
画像のアップロードに失敗した場合は、「インポート履歴の表示」をクリックして詳細を表示します。 詳細については、「FAQ」トピックの [OSS インポート リクエストが失敗する原因] セクションをご参照ください。
画像が想定どおりにアップロードされた場合は、インスタンス ID をクリックします。 表示されるページで、「画像で検索」タブをクリックします。 このタブで、画像検索テストを実行します。