base64でエンコードされた文字列を含むミニ・バッチのスコアリング
この例では、base64でエンコードされた文字列に変換されているイメージのミニ・バッチのスコアリング方法を示します。複数のイメージ・ファイルを直接アップロードすることはできないため、ミニ・バッチ機能を使用して複数のイメージをスコアリングします。ここでは、まずイメージをなんらかの形式のテキストに変換する必要があります。OML Servicesでは、イメージ分類の場合、base64でエンコードされた文字列およびイメージ・テンソル(マトリックス)がサポートされています。
ノート:
OML Servicesでは、回帰、分類、クラスタリングおよび特徴抽出モデルのバッチ・スコアリングがサポートされています。認識イメージ・モジュールでは、イメージ・ファイル、イメージ・テンソル、およびbase64でエンコードされた文字列という3種類のイメージ入力を受け入れます。その後、cognitive-image/classification
エンドポイントにPOSTリクエストを送信します。この機能では、スコアリングに事前構築済ONNXイメージ・モデルが使用されます。
Linuxユーティリティ
jq
を使用して、JSON出力を読取り可能な形式に解析します。jq
ユーティリティは、主要なLinux配布リポジトリのすべてに含まれています。Oracle LinuxおよびRed Hatシステムでは、次のコマンドを実行して、このユーティリティをインストールできます:
$ sudo yum install jq
この例では、base64でエンコードされた文字列を含むミニ・バッチをスコアリングする方法を示します。この例では、ローカルに格納されている、3つのイメージ・ファイルとbashスクリプトを使用します。
- イメージ・ファイルは、
cat.jpg
、dog.jpg
、flowers.jpg
です。 - bashスクリプト
test.sh
には、json
コードが含まれています。
ミニ・バッチをスコアリングするには:
-
まず、次のコマンドを実行してbashスクリプトの内容を表示します:
$ cat test.sh #!/bin/bash
このスクリプトでは、次の内容が返されます:# get the paths to the images image1="./cat.jpg" image2="./dog.jpg" image3="./flowers.jpg" # get base64 encoded strings base64_1=`base64 -w 0 $image1` base64_2=`base64 -w 0 $image2` base64_3=`base64 -w 0 $image3` json_data=$(mktemp) echo "{\"inputRecords\":[ {\"input\": \"$base64_1\"}, {\"input\": \"$base64_2\"}, {\"input\": \"$base64_3\"}], \"topN\":3}" > "$json_data"
このスクリプトでは:
- イメージへのパスはここで設定されています:
image1="./cat.jpg" image2="./dog.jpg" image3="./flowers.jpg"
- その後、
.jpg
イメージが、base64でエンコードされた文字列に変換されます。base64_1=`base64 -w 0 $image1` base64_2=`base64 -w 0 $image2` base64_3=`base64 -w 0 $image3`
- スクリプトのこの部分では、base64文字列からなる入力レコードの追加先となる一時ファイル
json_data
が作成されます。また、topN
クラスを指定しており、@$json_data
引数を使用して内容コンテンツをフェッチしています。イメージ分類の間に、各イメージについて、イメージが属する可能性があるクラスが、確率に基づいてソートされます。json_data=$(mktemp) echo "{\"inputRecords\":[ {\"input\": \"$base64_1\"}, {\"input\": \"$base64_2\"}, {\"input\": \"$base64_3\"}], \"topN\":3}" > "$json_data"
- イメージへのパスはここで設定されています:
- 次に、次のコマンドを実行して
test.sh
ファイルを実行可能にします:$ chmod +x test.sh
-
bashスクリプト・ファイル
test.sh
を実行します:Run script test.sh$ ./test.sh
- 次に、認証トークンを取得し、次のcURLコマンドを実行して、入力レコード内にbase64でエンコードされた文字列が含まれているミニ・バッチをスコアリングします。
$ curl -X POST "${omlservice}/omlmod/v1/cognitive-image/classification" \ --header "Authorization: Bearer $token" \ --header 'Content-Type: application/json' --data "@$json_data" | jq
ノート:
ここでは、フラグ--data
を使用して、一時ファイルjson_data
から入力レコードをフェッチしています。base64でエンコードされた文字列は非常に長いため、アプリケーションによって、引数リストが長すぎますというエラーがスローされます。そのため、--data
フラグを使用することをお薦めします。
Linuxユーティリティ
jq
を使用して、JSON出力を読取り可能な形式に解析します。jq
ユーティリティは、主要なLinux配布リポジトリのすべてに含まれています。Oracle LinuxおよびRed Hatシステムでは、次のコマンドを実行して、このユーティリティをインストールできます:
$ sudo yum install jq
ノート:
cURLコマンドでjq
を使用しても、HTTPレスポンスは返されません。HTTPレスポンスを返すには、jq
コマンドを削除し、curlコマンドに-i
フラグを追加します。
このコマンドでは、次のスコアリング結果が返されます:
{ "scoringResults": [ { "classifications": [ { "label": "Cat", "probability": 0.9999594688415527 }, { "label": "Felidae", "probability": 0.9997081756591797 }, { "label": "Whiskers", "probability": 0.9994940757751465 } ] }, { "classifications": [ { "label": "Snout", "probability": 0.9996676445007324 }, { "label": "Dog", "probability": 0.996991753578186 }, { "label": "Vertebrate", "probability": 0.9954350590705872 } ] }, { "classifications": [ { "label": "Pink", "probability": 0.9993271827697754 }, { "label": "Flowering plant", "probability": 0.9986602663993835 }, { "label": "Flower", "probability": 0.99815833568573 } ] } ] }