Test angles before

This commit is contained in:
Arkadiy Strelnikov
2021-12-12 20:09:02 +07:00
parent a28855b99e
commit 7cc5954609
4 changed files with 34 additions and 14 deletions

View File

@@ -45,7 +45,7 @@ def getAngle(avec0, avec1, bvec0, bvec1):
znam2 = float(np.sqrt(pow(bvec0, 2) + pow(bvec1, 2))) znam2 = float(np.sqrt(pow(bvec0, 2) + pow(bvec1, 2)))
if (znam1*znam2) == 0: if (znam1*znam2) == 0:
return None return None
return np.arccos(chis / (znam1 * znam2)) return np.arccos(chis / (znam1 * znam2)) * 180. / np.pi
def checkRot(tvec0, tvec1, tvec0_apose, tvec1_apose, rvec_apose): def checkRot(tvec0, tvec1, tvec0_apose, tvec1_apose, rvec_apose):
# tvec0 - parent bone by root # tvec0 - parent bone by root
@@ -490,7 +490,7 @@ def updateValueAPoseWorld(data, dataxyz, parent_name, current_name):
data[current_name]["rotation"]["rotx"] = rvec[0] data[current_name]["rotation"]["rotx"] = rvec[0]
data[current_name]["rotation"]["roty"] = rvec[1] data[current_name]["rotation"]["roty"] = rvec[1]
data[current_name]["rotation"]["rotz"] = rvec[2] data[current_name]["rotation"]["rotz"] = rvec[2]
data[current_name]["visible"] = dataxyz[current_name] data[current_name]["visible"] = dataxyz[current_name][3]
def bodyconvertwithrot(poseslms, data, coef, maxy): def bodyconvertwithrot(poseslms, data, coef, maxy):
dataxyz = {} dataxyz = {}
@@ -667,12 +667,12 @@ def bodyconvertwithrot(poseslms, data, coef, maxy):
updateValueAPoseWorld(data, dataxyz, "clavicle_l", "shoulder_l") updateValueAPoseWorld(data, dataxyz, "clavicle_l", "shoulder_l")
updateValueAPoseWorld(data, dataxyz, "spine_05", "clavicle_r") updateValueAPoseWorld(data, dataxyz, "spine_05", "clavicle_r")
updateValueAPoseWorld(data, dataxyz, "spine_05", "clavicle_l") updateValueAPoseWorld(data, dataxyz, "spine_05", "clavicle_l")
updateValueAPoseWorld(data, dataxyz, "head", "clavicle_l") updateValueAPoseWorld(data, dataxyz, "spine_05", "head")
updateValueAPoseWorld(data, dataxyz, "spine_04", "spine_05") updateValueAPoseWorld(data, dataxyz, "spine_04", "spine_05")
updateValueAPoseWorld(data, dataxyz, "spine_02", "spine_04") updateValueAPoseWorld(data, dataxyz, "spine_02", "spine_04")
updateValueAPoseWorld(data, dataxyz, "pelvis", "spine_02") updateValueAPoseWorld(data, dataxyz, "pelvis", "spine_02")
updateValueAPoseWorld(data, dataxyz, "ankle_l", "ball_l") updateValueAPoseWorld(data, dataxyz, "ankle_l", "ball_l")
updateValueAPoseWorld(data, dataxyz, "ball_r", "ankle_r") updateValueAPoseWorld(data, dataxyz, "ankle_r", "ball_r")
updateValueAPoseWorld(data, dataxyz, "ankle_l", "heel_l") updateValueAPoseWorld(data, dataxyz, "ankle_l", "heel_l")
updateValueAPoseWorld(data, dataxyz, "ankle_r", "heel_r") updateValueAPoseWorld(data, dataxyz, "ankle_r", "heel_r")
updateValueAPoseWorld(data, dataxyz, "knee_l", "ankle_l") updateValueAPoseWorld(data, dataxyz, "knee_l", "ankle_l")
@@ -877,6 +877,12 @@ def bonetranslation(data, bone_name, tvec):
def rhandconverttranslation(data): def rhandconverttranslation(data):
tvec = [data["hand_r"]["translation"]["x"], data["hand_r"]["translation"]["y"], data["hand_r"]["translation"]["z"]] tvec = [data["hand_r"]["translation"]["x"], data["hand_r"]["translation"]["y"], data["hand_r"]["translation"]["z"]]
data_apose = {}
bodyaposeworld(data_apose)
tvec_pose = [data_apose["hand_r"]["translation"]["x"], data_apose["hand_r"]["translation"]["y"], data_apose["hand_r"]["translation"]["z"]]
tvec[0] = tvec[0] - tvec_pose[0]
tvec[1] = tvec[1] - tvec_pose[1]
tvec[2] = tvec[2] - tvec_pose[2]
bonetranslation(data, "pinky_4_r", tvec) bonetranslation(data, "pinky_4_r", tvec)
bonetranslation(data, "pinky_3_r", tvec) bonetranslation(data, "pinky_3_r", tvec)
@@ -897,6 +903,12 @@ def rhandconverttranslation(data):
def lhandconverttranslation(data): def lhandconverttranslation(data):
tvec = [data["hand_l"]["translation"]["x"], data["hand_l"]["translation"]["y"], data["hand_l"]["translation"]["z"]] tvec = [data["hand_l"]["translation"]["x"], data["hand_l"]["translation"]["y"], data["hand_l"]["translation"]["z"]]
data_apose = {}
bodyaposeworld(data_apose)
tvec_pose = [data_apose["hand_l"]["translation"]["x"], data_apose["hand_l"]["translation"]["y"], data_apose["hand_l"]["translation"]["z"]]
tvec[0] = tvec[0] - tvec_pose[0]
tvec[1] = tvec[1] - tvec_pose[1]
tvec[2] = tvec[2] - tvec_pose[2]
bonetranslation(data, "pinky_4_l", tvec) bonetranslation(data, "pinky_4_l", tvec)
bonetranslation(data, "pinky_3_l", tvec) bonetranslation(data, "pinky_3_l", tvec)

View File

@@ -2,7 +2,7 @@
address_input: "0" # input video path or webcam index address_input: "0" # input video path or webcam index
# Image processing # Image processing
scale_pose: 42.0 # shoulder width scale_pose: 35.4 # shoulder width
crop_image: 1.0 # coefficient of image cropping crop_image: 1.0 # coefficient of image cropping
# OSC output # OSC output
@@ -18,3 +18,4 @@ show_image: True # show image in opencv interface
# Model UE4 # Model UE4
apose: False # APose coordinates apose: False # APose coordinates
world: True # True - world coordinates, False - local coordinates world: True # True - world coordinates, False - local coordinates
old_world: False # False - new method of world coordinates with rotations

View File

@@ -160,7 +160,7 @@ class hpe_mp_class():
except Exception as err: except Exception as err:
logger.exception("Error scaling hpe class: " + str(err)) logger.exception("Error scaling hpe class: " + str(err))
def getJSON(self, apose=False, world=True): def getJSON(self, apose=False, world=True, old_world=False):
data = {} data = {}
try: try:
if apose: if apose:
@@ -180,7 +180,9 @@ class hpe_mp_class():
if lm.y > maxy: if lm.y > maxy:
maxy = lm.y maxy = lm.y
# bodyconvert(poseslms, data, self.coef, maxy) if old_world:
bodyconvert(poseslms, data, self.coef, maxy)
else:
bodyconvertwithrot(poseslms, data, self.coef, maxy) bodyconvertwithrot(poseslms, data, self.coef, maxy)
rhandlms = {} rhandlms = {}
@@ -188,7 +190,9 @@ class hpe_mp_class():
for id, lm in enumerate(self.results_hol.right_hand_landmarks.landmark): for id, lm in enumerate(self.results_hol.right_hand_landmarks.landmark):
rhandlms[id] = lm rhandlms[id] = lm
# rhandconvert(rhandlms, data, self.coef) if old_world:
rhandconvert(rhandlms, data, self.coef)
else:
rhandconvertwithrot(rhandlms, data, self.coef) rhandconvertwithrot(rhandlms, data, self.coef)
else: else:
rhandconverttranslation(data) rhandconverttranslation(data)
@@ -198,7 +202,9 @@ class hpe_mp_class():
for id, lm in enumerate(self.results_hol.left_hand_landmarks.landmark): for id, lm in enumerate(self.results_hol.left_hand_landmarks.landmark):
lhandlms[id] = lm lhandlms[id] = lm
if old_world:
lhandconvert(lhandlms, data, self.coef) lhandconvert(lhandlms, data, self.coef)
else:
lhandconvertwithrot(lhandlms, data, self.coef) lhandconvertwithrot(lhandlms, data, self.coef)
else: else:
lhandconverttranslation(data) lhandconverttranslation(data)

View File

@@ -29,6 +29,7 @@ mirror_image = data_yaml["mirror_image"]
show_image = data_yaml["show_image"] show_image = data_yaml["show_image"]
apose = data_yaml["apose"] apose = data_yaml["apose"]
world = data_yaml["world"] world = data_yaml["world"]
old_world = data_yaml["old_world"]
# OSC client # OSC client
client = udp_client.SimpleUDPClient(osc_address, osc_port) client = udp_client.SimpleUDPClient(osc_address, osc_port)
@@ -75,12 +76,12 @@ while True:
# Output # Output
if output_method == 'file': if output_method == 'file':
# JSON # JSON
res = mp_cl.getJSON(apose=apose, world=world) res = mp_cl.getJSON(apose=apose, world=world, old_world=old_world)
with open('hierarchy_data.json', 'w', encoding='utf-8') as f: with open('hierarchy_data.json', 'w', encoding='utf-8') as f:
json.dump(res, f, ensure_ascii=False, indent=4) json.dump(res, f, ensure_ascii=False, indent=4)
else: else:
# OSC # OSC
res = mp_cl.getJSON(apose=apose, world=world) res = mp_cl.getJSON(apose=apose, world=world, old_world=old_world)
res_list = [] res_list = []
for val in res.keys(): for val in res.keys():
stroka = str(val) stroka = str(val)