以降は人物分析APIのフォームからお問い合わせしていただき、姿勢推定機能をご利用ください。
原則1時間あたり100回までです。 API制限を引き上げたい方はお問い合わせ下さい。
APIを叩いた時のresponseヘッダのRETRY-LIMIT-IN-1-HOUR要素に回数が記載されています。
以下の骨格のパーツそれぞれの座標が一人ずつJsonとなって出力されます。
"Nose", "Neck", "RShoulder", "RElbow", "RWrist", "LShoulder", "LElbow", "LWrist", "RHip", "RKnee", "RAnkle", "LHip", "LKnee", "LAnkle", "REye", "LEye", "REar", "LEar", "BackGround"
一人一人の人物はperson{n}というキーが割り振られます。
パラメータ名 | 内容 |
---|---|
image_data | jpegかpngフォーマットの画像データ(multipart) |
response_type |
imageかjsonのどちらかを文字列で指定してください。 image: response bodyに骨格を描画した画像が返ってきます。推論結果はヘッダーにあります。 json: json形式で推論結果と画像がbase64エンコードされた状態で返ってきます。 |
require 'rest-client'
require 'json'
require 'base64'
url = 'https://ai-api.userlocal.jp/human_pose'
image = File.new('/path/to/image')
params = {
image_data: image,
response_type: 'json',
multipart: true
}
response = RestClient.post(url, params)
data = JSON.parse(response.body)
image = Base64.strict_decode64(data['image_data'])
File.write('out.jpg', image)
puts data['result']
import requests
import json
import base64
image_path = "/path/to/image"
image = open(image_path, "rb").read()
response_type = "json"
request_body = {"response_type": response_type}
url = "https://ai-api.userlocal.jp/human_pose"
res = requests.post(url, data=request_body, files={"image_data": image})
data = json.loads(res.content)
image = base64.b64decode(data["image_data"])
with open("test.jpg", "wb") as f:
f.write(image)
print(data["result"])
<?php
$target="https://ai-api.userlocal.jp/human_pose";
# http://php.net/manual/en/curlfile.construct.php
// Create a CURLFile object / procedural method
$cfile = curl_file_create("/path/to/image","image/jpeg"); // try adding
// Assign POST data
$imgdata = array("image_data" => $cfile, "response_type" => "json");
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $target);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // stop verifying certificate
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true); // enable posting
curl_setopt($curl, CURLOPT_POSTFIELDS, $imgdata); // post images
//curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); // if any redirection after upload
$r = curl_exec($curl);
curl_close($curl);
$data = json_decode($r, true);
$img = base64_decode($data["image_data"]);
file_put_contents("test.jpg", $img);
echo var_dump($data["result"]);
?>
# test.jpgに対して画像を出力します。verboseオプションをつけることによりヘッダーに書いてある推論結果等も見ることができます。
$ curl --verbose https://ai-api.userlocal.jp/human_pose -F image_data=@path/to/image -F response_type=image > test.jpg
# test.jsonに対して推論結果と画像を格納しているjsonを出力します。画像はbase64エンコードされている状態です。
$ curl https://ai-api.userlocal.jp/human_pose -F image_data=@path/to/image -F response_type=json > test.json
------------------
HEADER
------------------
RETRY-LIMIT-IN-1-HOUR: 98
Content-Type: application/json
------------------
BODY
------------------
{
"status": "ok",
"image_data": "base64エンコードされた画像",
"result": {
"person1": {
"BackGround": [264,300],
"LEar": [545,216],
"LEye": [518,216],
.....
"RKnee": [441,707],
"RShoulder": [442,317],
"RWrist": [460,393]
},
}
}
------------------
HEADER
------------------
RETRY_LIMIT_IN_1_HOUR: 95
Content-Type: image/jpeg
RESULT: {"person1": {
"BackGround": [264,300],
"LEar": [545,216],
"REye": [487,227],
.....
"RKnee": [441,707],
"RShoulder": [442,317],
"RWrist": [460,393]
}}
STATUS: "ok"
------------------
BODY
------------------
JPEG Image Binary
フィールド | 形式 | 内容 |
---|---|---|
status | String | 成功時"ok"。失敗時"error"。 詳細は別表を参照。 |
image_data | String | base64エンコードされた骨格検出結果を描画した画像 |
result | Dict | 推論結果。以下の行の情報を含む。 |
person{n} | Dict | n番目の人間を示す。以下の行の情報を含む。 |
Nose | [Number, Number] | 鼻の座標の推定結果。キーがない場合もあり。 |
Neck | [Number, Number] | 首の座標の推定結果。キーがない場合もあり。 |
RShoulder | [Number, Number] | 右肩の座標の推定結果。キーがない場合もあり。 |
RElbow | [Number, Number] | 右肘の座標の推定結果。キーがない場合もあり。 |
RWrist | [Number, Number] | 右手首の座標の推定結果。キーがない場合もあり。 |
LShoulder | [Number, Number] | 左肩の座標の推定結果。キーがない場合もあり。 |
LElbow | [Number, Number] | 左肘の座標の推定結果。キーがない場合もあり。 |
LWrist | [Number, Number] | 左手首の座標の推定結果。キーがない場合もあり。 |
RHip | [Number, Number] | 右尻の座標の推定結果。キーがない場合もあり。 |
RKnee | [Number, Number] | 右膝の座標の推定結果。キーがない場合もあり。 |
RAnkle | [Number, Number] | 右足首の座標の推定結果。キーがない場合もあり。 |
LHip | [Number, Number] | 左尻の座標の推定結果。キーがない場合もあり。 |
LKnee | [Number, Number] | 左膝の座標の推定結果。キーがない場合もあり。 |
LAnkle | [Number, Number] | 左足首の座標の推定結果。キーがない場合もあり。 |
REye | [Number, Number] | 右目の座標の推定結果。キーがない場合もあり。 |
LEye | [Number, Number] | 左目の座標の推定結果。キーがない場合もあり。 |
REar | [Number, Number] | 右耳の座標の推定結果。キーがない場合もあり。 |
LEar | [Number, Number] | 左耳の座標の推定結果。キーがない場合もあり。 |
BackGround | [Number, Number] | 背景の座標の推定結果。キーがない場合もあり。 |
statusがerrorの時に以下のようなレスポンスメッセージが発生します
status code | error type | error message detail | 説明 |
---|---|---|---|
400 | Bad Request | image_data is required. | image_dataパラメータが必要です。 |
400 | Bad Request | response_type is required. | response_typeパラメータが必要です。 |
400 | Bad Request | response_type must be json or image. | response_typeパラメータはjsonかimageで指定する必要があります。 |
400 | Bad Request | File is not image. | アップロードされたファイルが画像でないときに発生するエラーです。 |
400 | Bad Request | File format must be PNG or JPEG. | アップロードされたファイルのフォーマットはJPEGかPNGである必要があります。 |
429 | Too many request | too many request | 1時間に100回以上のリクエストをすると発生するエラーです。 |
500 | Internal server error | Internal server error | サーバー内部でエラーが発生した場合のエラーです。 |
# 複数のバリデーションエラーが発生したケース
{
status: "error",
error_type: "Bad Request",
error_message_detail: [
"response_type required",
"image_data required"
]
}
{
status: "error",
error_type: "Bad Request",
error_message_detail: "File is not image"
}