8_3 posenet

posenet」には、人間の姿勢が検出できるPoseNet Modelがあります。このモデルには、イメージやビデオ内の1人の人間の姿勢を検出するバージョンと、複数の姿勢を検出するバージョンがあります。

posenetを使用するには、次のようにTensorFlow.jsとposenetを読み込みます。

<script src="https://unpkg.com/@tensorflow/tfjs"></script>
<script src="https://unpkg.com/@tensorflow-models/posenet"></script>

姿勢の情報として得られる値には、kyepointsという名前の配列が含まれています。この配列には、次のインデックスで、人間の各部位の情報が含まれます。

id | part
0 | nose
1 | leftEye
2 | rightEye
3 | leftEar
4 | rightEar
5 | leftShoulder
6 | rightShoulder
7 | leftElbow
8 | rightElbow
9 | leftWrist
10 | rightWrist
11 | leftHip
12 | rightHip
13 | leftKnee
14 | rightKnee
15 | leftAnkle
16 | rightAnkle

PoseNetモデルを読み込むには、次のようにします。

const net = await posenet.load(multiplier);

引数:
multiplier:オプションの乗数値。1.01, 1.0, 0.75,または0.50。デフォルトは1.01。値が大きいほど、モデルのレイヤーサイズも大きくなり、モデルの精度は増すがスピードを犠牲にする。 小さい値に設定すると、スピードは速くなるが、精度が犠牲になる。

PoseNetはデフォルトで、1.01乗数モデルを読み込む。これはパワフルなGPUを持つコンピュータ向け。0.75乗数モデルは中級、低級のGPUを持つコンピュータに、0.50はモバイルに推奨される。

1人の姿勢

1人の姿勢検出には、net.estimateSinglePose()が利用できます。

const pose = await net.estimateSinglePose(image, imageScaleFactor, flipHorizontal, outputStride);

引数:
image:ImageData | HTMLImageElement | HTMLCanvasElement | HTMLVideoElement ネットワークに通す入力イメージ。

imageScaleFactor :0.2と1.0の間の数値。デフォルトは0.50。 ネットワークに通す前にどれだけイメージを縮小するか。 この値を小さく設定してイメージを縮小すると、ネットワークを通るスピードは速くなるが、精度が犠牲になる。

flipHorizontal:デフォルトはfalse。姿勢を左右反転すべき場合、デフォルトで左右反転するビデオ(たとえばWebカメラ)ではtrueに設定し、姿勢を適切な向きに直す。

outputStride:モデルにイメージを通すときに希望する出力用stride。32か16, 8でなくてはならない。 デフォルトは16。高い値ほどパフォーマンスが向上するが、精度が落ちる。その逆も真。

戻り値:
確率と、part idでインデックス化された配列を持つpose。

複数人の姿勢

複数人の姿勢検出には、 net.estimateMultiplePoses()が利用できます。また1人の姿勢検出の場合でも、このメソッドの方が適している場合もあります。

 const poses = await net.estimateMultiplePoses(image, imageScaleFactor, flipHorizontal, outputStride, maxPoseDetections, scoreThreshold, nmsRadius);

引数:
maxPoseDetections(オプション):判定する姿勢の最大数。デフォルトは5。

scoreThreshold (オプション) :この値以上のルートスコアを持つ判定インスタンスを返す。デフォルトは0.5。

nmsRadius (オプション) :Non-maximum suppressionアルゴリズムによる部位間の距離。厳密に正である必要がある。 2つの部位は、互いにnmsRadiusピクセルよりも離れていない場合、抑制し合う。デフォルトは20。 「物体検出におけるNon-Maximum Suppressionのアルゴリズム」参照。

戻り値:
pose配列で解決するPromise

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA