MediaPipeで取得した座標データの統一化
2つのポイントを決定する。具体的にはP0(WRIST)を絶対動かない基準として設定する。それとP9(MIDDLE_FINGER_MCP)からP0までの距離が1になるように大きさを揃える。(P9以外でも大丈夫です。)
※z軸はあってもなくても大丈夫です。
必要な座標データです。
・landmark_hand21_face4.csv
まず全体のソースコードです。
standard_hand_face.py
import csv
import numpy as np
import math
with open("./result/landmark_hand21_face4.csv") as file_name:
array = np.loadtxt(file_name, delimiter=",").ravel()
#print(array)
x1 = array[::3]
y1 = array[1::3]
z1 = array[2::3]
x2 = []
y2 = []
z2 = []
for i in range(0,25):
a = x1[i] - x1[0]
x2.append(a)
b = y1[i] - y1[0]
y2.append(b)
c = z1[i] - z1[0]
z2.append(c)
#print(x2, y2, z2)
#k = math.sqrt((x2[1] - x2[0])**2 + (y2[1] - y2[0])**2)
k = math.sqrt((x2[1] - x2[0])**2 + (y2[1] - y2[0])**2 + (z2[1] - z2[0])**2)
print(k)
x = []
y = []
z = []
for i in range(24):
d = x2[i] / k
x.append(d)
e = y2[i] / k
y.append(e)
f = z2[i] / k
z.append(f)
#print(x, y, z)
"""
#xy = []
xy.extend(x)
xy.extend(y)
np.savetxt('./result/distance_hand_face.csv', xy, delimiter=',')
"""
xyz = []
xyz.extend(x)
xyz.extend(y)
xyz.extend(z)
np.savetxt('./result/distance_hand_face.csv', xyz, delimiter=',')
出力されたデータです。
72行あります。
・distance_hand_face.csv
distance_hand_face.csv
0
-0.75175872
..........
..........
-4.8186489
-4.467570984
他の記事
・MediaPipeで顔と手の座標データを出力する方法[CSV]
・[MediaPipe]手の座標データ(21個)と特定の顔の座標データ(4個)を結合させる。
・【MediaPipe】顔と手の座標データを正規化する(CSVファイル)