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.jpgdog.jpgflowers.jpgです。
  • bashスクリプトtest.shには、jsonコードが含まれています。
ミニ・バッチをスコアリングするには:
  1. まず、次のコマンドを実行して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"
      
  2. 次に、次のコマンドを実行してtest.shファイルを実行可能にします:
    $ chmod +x test.sh 
    
  3. bashスクリプト・ファイルtest.shを実行します:
    Run script test.sh$ 
    ./test.sh
  4. 次に、認証トークンを取得し、次の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
        }
      ]
    }
  ]
}