186 lines
27 KiB
Python
186 lines
27 KiB
Python
# draw_skeleton.py
|
|
import time
|
|
|
|
import cv2
|
|
import numpy as np
|
|
|
|
from filter import EMAFilter, filter_moves
|
|
|
|
# ---- Konfiguracja wizualna / długości segmentów ----
|
|
IMG_W, IMG_H = 600, 600
|
|
CENTER_X = IMG_W // 2
|
|
NECK_Y = 140
|
|
|
|
UPPER_ARM = 70
|
|
FOREARM = 60
|
|
THIGH = 90
|
|
SHIN = 80
|
|
|
|
SHOULDER_SPREAD = 80
|
|
HIP_SPREAD = 40
|
|
|
|
JOINT_RADIUS = 6
|
|
LINE_THICK = 4
|
|
FONT = cv2.FONT_HERSHEY_SIMPLEX
|
|
|
|
# ---- Pozycja i baza kątów (ta baza = wyprostowany człowiek wg Twojego przykładu) ----
|
|
base_pose = np.array([
|
|
np.float32(-180), # 0 lewy łokieć (flexion) -> baza
|
|
np.float32(-180), # 1 prawy łokieć
|
|
np.float32(-90), # 2 lewy bark
|
|
np.float32(90), # 3 prawy bark
|
|
np.float32(-160), # 4 lewe kolano
|
|
np.float32(160), # 5 prawe kolano
|
|
np.float32(180), # 6 lewe biodro
|
|
np.float32(-180) # 7 prawe biodro
|
|
], dtype=np.float32)
|
|
|
|
|
|
|
|
import cv2
|
|
import numpy as np
|
|
|
|
|
|
def draw_new(xpose):
|
|
img = np.zeros((640, 640, 3), dtype=np.uint8)
|
|
|
|
# Rysujemy każdą kropkę
|
|
for (x, y) in xpose:
|
|
cv2.circle(img, (int(x), int(y)), radius=5, color=(0, 255, 0), thickness=-1) # zielone kropki
|
|
|
|
# Wyświetlamy obraz
|
|
return img
|
|
|
|
def rotate(vec, angle_deg):
|
|
"""Obraca wektor 2D o kąt w stopniach."""
|
|
rad = np.deg2rad(-angle_deg)
|
|
c, s = np.cos(rad), np.sin(rad)
|
|
return np.array([c*vec[0] - s*vec[1], s*vec[0] + c*vec[1]], dtype=np.float32)
|
|
|
|
def safe_point(pt):
|
|
"""Konwertuje punkt do int, zwraca None jeśli jest NaN/inf."""
|
|
if np.any(np.isnan(pt)) or np.any(np.isinf(pt)):
|
|
return None
|
|
return tuple(pt.astype(int))
|
|
|
|
def draw_chain(img, p0, p1, p2, color=(0, 0, 0)):
|
|
"""Łańcuch trzech punktów (dwa odcinki i kółka)."""
|
|
pts = [safe_point(p0), safe_point(p1), safe_point(p2)]
|
|
if None in pts:
|
|
return
|
|
cv2.line(img, pts[0], pts[1], color, LINE_THICK)
|
|
cv2.line(img, pts[1], pts[2], color, LINE_THICK)
|
|
for pt in pts:
|
|
cv2.circle(img, pt, JOINT_RADIUS, color, -1)
|
|
|
|
def draw_skeleton(angles_deg, show_angles=True):
|
|
"""
|
|
angles_deg: tablica/długość 8 (w stopniach) odpowiadająca:
|
|
0 lewy łokieć, 1 prawy łokieć,
|
|
2 lewy bark, 3 prawy bark,
|
|
4 lewe kolano, 5 prawe kolano,
|
|
6 lewe biodro, 7 prawe biodro
|
|
"""
|
|
angles = np.array(angles_deg, dtype=np.float32)
|
|
if angles.shape[0] != 8:
|
|
raise ValueError("angles musi mieć długość 8")
|
|
|
|
deltas = angles - base_pose
|
|
img = np.ones((IMG_H, IMG_W, 3), dtype=np.uint8) * 255
|
|
|
|
# punkty centralne
|
|
neck = np.array([CENTER_X, NECK_Y], dtype=np.float32)
|
|
hip_center = neck + np.array([0.0, 260.0], dtype=np.float32)
|
|
left_shoulder = neck + np.array([-SHOULDER_SPREAD, 0.0])
|
|
right_shoulder = neck + np.array([SHOULDER_SPREAD, 0.0])
|
|
left_hip = hip_center + np.array([-HIP_SPREAD, 0.0])
|
|
right_hip = hip_center + np.array([HIP_SPREAD, 0.0])
|
|
|
|
base_dir = np.array([0.0, 1.0], dtype=np.float32)
|
|
|
|
# ramiona
|
|
left_elbow = left_shoulder + rotate(base_dir, deltas[2]) * UPPER_ARM
|
|
left_wrist = left_elbow + rotate(left_elbow - left_shoulder, deltas[0]) / np.linalg.norm(left_elbow - left_shoulder) * FOREARM
|
|
|
|
right_elbow = right_shoulder + rotate(base_dir, deltas[3]) * UPPER_ARM
|
|
right_wrist = right_elbow + rotate(right_elbow - right_shoulder, deltas[1]) / np.linalg.norm(right_elbow - right_shoulder) * FOREARM
|
|
|
|
# nogi
|
|
left_knee = left_hip + rotate(base_dir, deltas[6]) * THIGH
|
|
left_ankle = left_knee + rotate(left_knee - left_hip, deltas[4]) / np.linalg.norm(left_knee - left_hip) * SHIN
|
|
|
|
right_knee = right_hip + rotate(base_dir, deltas[7]) * THIGH
|
|
right_ankle = right_knee + rotate(right_knee - right_hip, deltas[5]) / np.linalg.norm(right_knee - right_hip) * SHIN
|
|
|
|
# tułów
|
|
cv2.line(img, safe_point(neck), safe_point(hip_center), (0,0,0), LINE_THICK)
|
|
|
|
# kończyny
|
|
draw_chain(img, left_shoulder, left_elbow, left_wrist)
|
|
draw_chain(img, right_shoulder, right_elbow, right_wrist)
|
|
draw_chain(img, left_hip, left_knee, left_ankle)
|
|
draw_chain(img, right_hip, right_knee, right_ankle)
|
|
|
|
# barki i biodra
|
|
for pt in [neck, hip_center]:
|
|
sp = safe_point(pt)
|
|
if sp:
|
|
cv2.circle(img, sp, JOINT_RADIUS+1, (0,0,0), -1)
|
|
|
|
# podpisy
|
|
if show_angles:
|
|
labels = ["L_elbow", "R_elbow", "L_shoulder", "R_shoulder",
|
|
"L_knee", "R_knee", "L_hip", "R_hip"]
|
|
pts_for_labels = [left_elbow, right_elbow, left_shoulder, right_shoulder,
|
|
left_knee, right_knee, left_hip, right_hip]
|
|
for lab, pt, ang in zip(labels, pts_for_labels, angles):
|
|
sp = safe_point(pt)
|
|
if sp:
|
|
cv2.putText(img, f"{lab}:{float(ang):.0f}", (sp[0]+8, sp[1]-8),
|
|
FONT, 0.45, (50,50,50), 1, cv2.LINE_AA)
|
|
|
|
return img
|
|
|
|
|
|
def print_animation(moves, do_filter=True):
|
|
FPS = 12
|
|
frame_time = 1.0 / FPS
|
|
|
|
if do_filter:
|
|
moves = filter_moves(moves)
|
|
|
|
for element in moves:
|
|
start_time = time.time()
|
|
|
|
data = element[1]
|
|
imgx = draw_skeleton(data, True)
|
|
cv2.imshow("skeleton", imgx)
|
|
|
|
cv2.waitKey(1)
|
|
|
|
elapsed = time.time() - start_time
|
|
sleep_time = frame_time - elapsed
|
|
if sleep_time > 0:
|
|
time.sleep(sleep_time)
|
|
|
|
cv2.destroyAllWindows()
|
|
|
|
# -----------------------
|
|
if __name__ == "__main__":
|
|
print_animation([(0, [np.float32(-177.71265), np.float32(-174.73067), np.float32(-152.97266), np.float32(146.61412), 0, 0, 0, 0]), (0, [np.float32(-177.71265), np.float32(-174.73067), np.float32(-152.97266), np.float32(146.61412), 0, 0, 0, 0]), (1, [np.float32(-179.34216), np.float32(-175.1631), np.float32(-160.62059), np.float32(154.25089), 0, 0, 0, 0]), (2, [np.float32(-179.11646), np.float32(-175.77586), np.float32(-166.32901), np.float32(160.31293), 0, 0, 0, 0]), (3, [np.float32(-178.45302), np.float32(-176.26497), np.float32(-170.6383), np.float32(164.97472), 0, 0, 0, 0]), (4, [np.float32(-156.1322), np.float32(-176.81296), np.float32(-173.89975), np.float32(168.71828), 0, 0, 0, 0]), (5, [np.float32(173.51642), np.float32(-177.2507), np.float32(-176.38376), np.float32(171.59596), 0, 0, 0, 0]), (6, [np.float32(161.58566), np.float32(-175.68036), np.float32(-177.95105), np.float32(175.1489), 0, 0, 0, 0]), (7, [np.float32(165.94063), np.float32(-173.6952), np.float32(-177.76581), np.float32(173.59724), 0, 0, 0, 0]), (8, [np.float32(167.99803), np.float32(-172.10306), np.float32(-177.62056), np.float32(172.37581), 0, 0, 0, 0]), (9, [np.float32(167.01294), np.float32(-172.25806), np.float32(-177.41763), np.float32(172.96324), 0, 0, 0, 0]), (10, [np.float32(168.34651), np.float32(-170.75264), np.float32(-177.25732), np.float32(171.76749), 0, 0, 0, 0]), (11, [np.float32(169.03198), np.float32(-170.47719), np.float32(-171.7429), np.float32(167.04187), 0, 0, 0, 0]), (12, [np.float32(167.69151), np.float32(-167.31956), np.float32(-164.425), np.float32(160.63393), 0, 0, 0, 0]), (13, [np.float32(172.03833), np.float32(172.09543), np.float32(-154.86694), np.float32(149.90656), 0, 0, 0, 0]), (14, [np.float32(-176.70016), np.float32(148.05106), np.float32(-145.49854), np.float32(138.09488), 0, 0, 0, 0]), (15, [np.float32(-162.04362), np.float32(133.05644), np.float32(-136.37057), np.float32(122.36006), 0, 0, 0, 0]), (16, [np.float32(-133.54407), np.float32(117.92083), np.float32(-128.64784), np.float32(108.18037), 0, 0, 0, 0]), (17, [np.float32(-120.5195), np.float32(117.517044), np.float32(-124.290504), np.float32(103.943565), 0, 0, 0, 0]), (18, [np.float32(-128.60013), np.float32(120.050674), np.float32(-123.75183), np.float32(104.269), 0, 0, 0, 0]), (19, [np.float32(-138.44423), np.float32(131.45319), np.float32(-128.40588), np.float32(110.233315), 0, 0, 0, 0]), (20, [np.float32(-148.8524), np.float32(142.18561), np.float32(-130.77083), np.float32(116.86407), 0, 0, 0, 0]), (21, [np.float32(-155.83388), np.float32(153.35909), np.float32(-133.86783), np.float32(118.81309), 0, 0, 0, 0]), (22, [np.float32(-160.40088), np.float32(159.92307), np.float32(-134.10683), np.float32(121.42807), 0, 0, 0, 0]), (23, [np.float32(-162.76984), np.float32(163.69525), np.float32(-129.94107), np.float32(118.60325), 0, 0, 0, 0]), (24, [np.float32(-165.36012), np.float32(162.91405), np.float32(-124.32322), np.float32(115.16654), 0, 0, 0, 0]), (25, [np.float32(-157.08405), np.float32(161.17969), np.float32(-119.75534), np.float32(110.11877), 0, 0, 0, 0]), (26, [np.float32(-142.36058), np.float32(148.58578), np.float32(-113.1776), np.float32(103.27534), 0, 0, 0, 0]), (27, [np.float32(-126.34874), np.float32(135.90163), np.float32(-107.99996), np.float32(97.745544), 0, 0, 0, 0]), (28, [np.float32(-111.555046), np.float32(120.28161), np.float32(-102.90543), np.float32(101.75018), 0, 0, 0, 0]), (29, [np.float32(-116.18684), np.float32(117.1988), np.float32(-102.82552), np.float32(101.91601), 0, 0, 0, 0]), (30, [np.float32(-119.38242), np.float32(115.04018), np.float32(-102.76333), np.float32(102.044846), 0, 0, 0, 0]), (31, [np.float32(-132.89049), np.float32(127.53226), np.float32(-105.08167), np.float32(106.15996), 0, 0, 0, 0]), (32, [np.float32(-144.19537), np.float32(137.93439), np.float32(-106.91274), np.float32(109.43767), 0, 0, 0, 0]), (33, [np.float32(-145.03065), np.float32(151.35457), np.float32(-112.5764), np.float32(112.03514), 0, 0, 0, 0]), (34, [np.float32(-145.33589), np.float32(159.6624), np.float32(-117.17642), np.float32(114.81223), 0, 0, 0, 0]), (35, [np.float32(-149.04364), np.float32(150.41672), np.float32(-119.18934), np.float32(114.63722), 0, 0, 0, 0]), (36, [np.float32(-152.54716), np.float32(159.66574), np.float32(-115.354195), np.float32(112.88694), 0, 0, 0, 0]), (37, [np.float32(-153.56352), np.float32(162.30583), np.float32(-112.25788), np.float32(109.40657), 0, 0, 0, 0]), (38, [np.float32(-155.00623), np.float32(158.15614), np.float32(-108.86521), np.float32(106.61929), 0, 0, 0, 0]), (39, [np.float32(-142.61101), np.float32(139.63199), np.float32(-105.00854), np.float32(103.24677), 0, 0, 0, 0]), (40, [np.float32(-130.31097), np.float32(121.39403), np.float32(-101.927895), np.float32(101.99587), 0, 0, 0, 0]), (41, [np.float32(-117.38432), np.float32(107.26698), np.float32(-98.321724), np.float32(99.56014), 0, 0, 0, 0]), (42, [np.float32(-107.02301), np.float32(97.28782), np.float32(-93.56594), np.float32(98.58428), 0, 0, 0, 0]), (43, [np.float32(-112.89167), np.float32(99.56462), np.float32(-92.82797), np.float32(99.93657), 0, 0, 0, 0]), (44, [np.float32(-126.614174), np.float32(114.64372), np.float32(-95.37388), np.float32(103.28159), 0, 0, 0, 0]), (45, [np.float32(-139.84346), np.float32(130.96053), np.float32(-97.14734), np.float32(106.32758), 0, 0, 0, 0]), (46, [np.float32(-123.21476), np.float32(143.86916), np.float32(-103.006004), np.float32(111.394615), 0, 0, 0, 0]), (47, [np.float32(-141.5781), np.float32(154.79948), np.float32(-108.612595), np.float32(115.16928), 0, 0, 0, 0]), (48, [np.float32(-155.22946), np.float32(161.33635), np.float32(-114.02716), np.float32(117.56685), 0, 0, 0, 0]), (49, [np.float32(-166.21373), np.float32(168.71425), np.float32(-117.60113), np.float32(118.820946), 0, 0, 0, 0]), (50, [np.float32(177.14467), np.float32(179.43112), np.float32(-119.516655), np.float32(120.36672), 0, 0, 0, 0]), (51, [np.float32(162.30437), np.float32(-172.25182), np.float32(-123.48432), np.float32(120.09969), 0, 0, 0, 0]), (52, [np.float32(144.4729), np.float32(-174.10846), np.float32(-127.54262), np.float32(119.82113), 0, 0, 0, 0]), (53, [np.float32(127.31793), np.float32(-174.19254), np.float32(-129.08801), np.float32(118.409584), 0, 0, 0, 0]), (54, [np.float32(113.76562), np.float32(-169.95944), np.float32(-126.05294), np.float32(118.47352), 0, 0, 0, 0]), (55, [np.float32(113.82122), np.float32(-164.73875), np.float32(-122.60768), np.float32(118.524445), 0, 0, 0, 0]), (56, [np.float32(128.16905), np.float32(-153.21196), np.float32(-118.39732), np.float32(118.565025), 0, 0, 0, 0]), (57, [np.float32(139.23676), np.float32(-141.76775), np.float32(-114.730995), np.float32(118.597404), 0, 0, 0, 0]), (58, [np.float32(140.01616), np.float32(-134.07416), np.float32(-112.10109), np.float32(117.51402), 0, 0, 0, 0]), (59, [np.float32(126.824486), np.float32(-135.31642), np.float32(-113.23279), np.float32(115.394455), 0, 0, 0, 0]), (60, [np.float32(114.402695), np.float32(-141.0731), np.float32(-117.636986), np.float32(113.6495), 0, 0, 0, 0]), (61, [np.float32(102.105804), np.float32(-147.13788), np.float32(-122.061005), np.float32(112.60136), 0, 0, 0, 0]), (62, [np.float32(82.55143), np.float32(-132.00037), np.float32(-126.99564), np.float32(111.764206), 0, 0, 0, 0]), (63, [np.float32(67.185585), np.float32(-107.95043), np.float32(-131.30707), np.float32(116.37015), 0, 0, 0, 0]), (64, [np.float32(55.41571), np.float32(-83.59085), np.float32(-135.34984), np.float32(120.11708), 0, 0, 0, 0]), (65, [np.float32(57.216797), np.float32(-69.009605), np.float32(-145.56621), np.float32(123.13165), 0, 0, 0, 0]), (66, [np.float32(63.3968), np.float32(-94.29201), np.float32(-155.86067), np.float32(122.76426), 0, 0, 0, 0]), (67, [np.float32(101.240776), np.float32(-141.4229), np.float32(176.36198), np.float32(116.013214), 0, 0, 0, 0]), (68, [np.float32(121.02988), np.float32(-149.0079), np.float32(165.37529), np.float32(114.31), 0, 0, 0, 0]), (69, [np.float32(134.03983), np.float32(-152.32309), np.float32(157.48804), np.float32(112.95637), 0, 0, 0, 0]), (70, [np.float32(112.75889), np.float32(-155.58865), np.float32(171.25089), np.float32(108.357025), 0, 0, 0, 0]), (71, [np.float32(94.51983), np.float32(-157.78162), np.float32(-177.26198), np.float32(104.634285), 0, 0, 0, 0]), (72, [np.float32(117.857765), np.float32(-146.28297), np.float32(-160.43242), np.float32(109.71331), 0, 0, 0, 0]), (73, [np.float32(137.63956), np.float32(-137.19145), np.float32(-145.4273), np.float32(113.82179), 0, 0, 0, 0]), (74, [np.float32(152.49736), np.float32(-137.32172), np.float32(-136.0747), np.float32(126.48621), 0, 0, 0, 0]), (75, [np.float32(160.44916), np.float32(-139.97824), np.float32(-129.2574), np.float32(140.08032), 0, 0, 0, 0]), (76, [np.float32(165.00204), np.float32(-141.66278), np.float32(-125.62509), np.float32(151.7363), 0, 0, 0, 0]), (77, [np.float32(166.33769), np.float32(-142.1729), np.float32(-124.453156), np.float32(159.57578), 0, 0, 0, 0]), (78, [np.float32(163.17789), np.float32(-141.79802), np.float32(-124.81636), np.float32(166.50897), 0, 0, 0, 0]), (79, [np.float32(160.57289), np.float32(-143.33722), np.float32(-127.278206), np.float32(171.54332), 0, 0, 0, 0]), (80, [np.float32(152.92003), np.float32(-145.07042), np.float32(-132.12842), np.float32(172.94598), 0, 0, 0, 0]), (81, [np.float32(146.9255), np.float32(-146.1509), np.float32(-134.90572), np.float32(173.45674), 0, 0, 0, 0]), (82, [np.float32(137.92267), np.float32(-146.99962), np.float32(-139.26581), np.float32(167.37877), 0, 0, 0, 0]), (83, [np.float32(129.11739), np.float32(-137.77116), np.float32(-144.05162), np.float32(161.36844), 0, 0, 0, 0]), (84, [np.float32(112.1686), np.float32(-122.51108), np.float32(-152.65993), np.float32(159.10808), 0, 0, 0, 0]), (85, [np.float32(94.71537), np.float32(-104.29398), np.float32(-143.03436), np.float32(156.95618), 0, 0, 0, 0]), (86, [np.float32(74.77906), np.float32(-104.69146), np.float32(-145.60904), np.float32(154.25932), 0, 0, 0, 0]), (87, [np.float32(55.423023), np.float32(-84.23611), np.float32(-147.81), np.float32(150.25267), 0, 0, 0, 0]), (88, [np.float32(41.562172), np.float32(-65.068115), np.float32(-150.1503), np.float32(147.07681), 0, 0, 0, 0]), (89, [np.float32(31.166506), np.float32(-50.15115), np.float32(-147.70395), np.float32(142.26643), 0, 0, 0, 0]), (90, [np.float32(21.954107), np.float32(-35.86467), np.float32(-145.93503), np.float32(135.39108), 0, 0, 0, 0]), (91, [np.float32(11.706621), np.float32(-22.523314), np.float32(-140.00038), np.float32(130.97784), 0, 0, 0, 0]), (92, [np.float32(5.861759), np.float32(-13.284506), np.float32(-137.59642), np.float32(130.64473), 0, 0, 0, 0]), (93, [np.float32(1.1497761), np.float32(-22.627926), np.float32(-134.50092), np.float32(129.70795), 0, 0, 0, 0]), (94, [np.float32(-1.5199602), np.float32(-40.220974), np.float32(-132.54959), np.float32(125.309715), 0, 0, 0, 0]), (95, [np.float32(176.41487), np.float32(-153.83871), np.float32(-121.946556), np.float32(102.33235), 0, 0, 0, 0]), (96, [np.float32(174.9553), np.float32(-139.52335), np.float32(-117.560905), np.float32(109.53559), 0, 0, 0, 0]), (97, [np.float32(177.90271), np.float32(-133.55208), np.float32(-114.991516), np.float32(120.25056), 0, 0, 0, 0]), (98, [np.float32(176.79457), np.float32(-136.879), np.float32(-115.31527), np.float32(133.45818), 0, 0, 0, 0]), (99, [np.float32(173.58762), np.float32(-137.88713), np.float32(-115.32158), np.float32(144.01964), 0, 0, 0, 0]), (100, [np.float32(170.75105), np.float32(-140.93457), np.float32(-115.574814), np.float32(151.54395), 0, 0, 0, 0]), (101, [np.float32(170.77177), np.float32(-144.3122), np.float32(-116.08156), np.float32(157.80292), 0, 0, 0, 0]), (102, [np.float32(160.21524), np.float32(-146.41833), np.float32(-115.932755), np.float32(161.61784), 0, 0, 0, 0]), (103, [np.float32(152.65096), np.float32(-151.0892), np.float32(-117.459), np.float32(164.85428), 0, 0, 0, 0]), (104, [np.float32(142.22702), np.float32(-152.9032), np.float32(-120.84679), np.float32(162.40504), 0, 0, 0, 0]), (105, [np.float32(134.62877), np.float32(-156.65067), np.float32(-127.422935), np.float32(155.50684), 0, 0, 0, 0]), (106, [np.float32(129.27498), np.float32(-161.75233), np.float32(-135.24002), np.float32(148.52858), 0, 0, 0, 0]), (107, [np.float32(125.860596), np.float32(-165.94539), np.float32(-142.48613), np.float32(143.16847), 0, 0, 0, 0]), (108, [np.float32(128.59683), np.float32(-170.12631), np.float32(-153.88258), np.float32(137.75119), 0, 0, 0, 0]), (109, [np.float32(130.68695), np.float32(-173.43198), np.float32(-163.86249), np.float32(133.48993), 0, 0, 0, 0]), (110, [np.float32(133.81415), np.float32(-176.09454), np.float32(-173.30508), np.float32(129.09732), 0, 0, 0, 0]), (111, [np.float32(136.25107), np.float32(-178.19128), np.float32(179.15453), np.float32(125.64672), 0, 0, 0, 0]), (112, [np.float32(138.93352), np.float32(-178.93579), np.float32(175.04915), np.float32(124.43739), 0, 0, 0, 0]), (113, [np.float32(141.95058), np.float32(179.42719), np.float32(169.85828), np.float32(123.662346), 0, 0, 0, 0]), (114, [np.float32(145.35237), np.float32(-176.35999), np.float32(167.62486), np.float32(121.82139), 0, 0, 0, 0]), (115, [np.float32(141.54785), np.float32(-168.2156), np.float32(169.35866), np.float32(119.46758), 0, 0, 0, 0]), (116, [np.float32(132.77647), np.float32(-161.37755), np.float32(178.07661), np.float32(117.63932), 0, 0, 0, 0]), (117, [np.float32(117.081406), np.float32(-161.94939), np.float32(-176.3659), np.float32(114.5626), 0, 0, 0, 0]), (118, [np.float32(136.97812), np.float32(-166.62599), np.float32(-162.61624), np.float32(112.10795), 0, 0, 0, 0]), (119, [np.float32(153.3519), np.float32(-174.72084), np.float32(-147.48262), np.float32(114.18022), 0, 0, 0, 0]), (120, [np.float32(165.84868), np.float32(-162.56355), np.float32(-137.23663), np.float32(123.54123), 0, 0, 0, 0]), (121, [np.float32(171.28831), np.float32(-157.39784), np.float32(-129.41374), np.float32(136.54126), 0, 0, 0, 0]), (122, [np.float32(176.55424), np.float32(-153.45586), np.float32(-124.64398), np.float32(147.95815), 0, 0, 0, 0]), (123, [np.float32(177.2582), np.float32(-148.46419), np.float32(-119.92058), np.float32(156.56487), 0, 0, 0, 0]), (124, [np.float32(177.62079), np.float32(-140.68915), np.float32(-117.822495), np.float32(159.84567), 0, 0, 0, 0]), (125, [np.float32(168.7863), np.float32(-140.17657), np.float32(-116.85648), np.float32(156.99678), 0, 0, 0, 0]), (126, [np.float32(160.48248), np.float32(-136.63333), np.float32(-118.30709), np.float32(153.22075), 0, 0, 0, 0]), (127, [np.float32(145.94826), np.float32(-128.68008), np.float32(-121.53548), np.float32(154.00558), 0, 0, 0, 0]), (128, [np.float32(131.97217), np.float32(-124.31928), np.float32(-126.68466), np.float32(152.85857), 0, 0, 0, 0]), (129, [np.float32(123.99414), np.float32(-129.53473), np.float32(-136.66573), np.float32(149.0236), 0, 0, 0, 0]), (130, [np.float32(115.74203), np.float32(-135.57529), np.float32(-144.21452), np.float32(146.07889), 0, 0, 0, 0]), (131, [np.float32(115.697784), np.float32(-134.89153), np.float32(-154.56512), np.float32(140.44997), 0, 0, 0, 0]), (132, [np.float32(116.92369), np.float32(-130.49901), np.float32(-162.21227), np.float32(136.88805), 0, 0, 0, 0]), (133, [np.float32(123.687645), np.float32(-130.42216), np.float32(-166.72412), np.float32(135.92885), 0, 0, 0, 0]), (134, [np.float32(132.90366), np.float32(-128.66608), np.float32(-166.16023), np.float32(135.00261), 0, 0, 0, 0]), (135, [np.float32(137.28354), np.float32(-129.97862), np.float32(-163.5699), np.float32(134.39682), 0, 0, 0, 0]), (136, [np.float32(153.12227), np.float32(-139.65195), np.float32(-156.50534), np.float32(131.81639), 0, 0, 0, 0]), (137, [np.float32(170.73425), np.float32(-155.4063), np.float32(-148.17027), np.float32(125.94822), 0, 0, 0, 0]), (138, [np.float32(-167.43602), np.float32(-166.61086), np.float32(-139.894), np.float32(119.097595), 0, 0, 0, 0]), (139, [np.float32(-139.8751), np.float32(173.69093), np.float32(-133.00581), np.float32(114.46372), 0, 0, 0, 0]), (140, [np.float32(-79.77848), np.float32(172.92345), np.float32(-131.08498), np.float32(115.18427), 0, 0, 0, 0]), (141, [np.float32(-88.554886), np.float32(179.95848), np.float32(-131.9174), np.float32(113.95835), 0, 0, 0, 0]), (142, [np.float32(-98.03206), np.float32(169.2833), np.float32(-131.36536), np.float32(110.247696), 0, 0, 0, 0]), (143, [np.float32(-110.69194), np.float32(169.12274), np.float32(-127.615654), np.float32(104.72901), 0, 0, 0, 0]), (144, [np.float32(-122.507866), np.float32(166.36774), np.float32(-122.13082), np.float32(102.75704), 0, 0, 0, 0]), (145, [np.float32(-133.17186), np.float32(162.76044), np.float32(-118.76708), np.float32(104.362434), 0, 0, 0, 0]), (146, [np.float32(-140.4045), np.float32(167.3432), np.float32(-116.6202), np.float32(105.63178), 0, 0, 0, 0]), (147, [np.float32(-143.30566), np.float32(173.30907), np.float32(-114.92828), np.float32(107.8584), 0, 0, 0, 0]), (148, [np.float32(-143.05537), np.float32(172.74878), np.float32(-113.0826), np.float32(110.27333), 0, 0, 0, 0]), (149, [np.float32(-142.87154), np.float32(172.3244), np.float32(-111.62133), np.float32(112.19795), 0, 0, 0, 0]), (150, [np.float32(-133.29015), np.float32(161.8038), np.float32(-113.23546), np.float32(103.93075), 0, 0, 0, 0]), (151, [np.float32(-125.447975), np.float32(152.81169), np.float32(-114.51745), np.float32(96.93032), 0, 0, 0, 0]), (152, [np.float32(-116.01183), np.float32(141.20114), np.float32(-116.858246), np.float32(90.83717), 0, 0, 0, 0]), (153, [np.float32(-116.86932), np.float32(135.30608), np.float32(-118.084305), np.float32(92.30156), 0, 0, 0, 0]), (154, [np.float32(-117.51101), np.float32(136.24767), np.float32(-118.93263), np.float32(93.5718), 0, 0, 0, 0]), (155, [np.float32(-119.54882), np.float32(149.58147), np.float32(-118.45431), np.float32(98.3149), 0, 0, 0, 0]), (156, [np.float32(-122.8475), np.float32(162.50502), np.float32(-118.07335), np.float32(103.91131), 0, 0, 0, 0]), (157, [np.float32(-122.18807), np.float32(174.96718), np.float32(-120.3469), np.float32(107.24035), 0, 0, 0, 0]), (158, [np.float32(-123.381325), np.float32(-171.77751), np.float32(-122.1683), np.float32(111.80247), 0, 0, 0, 0]), (159, [np.float32(-124.31575), np.float32(-159.96078), np.float32(-123.62437), np.float32(116.33358), 0, 0, 0, 0]), (160, [np.float32(-124.30198), np.float32(-149.2852), np.float32(-124.86854), np.float32(120.21106), 0, 0, 0, 0]), (161, [np.float32(-121.0666), np.float32(-147.482), np.float32(-125.86191), np.float32(118.837364), 0, 0, 0, 0]), (162, [np.float32(-117.84291), np.float32(-148.90892), np.float32(-126.65489), np.float32(117.75866), 0, 0, 0, 0]), (163, [np.float32(-115.36321), np.float32(-152.7811), np.float32(-126.49065), np.float32(114.35249), 0, 0, 0, 0]), (164, [np.float32(-114.845665), np.float32(-158.48976), np.float32(-126.27303), np.float32(112.989624), 0, 0, 0, 0]), (165, [np.float32(-112.89622), np.float32(-165.87625), np.float32(-127.0679), np.float32(111.82379), 0, 0, 0, 0]), (166, [np.float32(-111.89867), np.float32(-170.10103), np.float32(-128.38062), np.float32(110.739655), 0, 0, 0, 0]), (167, [np.float32(-111.105934), np.float32(-173.51144), np.float32(-128.7191), np.float32(109.46382), 0, 0, 0, 0]), (168, [np.float32(-110.137245), np.float32(-173.3283), np.float32(-130.72176), np.float32(107.46719), 0, 0, 0, 0]), (169, [np.float32(-116.81131), np.float32(-172.05544), np.float32(-129.64824), np.float32(108.85078), 0, 0, 0, 0]), (170, [np.float32(-125.765205), np.float32(-167.80252), np.float32(-129.76631), np.float32(108.76667), 0, 0, 0, 0]), (171, [np.float32(-135.43411), np.float32(-166.05016), np.float32(-129.66182), np.float32(112.32548), 0, 0, 0, 0]), (172, [np.float32(-146.32802), np.float32(-162.68204), np.float32(-135.496), np.float32(120.162704), 0, 0, 0, 0]), (173, [np.float32(-154.76186), np.float32(-155.96947), np.float32(-142.0818), np.float32(129.0187), 0, 0, 0, 0]), (174, [np.float32(-162.35582), np.float32(-151.16743), np.float32(-147.64636), np.float32(137.5035), 0, 0, 0, 0]), (175, [np.float32(-169.89668), np.float32(-144.34303), np.float32(-150.47778), np.float32(141.33147), 0, 0, 0, 0]), (176, [np.float32(-174.71477), np.float32(-136.99362), np.float32(-152.05441), np.float32(141.30754), 0, 0, 0, 0]), (177, [np.float32(-177.31557), np.float32(-131.77324), np.float32(-146.93167), np.float32(137.11246), 0, 0, 0, 0]), (178, [np.float32(-172.96844), np.float32(-132.63892), np.float32(-138.24393), np.float32(132.16652), 0, 0, 0, 0]), (179, [np.float32(-166.56987), np.float32(-133.30882), np.float32(-127.7235), np.float32(130.04254), 0, 0, 0, 0]), (180, [np.float32(-160.05872), np.float32(-132.53308), np.float32(-116.49464), np.float32(129.46034), 0, 0, 0, 0]), (181, [np.float32(-151.01263), np.float32(-132.70923), np.float32(-100.91611), np.float32(132.81357), 0, 0, 0, 0]), (182, [np.float32(-143.56424), np.float32(-132.8478), np.float32(-86.116486), np.float32(135.47401), 0, 0, 0, 0]), (183, [np.float32(-148.59706), np.float32(-135.80135), np.float32(-66.88064), np.float32(142.41487), 0, 0, 0, 0]), (184, [np.float32(-152.49416), np.float32(-138.15608), np.float32(-48.78975), np.float32(148.12387), 0, 0, 0, 0]), (185, [np.float32(-162.11224), np.float32(-139.46944), np.float32(-24.27237), np.float32(163.58987), 0, 0, 0, 0]), (186, [np.float32(-169.15135), np.float32(-146.48596), np.float32(75.37488), np.float32(-128.00351), 0, 0, 0, 0]), (187, [np.float32(-172.22502), np.float32(-144.57677), np.float32(96.989426), np.float32(-102.55062), 0, 0, 0, 0]), (188, [np.float32(179.45009), np.float32(-150.23135), np.float32(120.14036), np.float32(-74.030914), 0, 0, 0, 0]), (189, [np.float32(168.02014), np.float32(-156.40154), np.float32(140.09378), np.float32(-32.670532), 0, 0, 0, 0])]
|
|
, False)
|
|
# # przykład użycia: podana przez Ciebie tablica = wyprostowany człowiek
|
|
# example = [
|
|
# np.float32(-180), np.float32(-180),
|
|
# np.float32(-90), np.float32(90),
|
|
# np.float32(-160), np.float32(160),
|
|
# np.float32(180), np.float32(-180)
|
|
# ]
|
|
#
|
|
# img = draw_skeleton(example, show_angles=True)
|
|
# cv2.imshow("skeleton", img)
|
|
# cv2.imwrite("skeleton_example.png", img)
|
|
# print("Obraz zapisany jako skeleton_example.png. Zamknij okno, aby zakończyć.")
|
|
# cv2.waitKey(0)
|
|
# cv2.destroyAllWindows()
|