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 -
スクリプト・ファイル
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
}
]
}
]
}