コンテンツにスキップ

描画

描画について

描画には次の 2 つの機能があります。

1 つ目の機能は、キーポントの色や太さ、キーポイント同士を結ぶ線など、キーポイントの描画をカスタマイズする機能です。 詳しくは、キーポイントや骨格を描画するを参照ください。

2 つ目の機能は、キーポイントのみを描画してスケルトン表示する機能です。 詳しくは、キーポイントのみの描画を参照ください。

キーポイントや骨格を描画する

描画を行うには、POST /drawingsを用います。 対象のキーポイント IDkeypointIdまたは比較 IDcomparisonIdと描画ルールフォーマットruleに従い実施したい描画内容を指定します。

描画ルールを指定すると、必要な箇所のみの描画、点や線の色・太さを自由に変更することができます。 描画ルールを指定しない場合は、以下の図のように全身の骨格点と線を描画します。



描画ルールフォーマット

ruleには、Array 形式で複数のルールを記載することができ、1 つのルールには以下のプロパティが利用できます。 また、ruleを指定しない場合は、全身のキーポイントの描画とキーポイントとキーポイントを結んだ線の描画を行います。

プロパティ タイプ 説明 必須
drawingType String 描画の種別
points Array 描画対象となるキーポイント情報 -
points[].pointType String キーポイントの指定方法(デフォルトは single) -
points[].pointName Array of String 部位の名前(pointsを使う場合必須) -
pattern String キーポイントグループ情報 -
color String 点や線の色 (デフォルトは grey) -
size Number 点や線の大きさ (デフォルトは 1) -
comparisons Array 比較結果の描画情報 -

drawingType

drawingTypeで指定できる値は次の通りです。描画内容により必要となる部位数が異なります。

描画内容 drawingType 必要な部位数 説明
キーポイント描画機能 keypoint 1 指定されたpointsを描画する
骨格描画機能 stickPicture 2 指定されたpointsを結んだ線を描画する
水平線描画機能 horizontalLine 1 指定されたpointsを起点とした水平線を描画する
垂線描画機能 verticalLine 1 指定されたpointsを起点とした垂線を描画する

drawingTypeの違いによる描画の違いは、以下の図も参考にしてください。

キーポイント描画機能



骨格描画機能



水平線描画機能



垂直線描画機能



points

pointType には次の値が指定できます。

  • single
  • horizontalRight
    • 指定した部位の水平方向の右端を表します。
  • horizontalLeft
    • 指定した部位の水平方向の左端を表します。
  • verticalTop
    • 指定した部位の垂直方向の上端を表します。
  • verticalDown
    • 指定した部位の垂直方向の下端を表します。
  • midpoint
    • 2 つの部位の中点を表します。
  • centroid
    • 指定した位置の重心を表します。

指定される箇所については、以下の図も参考にしてください。

point_type

pointName には次の値が指定できます。

Note

pointTypemidpointを指定した場合のみpointNameは配列で 2 つの部位を指定する必要があります。

pointTypesingleの場合のみpointTypepointNameを省略することが出来ます。

1
2
3
{
  "points": ["leftShoulder"]
}

これは以下と同値です。

1
2
3
4
5
6
7
8
{
  "points": [
    {
      "pointType": "single",
      "pointName": "leftShoulder"
    }
  ]
}

pattern

patternを使う事で、複数の部位を同時に指定できます。 patternには次の値を指定できます。

pattern 内容 対応部位
all 全てのキーポイント 全部位
upperBody 上半身の全てのキーポイント 左肩、右肩、左肘、右肘、左手首、右手首
lowerBody 下半身の全てのキーポイント 左腰、右腰、左膝、右膝、左足首、右足首
leftBody 左半身の全てのキーポイント 左肩、左肘、左手首、左腰、左膝、左足首
rightBody 右半身の全てのキーポイント 右肩、左肘、右手首、右腰、右膝、右足首

color

color には次の値が指定できます。

  • white
  • black
  • grey
  • yellow
  • green
  • red
  • blue
  • cyan
  • orange
  • pink
  • magenta
  • purple
  • skyBlue
  • blueGreen
  • limeGreen

サンプルコード

以下の例では、鼻の点と左肩と右肩の中点を結んだ線を描画します。

Hint

<アクセストークン>の取得は、認証方式を参照してください。

描画は非同期で実施されます。処理時間は動画の長さなどにより変化します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
curl -X POST \
     -H "Content-Type: application/json" \
     -H "Authorization: Bearer <アクセストークン>" \
     -d '{
          "keypointId": "<キーポイントID>",
          "rule": [
           {
             "drawingType": "stickPicture",
             "points": [
               {
                 "pointType": "single",
                 "pointName": "nose"
               },
               {
                 "pointType": "midpoint",
                 "pointName": [
                   "leftShoulder",
                   "rightShoulder"
                 ]
               }
             ]
           }
          ]
        }' \
     'https://api.customer.jp/anymotion/v1/drawings/'

キーポイントのみの描画

以下の図のような、キーポイントのみを描画して、スケルトン表示をすることができます。 スケルトン表示をしたい場合は、リクエストボディにbackgroundRuleを指定します。



背景の描画ルールフォーマット

backgroundRuleには、Object 形式で以下のプロパティが利用できます。

プロパティ タイプ 説明 必須
skeletonOnly Boolean キーポイントのみの描画 -
color String 背景の色 -

skeletonOnly

skeletonOnlyに true を指定すると、キーポイントのみの描画が行い、スケルトンのみの表示を行います。 デフォルト値は false です。

color

skeletonOnlyが true の場合のみ、利用することができます。 colorはキーポイント以外の部分を何色で表示するか指定します。 デフォルト値は white です。 colorには次の値が指定できます。

  • white
  • black
  • grey
  • yellow
  • green
  • red
  • blue
  • cyan
  • orange
  • pink
  • magenta
  • purple
  • skyBlue
  • blueGreen
  • limeGreen

サンプルコード

以下は、こちらのサンプルをスケルトンで表示する例です。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
curl -X POST \
     -H "Content-Type: application/json" \
     -H "Authorization: Bearer <アクセストークン>" \
     -d '{
          "keypointId": "<キーポイントID>",
          "rule": [
           {
             "drawingType": "stickPicture",
             "points": [
               {
                 "pointType": "single",
                 "pointName": "nose"
               },
               {
                 "pointType": "midpoint",
                 "pointName": [
                   "leftShoulder",
                   "rightShoulder"
                 ]
               }
             ]
           }
          ],
          "backgroundRule": {
            "skeletonOnly": true
          }
        }' \
     'https://api.customer.jp/anymotion/v1/drawings/'

比較結果の描画

比較 ID comparisonIdを指定することで、比較結果をもとに、 検出する部位に記載されている 17 点の差異を可視化することができます。 比較で指定した source(比較元)の画像または動画に対して描画します。

以下の図のように、ruleを指定しない場合は通常の描画と同様に、全身のキーポイントの描画とキーポイントとキーポイントを結んだ線の描画を行います。 さらに差異の程度が 0.2 以上である部位は、赤色で表示します。

target


source

ruleを指定することで、描画ルールを従い、キーポイントの色や大きさなどを変更することができます。 比較結果の描画の場合のみ、rulecomparisonsが利用でき、差異と判定するしきい値やの比較の詳細設定を行うことができます。

比較結果の描画ルールフォーマット

comparisonsは、 Array 形式で 1つの要素は Object 形式で以下のプロパティが利用できます。

プロパティ タイプ 説明 必須
threshold Number 差異と判定する差異の程度のしきい値 -
color String 描画する差異の色 -
size Number 描画する差異の大きさ -

複数の Object を指定することで、差異の程度の値により複数の色に描画することができます。 以下の例では、 0~0.2が grey に、 0.2~0.3 が yellow に、 0.3~1.0 が red に描画します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
{
    "rule": [
        {
            "drawingType": "keypoint",
            "pattern": "all",
            "color": "grey",
            "comparisons": [
                {
                    "threshold": 0.2,
                    "color": "yellow"
                },
                {
                    "threshold": 0.3,
                    "color": "red"
                }
            ]
        }
    ]
}

threshold

thresholdでは、差異の程度が指定された値以上の時に差異と判定するか指定できます。 デフォルト値は 0.2 です。

color

colorでは、差異と判定された部位を何色で描画するか指定できます。 デフォルト値は red です。 colorには次の値が指定できます。

  • white
  • black
  • grey
  • yellow
  • green
  • red
  • blue
  • cyan
  • orange
  • pink
  • magenta
  • purple
  • skyBlue
  • blueGreen
  • limeGreen

size

sizeでは、差異と判定された部位の描画する大きさを指定できます。 デフォルト値は 1 です。

サンプルコード

以下のサンプルは、両肩の差異を可視化するコードです。 差異がある場合は橙色で、差異がない場合は、緑色で表示するように指定しています。 両肩を結んだ線の描画灰色で表示するように指定しています。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
curl -X POST \
     -H "Content-Type: application/json" \
     -H "Authorization: Bearer <アクセストークン>" \
     -d '{
          "comparisonId": "<比較ID>",
          "rule": [
           {
             "drawingType": "keypoint",
             "points": [
               {
                 "pointType": "single",
                 "pointName": "rightShoulder"
               }
             ],
             "comparisons": [
                {
                    "size": 1,
                    "threshold": 0.2,
                    "color": "orange"
                }
            ],
             "color": "green"
           },
           {
             "drawingType": "keypoint",
             "points": [
               {
                 "pointType": "single",
                 "pointName": "leftShoulder"
               }
             ],
             "comparisons": [
                {
                    "size": 1,
                    "threshold": 0.2,
                    "color": "orange"
                }
            ],
             "color": "green"
           },
           {
             "drawingType": "stickPicture",
             "points": [
               {
                 "pointType": "single",
                 "pointName": "rightShoulder"
               },
               {
                 "pointType": "single",
                 "pointName": "leftShoulder"
               }
             ],
             "color": "grey"
           }
          ],
          "backgroundRule": {
            "skeletonOnly": true
          }
        }' \
     'https://api.customer.jp/anymotion/v1/drawings/'

描画結果を取得する

キーポイントの描画結果を取得するには、GET /drawings/:idを用います。

リクエストには POST /drawingsのレスポンスに含まれる id を指定します。 描画処理のステータスは、レスポンスの execStatus で確認することができます。 SUCCESS の場合、処理が完了しており,描画結果を取得することができます。

Hint

execStatusUNPROCESSEDPROCESSING の場合はまだ処理が完了していません。 時間をおいてから再度確認してください。

サンプルコード

Hint

<アクセストークン>の取得は、認証方式を参照してください。

1
2
3
curl -X GET \
    -H "Authorization: Bearer <アクセストークン>" \
    'https://api.customer.jp/anymotion/v1/drawings/<描画ID>/'