from typing import Tuple import cv2 import numpy as np from .. import math as lib_math from ..math import Affine2DMat, Affine2DUniMat from .ELandmarks2D import ELandmarks2D from .FRect import FRect from .IState import IState class FLandmarks2D(IState): def __init__(self): """ Describes 2D face landmarks in uniform float coordinates """ self._type : ELandmarks2D = None self._ulmrks : np.ndarray = None def restore_state(self, state : dict): self._type = IState._restore_enum(ELandmarks2D, state.get('_type', None)) self._ulmrks = IState._restore_np_array(state.get('_ulmrks', None)) def dump_state(self) -> dict: return {'_type' : IState._dump_enum(self._type), '_ulmrks' : IState._dump_np_array(self._ulmrks), } @staticmethod def create( type : ELandmarks2D, ulmrks : np.ndarray): """ ulmrks np.ndarray (*,2|3) """ if not isinstance(type, ELandmarks2D): raise ValueError('type must be ELandmarks2D') ulmrks = np.float32(ulmrks) if len(ulmrks.shape) != 2: raise ValueError('ulmrks shape must have rank 2') if ulmrks.shape[1] != 2: raise ValueError('ulmrks dim must be == 2') ulmrks_count = ulmrks.shape[0] if type == ELandmarks2D.L5: if ulmrks_count != 5: raise ValueError('ulmrks_count must be == 5') elif type == ELandmarks2D.L68: if ulmrks_count != 68: raise ValueError('ulmrks_count must be == 68') elif type == ELandmarks2D.L106: if ulmrks_count != 106: raise ValueError('ulmrks_count must be == 106') elif type == ELandmarks2D.L468: if ulmrks_count != 468: raise ValueError('ulmrks_count must be == 468') face_ulmrks = FLandmarks2D() face_ulmrks._type = type face_ulmrks._ulmrks = ulmrks return face_ulmrks def get_type(self) -> ELandmarks2D: return self._type def get_count(self) -> int: return self._ulmrks.shape[0] def as_numpy(self, w_h = None): """ get landmarks as np.ndarray w_h(None) provide (w,h) to scale uniform landmarks to exact size """ ulmrks = self._ulmrks.copy() if w_h is not None: ulmrks *= w_h return ulmrks def transform(self, mat, invert=False) -> 'FLandmarks2D': """ Tranforms FLandmarks2D using affine mat and returns new FLandmarks2D() mat : np.ndarray """ if not isinstance(mat, np.ndarray): raise ValueError('mat must be an instance of np.ndarray') if invert: mat = cv2.invertAffineTransform (mat) ulmrks = self._ulmrks.copy() ulmrks = np.expand_dims(ulmrks, axis=1) ulmrks = cv2.transform(ulmrks, mat, ulmrks.shape).squeeze() return FLandmarks2D.create(type=self._type, ulmrks=ulmrks) def get_FRect(self, coverage=1.6) -> FRect: """ create FRect from landmarks with given coverage """ _, uni_mat = self.calc_cut( (1,1), coverage, 1, exclude_moving_parts=False) xlt, xlb, xrb, xrt = uni_mat.invert().transform_points([[0,0], [0,1], [1,1], [1,0]]) l = min(xlt[0], xlb[0]) t = min(xlt[1], xrt[1]) r = max(xrt[0], xrb[0]) b = max(xlb[1], xrb[1]) return FRect.from_ltrb( (l,t,r,b) ) def calc_cut(self, h_w, coverage : float, output_size : int, exclude_moving_parts : bool = False, head_yaw : float = None, x_offset : float = 0, y_offset : float = 0, freeze_z_rotation = False): """ Calculates affine mat for face cut. returns mat, matrix to transform img space to face_image space uni_mat matrix to transform uniform img space to uniform face_image space """ h,w = h_w type = self._type lmrks = (self._ulmrks * (w,h)).astype(np.float32) # estimate landmarks transform from global space to local aligned space with bounds [0..1] if type == ELandmarks2D.L106: type = ELandmarks2D.L68 lmrks = lmrks[ lmrks_106_to_68_mean_pairs ] lmrks = lmrks.reshape( (68,2,2)).mean(1) if type == ELandmarks2D.L68: mat = Affine2DMat.umeyama( np.concatenate ([ lmrks[17:36], lmrks[36:37], lmrks[39:40], lmrks[42:43], lmrks[45:46], lmrks[48:49], lmrks[54:55] ]), uni_landmarks_68) elif type == ELandmarks2D.L468: src_lmrks = lmrks dst_lmrks = uni_landmarks_468 if exclude_moving_parts: src_lmrks = np.delete(src_lmrks, landmarks_468_moving_parts_indexes, 0) dst_lmrks = np.delete(dst_lmrks, landmarks_468_moving_parts_indexes, 0) mat = Affine2DMat.umeyama(src_lmrks, dst_lmrks) else: raise NotImplementedError() # get corner points in global space g_p = mat.invert().transform_points ( [(0,0),(1,0),(1,1),(0,1),(0.5,0.5) ] ) g_c = g_p[4] # calc diagonal vectors between corners in global space tb_diag_vec = lib_math.segment_to_vector(g_p[0], g_p[2]).astype(np.float32) bt_diag_vec = lib_math.segment_to_vector(g_p[3], g_p[1]).astype(np.float32) mod = lib_math.segment_length(g_p[0],g_p[4])*coverage if head_yaw is not None: # Damp near zero x_offset += -(head_yaw * np.abs(np.tanh(head_yaw*2)) ) * 0.5 # adjust vertical offset to cover more forehead h_vec = (g_p[1]-g_p[0]).astype(np.float32) v_vec = (g_p[3]-g_p[0]).astype(np.float32) g_c += h_vec*x_offset + v_vec*y_offset if not freeze_z_rotation: l_t = np.array([g_c - tb_diag_vec*mod, g_c + bt_diag_vec*mod, g_c + tb_diag_vec*mod], np.float32 ) else: # remove_align - face will be centered in the frame but not aligned l_t = np.array([g_c - tb_diag_vec*mod, g_c + bt_diag_vec*mod, g_c + tb_diag_vec*mod, g_c - bt_diag_vec*mod], np.float32 ) # get area of face square in global space area = 0.5*np.abs(np.dot(l_t[:,0],np.roll(l_t[:,1],1))-np.dot(l_t[:,1],np.roll(l_t[:,0],1))) # calc side of square side = np.float32(np.sqrt(area) / 2) # calc 3 points with unrotated square l_t = np.array([g_c + [-side,-side], g_c + [ side,-side], g_c + [ side, side]], np.float32 ) # calc affine transform from 3 global space points to 3 local space points size of 'output_size' mat = Affine2DMat.from_3_pairs ( l_t, np.float32(( (0,0),(output_size,0),(output_size,output_size) ))) uni_mat = Affine2DUniMat.from_3_pairs ( (l_t / (w,h) ).astype(np.float32), np.float32(( (0,0),(1,0),(1,1) )) ) return mat, uni_mat def cut(self, img : np.ndarray, coverage : float, output_size : int, exclude_moving_parts : bool = False, head_yaw : float = None, x_offset : float = 0, y_offset : float = 0, freeze_z_rotation : bool = False) -> Tuple[np.ndarray, Affine2DUniMat]: """ Cut the face to square of output_size from img using landmarks with given parameters arguments img np.ndarray coverage float output_size int exclude_moving_parts(False) exclude moving parts of the face, such as eyebrows and jaw head_yaw(None) float fit the head in center using provided yaw radian value. x_offset y_offset float uniform x/y offset returns face_image, uni_mat uniform affine matrix to transform uniform img space to uniform face_image space """ h,w = img.shape[0:2] mat, uni_mat = self.calc_cut( (h,w), coverage, output_size, exclude_moving_parts, head_yaw=head_yaw, x_offset=x_offset, y_offset=y_offset, freeze_z_rotation=freeze_z_rotation) face_image = cv2.warpAffine(img, mat, (output_size, output_size), cv2.INTER_CUBIC ) return face_image, uni_mat def draw(self, img : np.ndarray, color, radius=1): """ draw landmarks on the img scaled by img.wh color tuple of values should be the same as img color channels """ h,w = img.shape[0:2] pts = self.as_numpy(w_h=(w,h)).astype(np.int32) for x, y in pts: cv2.circle(img, (x, y), radius, color, lineType=cv2.LINE_AA) def get_convexhull_mask(self, h_w, color=(1,), dtype=np.float32) -> np.ndarray: """ """ h, w = h_w ch = len(color) lmrks = (self._ulmrks * h_w).astype(np.int32) mask = np.zeros( (h,w,ch), dtype=dtype) cv2.fillConvexPoly( mask, cv2.convexHull(lmrks), color) return mask lmrks_106_to_68_mean_pairs = [1,9, 10,11, 12,13, 14,15, 16,2, 3,4, 5,6, 7,8, 0,0, 24,23, 22,21, 20,19, 18,32, 31,30, 29,28, 27,26,25,17, 43,43, 48,44, 49,45, 51,47, 50,46, 102,97, 103,98, 104,99, 105,100, 101,101, 72,72, 73,73, 74,74, 86,86, 77,78, 78,79, 80,80, 85,84, 84,83, 35,35, 41,40, 40,42, 39,39, 37,33, 33,36, 89,89, 95,94, 94,96, 93,93, 91,87, 87,90, 52,52, 64,64, 63,63, 71,71, 67,67, 68,68, 61,61, 58,58, 59,59, 53,53, 56,56, 55,55, 65,65, 66,66, 62,62, 70,70, 69,69, 57,57, 60,60, 54,54] uni_landmarks_68 = np.float32([ [ 0.000213256, 0.106454 ], #17 [ 0.0752622, 0.038915 ], #18 [ 0.18113, 0.0187482 ], #19 [ 0.29077, 0.0344891 ], #20 [ 0.393397, 0.0773906 ], #21 [ 0.586856, 0.0773906 ], #22 [ 0.689483, 0.0344891 ], #23 [ 0.799124, 0.0187482 ], #24 [ 0.904991, 0.038915 ], #25 [ 0.98004, 0.106454 ], #26 [ 0.490127, 0.203352 ], #27 [ 0.490127, 0.307009 ], #28 [ 0.490127, 0.409805 ], #29 [ 0.490127, 0.515625 ], #30 [ 0.36688, 0.587326 ], #31 [ 0.426036, 0.609345 ], #32 [ 0.490127, 0.628106 ], #33 [ 0.554217, 0.609345 ], #34 [ 0.613373, 0.587326 ], #35 [ 0.121737, 0.216423 ], #36 #[ 0.187122, 0.178758 ], #37 #[ 0.265825, 0.179852 ], #38 [ 0.334606, 0.231733 ], #39 #[ 0.260918, 0.245099 ], #40 #[ 0.182743, 0.244077 ], #41 [ 0.645647, 0.231733 ], #42 #[ 0.714428, 0.179852 ], #43 #[ 0.793132, 0.178758 ], #44 [ 0.858516, 0.216423 ], #45 #[ 0.79751, 0.244077 ], #46 #[ 0.719335, 0.245099 ], #47 [ 0.254149, 0.780233 ], #48 [ 0.726104, 0.780233 ], #54 ]) uni_landmarks_468 = np.float32([ [0.499976992607117, 0.652534008026123], [0.500025987625122, 0.547487020492554], [0.499974012374878, 0.602371990680695], [0.482113003730774, 0.471979022026062], [0.500150978565216, 0.527155995368958], [0.499909996986389, 0.498252987861633], [0.499523013830185, 0.40106201171875], [0.289712011814117, 0.380764007568359], [0.499954998493195, 0.312398016452789], [0.499987006187439, 0.269918978214264], [0.500023007392883, 0.107050001621246], [0.500023007392883, 0.666234016418457], [0.5000159740448, 0.679224014282227], [0.500023007392883, 0.692348003387451], [0.499976992607117, 0.695277988910675], [0.499976992607117, 0.70593398809433], [0.499976992607117, 0.719385027885437], [0.499976992607117, 0.737019002437592], [0.499967992305756, 0.781370997428894], [0.499816000461578, 0.562981009483337], [0.473773002624512, 0.573909997940063], [0.104906998574734, 0.254140973091125], [0.365929991006851, 0.409575998783112], [0.338757991790771, 0.41302502155304], [0.311120003461838, 0.409460008144379], [0.274657994508743, 0.389131009578705], [0.393361985683441, 0.403706014156342], [0.345234006643295, 0.344011008739471], [0.370094001293182, 0.346076011657715], [0.319321990013123, 0.347265005111694], [0.297903001308441, 0.353591024875641], [0.24779200553894, 0.410809993743896], [0.396889001131058, 0.842755019664764], [0.280097991228104, 0.375599980354309], [0.106310002505779, 0.399955987930298], [0.2099249958992, 0.391353011131287], [0.355807989835739, 0.534406006336212], [0.471751004457474, 0.65040397644043], [0.474155008792877, 0.680191993713379], [0.439785003662109, 0.657229006290436], [0.414617002010345, 0.66654098033905], [0.450374007225037, 0.680860996246338], [0.428770989179611, 0.682690978050232], [0.374971002340317, 0.727805018424988], [0.486716985702515, 0.547628998756409], [0.485300987958908, 0.527395009994507], [0.257764995098114, 0.314490020275116], [0.401223003864288, 0.455172002315521], [0.429818987846375, 0.548614978790283], [0.421351999044418, 0.533740997314453], [0.276895999908447, 0.532056987285614], [0.483370006084442, 0.499586999416351], [0.33721199631691, 0.282882988452911], [0.296391993761063, 0.293242990970612], [0.169294998049736, 0.193813979625702], [0.447580009698868, 0.302609980106354], [0.392390012741089, 0.353887975215912], [0.354490011930466, 0.696784019470215], [0.067304998636246, 0.730105042457581], [0.442739009857178, 0.572826027870178], [0.457098007202148, 0.584792017936707], [0.381974011659622, 0.694710969924927], [0.392388999462128, 0.694203019142151], [0.277076005935669, 0.271932005882263], [0.422551989555359, 0.563233017921448], [0.385919004678726, 0.281364023685455], [0.383103013038635, 0.255840003490448], [0.331431001424789, 0.119714021682739], [0.229923993349075, 0.232002973556519], [0.364500999450684, 0.189113974571228], [0.229622006416321, 0.299540996551514], [0.173287004232407, 0.278747975826263], [0.472878992557526, 0.666198015213013], [0.446828007698059, 0.668527007102966], [0.422762006521225, 0.673889994621277], [0.445307999849319, 0.580065965652466], [0.388103008270264, 0.693961024284363], [0.403039008378983, 0.706539988517761], [0.403629004955292, 0.693953037261963], [0.460041999816895, 0.557139039039612], [0.431158006191254, 0.692366003990173], [0.452181994915009, 0.692366003990173], [0.475387006998062, 0.692366003990173], [0.465828001499176, 0.779190003871918], [0.472328990697861, 0.736225962638855], [0.473087012767792, 0.717857003211975], [0.473122000694275, 0.704625964164734], [0.473033010959625, 0.695277988910675], [0.427942007780075, 0.695277988910675], [0.426479011774063, 0.703539967536926], [0.423162013292313, 0.711845993995667], [0.4183090031147, 0.720062971115112], [0.390094995498657, 0.639572978019714], [0.013953999616206, 0.560034036636353], [0.499913990497589, 0.58014702796936], [0.413199990987778, 0.69539999961853], [0.409626007080078, 0.701822996139526], [0.468080013990402, 0.601534962654114], [0.422728985548019, 0.585985004901886], [0.463079988956451, 0.593783974647522], [0.37211999297142, 0.47341400384903], [0.334562003612518, 0.496073007583618], [0.411671012639999, 0.546965003013611], [0.242175996303558, 0.14767599105835], [0.290776997804642, 0.201445996761322], [0.327338010072708, 0.256527006626129], [0.399509996175766, 0.748921036720276], [0.441727995872498, 0.261676013469696], [0.429764986038208, 0.187834024429321], [0.412198007106781, 0.108901023864746], [0.288955003023148, 0.398952007293701], [0.218936994671822, 0.435410976409912], [0.41278201341629, 0.398970007896423], [0.257135003805161, 0.355440020561218], [0.427684992551804, 0.437960982322693], [0.448339998722076, 0.536936044692993], [0.178560003638268, 0.45755398273468], [0.247308000922203, 0.457193970680237], [0.286267012357712, 0.467674970626831], [0.332827985286713, 0.460712015628815], [0.368755996227264, 0.447206974029541], [0.398963987827301, 0.432654976844788], [0.476410001516342, 0.405806005001068], [0.189241006970406, 0.523923993110657], [0.228962004184723, 0.348950982093811], [0.490725994110107, 0.562400996685028], [0.404670000076294, 0.485132992267609], [0.019469000399113, 0.401564002037048], [0.426243007183075, 0.420431017875671], [0.396993011236191, 0.548797011375427], [0.266469985246658, 0.376977026462555], [0.439121007919312, 0.51895797252655], [0.032313998788595, 0.644356966018677], [0.419054001569748, 0.387154996395111], [0.462783008813858, 0.505746960639954], [0.238978996872902, 0.779744982719421], [0.198220998048782, 0.831938028335571], [0.107550002634525, 0.540755033493042], [0.183610007166862, 0.740257024765015], [0.134409993886948, 0.333683013916016], [0.385764002799988, 0.883153975009918], [0.490967005491257, 0.579378008842468], [0.382384985685349, 0.508572995662689], [0.174399003386497, 0.397670984268188], [0.318785011768341, 0.39623498916626], [0.343364000320435, 0.400596976280212], [0.396100014448166, 0.710216999053955], [0.187885001301765, 0.588537991046906], [0.430987000465393, 0.944064974784851], [0.318993002176285, 0.898285031318665], [0.266247987747192, 0.869701027870178], [0.500023007392883, 0.190576016902924], [0.499976992607117, 0.954452991485596], [0.366169989109039, 0.398822009563446], [0.393207013607025, 0.39553701877594], [0.410373002290726, 0.391080021858215], [0.194993004202843, 0.342101991176605], [0.388664990663528, 0.362284004688263], [0.365961998701096, 0.355970978736877], [0.343364000320435, 0.355356991291046], [0.318785011768341, 0.35834002494812], [0.301414996385574, 0.363156020641327], [0.058132998645306, 0.319076001644135], [0.301414996385574, 0.387449026107788], [0.499987989664078, 0.618434011936188], [0.415838003158569, 0.624195992946625], [0.445681989192963, 0.566076993942261], [0.465844005346298, 0.620640993118286], [0.49992299079895, 0.351523995399475], [0.288718998432159, 0.819945991039276], [0.335278987884521, 0.852819979190826], [0.440512001514435, 0.902418971061707], [0.128294005990028, 0.791940987110138], [0.408771991729736, 0.373893976211548], [0.455606997013092, 0.451801002025604], [0.499877005815506, 0.908990025520325], [0.375436991453171, 0.924192011356354], [0.11421000212431, 0.615022003650665], [0.448662012815475, 0.695277988910675], [0.4480200111866, 0.704632043838501], [0.447111994028091, 0.715808033943176], [0.444831997156143, 0.730794012546539], [0.430011987686157, 0.766808986663818], [0.406787008047104, 0.685672998428345], [0.400738000869751, 0.681069016456604], [0.392399996519089, 0.677703022956848], [0.367855995893478, 0.663918972015381], [0.247923001646996, 0.601333022117615], [0.452769994735718, 0.420849978923798], [0.43639200925827, 0.359887003898621], [0.416164010763168, 0.368713974952698], [0.413385987281799, 0.692366003990173], [0.228018000721931, 0.683571994304657], [0.468268007040024, 0.352671027183533], [0.411361992359161, 0.804327011108398], [0.499989002943039, 0.469825029373169], [0.479153990745544, 0.442654013633728], [0.499974012374878, 0.439637005329132], [0.432112008333206, 0.493588984012604], [0.499886006116867, 0.866917014122009], [0.49991300702095, 0.821729004383087], [0.456548988819122, 0.819200992584229], [0.344549000263214, 0.745438992977142], [0.37890899181366, 0.574010014533997], [0.374292999505997, 0.780184984207153], [0.319687992334366, 0.570737957954407], [0.357154995203018, 0.604269981384277], [0.295284003019333, 0.621580958366394], [0.447750002145767, 0.862477004528046], [0.410986006259918, 0.508723020553589], [0.31395098567009, 0.775308012962341], [0.354128003120422, 0.812552988529205], [0.324548006057739, 0.703992962837219], [0.189096003770828, 0.646299958229065], [0.279776990413666, 0.71465802192688], [0.1338230073452, 0.682700991630554], [0.336768001317978, 0.644733011722565], [0.429883986711502, 0.466521978378296], [0.455527991056442, 0.548622965812683], [0.437114000320435, 0.558896005153656], [0.467287987470627, 0.529924988746643], [0.414712011814117, 0.335219979286194], [0.37704598903656, 0.322777986526489], [0.344107985496521, 0.320150971412659], [0.312875986099243, 0.32233202457428], [0.283526003360748, 0.333190023899078], [0.241245999932289, 0.382785975933075], [0.102986000478268, 0.468762993812561], [0.267612010240555, 0.424560010433197], [0.297879010438919, 0.433175981044769], [0.333433985710144, 0.433878004550934], [0.366427004337311, 0.426115989685059], [0.396012008190155, 0.416696012020111], [0.420121014118195, 0.41022801399231], [0.007561000064015, 0.480777025222778], [0.432949006557465, 0.569517970085144], [0.458638995885849, 0.479089021682739], [0.473466008901596, 0.545744001865387], [0.476087987422943, 0.563830018043518], [0.468472003936768, 0.555056989192963], [0.433990985155106, 0.582361996173859], [0.483518004417419, 0.562983989715576], [0.482482999563217, 0.57784903049469], [0.42645001411438, 0.389798998832703], [0.438998997211456, 0.39649498462677], [0.450067013502121, 0.400434017181396], [0.289712011814117, 0.368252992630005], [0.276670008897781, 0.363372981548309], [0.517862021923065, 0.471948027610779], [0.710287988185883, 0.380764007568359], [0.526226997375488, 0.573909997940063], [0.895093023777008, 0.254140973091125], [0.634069979190826, 0.409575998783112], [0.661242008209229, 0.41302502155304], [0.688880026340485, 0.409460008144379], [0.725341975688934, 0.389131009578705], [0.606630027294159, 0.40370500087738], [0.654766023159027, 0.344011008739471], [0.629905998706818, 0.346076011657715], [0.680678009986877, 0.347265005111694], [0.702096998691559, 0.353591024875641], [0.75221198797226, 0.410804986953735], [0.602918028831482, 0.842862963676453], [0.719901978969574, 0.375599980354309], [0.893692970275879, 0.399959981441498], [0.790081977844238, 0.391354024410248], [0.643998026847839, 0.534487962722778], [0.528249025344849, 0.65040397644043], [0.525849997997284, 0.680191040039062], [0.560214996337891, 0.657229006290436], [0.585384011268616, 0.66654098033905], [0.549625992774963, 0.680860996246338], [0.57122802734375, 0.682691991329193], [0.624852001667023, 0.72809898853302], [0.513050019741058, 0.547281980514526], [0.51509702205658, 0.527251958847046], [0.742246985435486, 0.314507007598877], [0.598631024360657, 0.454979002475739], [0.570338010787964, 0.548575043678284], [0.578631997108459, 0.533622980117798], [0.723087012767792, 0.532054007053375], [0.516445994377136, 0.499638974666595], [0.662801027297974, 0.282917976379395], [0.70362401008606, 0.293271005153656], [0.830704987049103, 0.193813979625702], [0.552385985851288, 0.302568018436432], [0.607609987258911, 0.353887975215912], [0.645429015159607, 0.696707010269165], [0.932694971561432, 0.730105042457581], [0.557260990142822, 0.572826027870178], [0.542901992797852, 0.584792017936707], [0.6180260181427, 0.694710969924927], [0.607590973377228, 0.694203019142151], [0.722943007946014, 0.271963000297546], [0.577413976192474, 0.563166975975037], [0.614082992076874, 0.281386971473694], [0.616907000541687, 0.255886018276215], [0.668509006500244, 0.119913995265961], [0.770092010498047, 0.232020974159241], [0.635536015033722, 0.189248979091644], [0.77039098739624, 0.299556016921997], [0.826722025871277, 0.278755009174347], [0.527121007442474, 0.666198015213013], [0.553171992301941, 0.668527007102966], [0.577238023281097, 0.673889994621277], [0.554691970348358, 0.580065965652466], [0.611896991729736, 0.693961024284363], [0.59696102142334, 0.706539988517761], [0.596370995044708, 0.693953037261963], [0.539958000183105, 0.557139039039612], [0.568841993808746, 0.692366003990173], [0.547818005084991, 0.692366003990173], [0.52461302280426, 0.692366003990173], [0.534089982509613, 0.779141008853912], [0.527670979499817, 0.736225962638855], [0.526912987232208, 0.717857003211975], [0.526877999305725, 0.704625964164734], [0.526966989040375, 0.695277988910675], [0.572058022022247, 0.695277988910675], [0.573521018028259, 0.703539967536926], [0.57683801651001, 0.711845993995667], [0.581691026687622, 0.720062971115112], [0.609944999217987, 0.639909982681274], [0.986046016216278, 0.560034036636353], [0.5867999792099, 0.69539999961853], [0.590372025966644, 0.701822996139526], [0.531915009021759, 0.601536989212036], [0.577268004417419, 0.585934996604919], [0.536915004253387, 0.593786001205444], [0.627542972564697, 0.473352015018463], [0.665585994720459, 0.495950996875763], [0.588353991508484, 0.546862006187439], [0.757824003696442, 0.14767599105835], [0.709249973297119, 0.201507985591888], [0.672684013843536, 0.256581008434296], [0.600408971309662, 0.74900496006012], [0.55826598405838, 0.261672019958496], [0.570303976535797, 0.187870979309082], [0.588165998458862, 0.109044015407562], [0.711045026779175, 0.398952007293701], [0.781069993972778, 0.435405015945435], [0.587247014045715, 0.398931980133057], [0.742869973182678, 0.355445981025696], [0.572156012058258, 0.437651991844177], [0.55186802148819, 0.536570012569427], [0.821442008018494, 0.457556009292603], [0.752701997756958, 0.457181990146637], [0.71375697851181, 0.467626988887787], [0.66711300611496, 0.460672974586487], [0.631101012229919, 0.447153985500336], [0.6008620262146, 0.432473003864288], [0.523481011390686, 0.405627012252808], [0.810747981071472, 0.523926019668579], [0.771045982837677, 0.348959028720856], [0.509127020835876, 0.562718033790588], [0.595292985439301, 0.485023975372314], [0.980530977249146, 0.401564002037048], [0.573499977588654, 0.420000016689301], [0.602994978427887, 0.548687994480133], [0.733529984951019, 0.376977026462555], [0.560611009597778, 0.519016981124878], [0.967685997486115, 0.644356966018677], [0.580985009670258, 0.387160003185272], [0.537728011608124, 0.505385041236877], [0.760966002941132, 0.779752969741821], [0.801778972148895, 0.831938028335571], [0.892440974712372, 0.54076099395752], [0.816350996494293, 0.740260004997253], [0.865594983100891, 0.333687007427216], [0.614073991775513, 0.883246004581451], [0.508952975273132, 0.579437971115112], [0.617941975593567, 0.508316040039062], [0.825608015060425, 0.397674977779388], [0.681214988231659, 0.39623498916626], [0.656635999679565, 0.400596976280212], [0.603900015354156, 0.710216999053955], [0.81208598613739, 0.588539004325867], [0.56801301240921, 0.944564998149872], [0.681007981300354, 0.898285031318665], [0.733752012252808, 0.869701027870178], [0.633830010890961, 0.398822009563446], [0.606792986392975, 0.39553701877594], [0.589659988880157, 0.391062021255493], [0.805015981197357, 0.342108011245728], [0.611334979534149, 0.362284004688263], [0.634037971496582, 0.355970978736877], [0.656635999679565, 0.355356991291046], [0.681214988231659, 0.35834002494812], [0.698584973812103, 0.363156020641327], [0.941866993904114, 0.319076001644135], [0.698584973812103, 0.387449026107788], [0.584177017211914, 0.624107003211975], [0.554318010807037, 0.566076993942261], [0.534153997898102, 0.62064003944397], [0.711217999458313, 0.819975018501282], [0.664629995822906, 0.852871000766754], [0.559099972248077, 0.902631998062134], [0.871706008911133, 0.791940987110138], [0.591234028339386, 0.373893976211548], [0.544341027736664, 0.451583981513977], [0.624562978744507, 0.924192011356354], [0.88577002286911, 0.615028977394104], [0.551338016986847, 0.695277988910675], [0.551980018615723, 0.704632043838501], [0.552887976169586, 0.715808033943176], [0.555167973041534, 0.730794012546539], [0.569944024085999, 0.767035007476807], [0.593203008174896, 0.685675978660583], [0.599261999130249, 0.681069016456604], [0.607599973678589, 0.677703022956848], [0.631937980651855, 0.663500010967255], [0.752032995223999, 0.601315021514893], [0.547226011753082, 0.420395016670227], [0.563543975353241, 0.359827995300293], [0.583841025829315, 0.368713974952698], [0.586614012718201, 0.692366003990173], [0.771915018558502, 0.683578014373779], [0.531597018241882, 0.352482974529266], [0.588370978832245, 0.804440975189209], [0.52079701423645, 0.442565023899078], [0.567984998226166, 0.493479013442993], [0.543282985687256, 0.819254994392395], [0.655317008495331, 0.745514988899231], [0.621008992195129, 0.574018001556396], [0.625559985637665, 0.78031200170517], [0.680198013782501, 0.570719003677368], [0.64276397228241, 0.604337990283966], [0.704662978649139, 0.621529996395111], [0.552012026309967, 0.862591981887817], [0.589071989059448, 0.508637011051178], [0.685944974422455, 0.775357007980347], [0.645735025405884, 0.812640011310577], [0.675342977046967, 0.703978002071381], [0.810858011245728, 0.646304965019226], [0.72012197971344, 0.714666962623596], [0.866151988506317, 0.682704985141754], [0.663187026977539, 0.644596993923187], [0.570082008838654, 0.466325998306274], [0.544561982154846, 0.548375964164734], [0.562758982181549, 0.558784961700439], [0.531987011432648, 0.530140042304993], [0.585271000862122, 0.335177004337311], [0.622952997684479, 0.32277899980545], [0.655896008014679, 0.320163011550903], [0.687132000923157, 0.322345972061157], [0.716481983661652, 0.333200991153717], [0.758756995201111, 0.382786989212036], [0.897013008594513, 0.468769013881683], [0.732392013072968, 0.424547016620636], [0.70211398601532, 0.433162987232208], [0.66652500629425, 0.433866024017334], [0.633504986763, 0.426087975502014], [0.603875994682312, 0.416586995124817], [0.579657971858978, 0.409945011138916], [0.992439985275269, 0.480777025222778], [0.567192018032074, 0.569419980049133], [0.54136598110199, 0.478899002075195], [0.526564002037048, 0.546118021011353], [0.523913025856018, 0.563830018043518], [0.531529009342194, 0.555056989192963], [0.566035985946655, 0.582329034805298], [0.51631098985672, 0.563053965568542], [0.5174720287323, 0.577877044677734], [0.573594987392426, 0.389806985855103], [0.560697972774506, 0.395331978797913], [0.549755990505219, 0.399751007556915], [0.710287988185883, 0.368252992630005], [0.723330020904541, 0.363372981548309] ]) landmarks_468_moving_parts_indexes = [0, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 37, 38, 39, 40, 41, 42, 43, 46, 52, 53, 54, 55, 56, 57, 58, 61, 62, 63, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 76, 77, 78, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 95, 96, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 117, 118, 124, 130, 132, 133, 135, 136, 138, 139, 140, 143, 144, 145, 146, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 168, 169, 170, 171, 172, 173, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 189, 190, 191, 192, 193, 194, 199, 200, 201, 202, 204, 208, 210, 211, 212, 213, 214, 215, 221, 222, 223, 224, 225, 226, 228, 229, 230, 231, 232, 233, 243, 244, 245, 246, 247, 249, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 267, 268, 269, 270, 271, 272, 273, 276, 282, 283, 284, 285, 286, 287, 288, 291, 292, 293, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 324, 325, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 346, 347, 353, 359, 361, 362, 364, 365, 367, 368, 369, 372, 373, 374, 375, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 394, 395, 396, 397, 398, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 413, 414, 415, 416, 417, 418, 421, 422, 424, 428, 430, 431, 432, 433, 434, 435, 441, 442, 443, 444, 445, 446, 448, 449, 450, 451, 452, 453, 463, 464, 465, 466, 467] uni_landmarks_468 = np.array( [[ 0.49066195, 0.7133885 ], [ 0.49042386, 0.52723485], [ 0.49050152, 0.6244965 ], [ 0.45844677, 0.39348277], [ 0.4905825 , 0.49120593], [ 0.49006602, 0.43998772], [ 0.48907965, 0.26775706], [ 0.11721139, 0.23243594], [ 0.48957095, 0.11063451], [ 0.48949632, 0.03535742], [ 0.48905632, -0.25326234], [ 0.4907858 , 0.73766613], [ 0.49081355, 0.7606857 ], [ 0.4908666 , 0.7839426 ], [ 0.49079415, 0.78913504], [ 0.4908271 , 0.80801845], [ 0.49086872, 0.831855 ], [ 0.49092326, 0.8631041 ], [ 0.49104446, 0.94170016], [ 0.49009967, 0.5546924 ], [ 0.44398275, 0.5741402 ], [-0.2106727 , 0.00861922], [ 0.2523662 , 0.2832579 ], [ 0.2042254 , 0.28945392], [ 0.1552372 , 0.28322184], [ 0.09056008, 0.24730967], [ 0.30096018, 0.27277085], [ 0.21548809, 0.16713436], [ 0.2595488 , 0.17071684], [ 0.16957955, 0.17298089], [ 0.13164258, 0.18425746], [ 0.043018 , 0.28581 ], [ 0.30856833, 1.0507976 ], [ 0.10015843, 0.22331452], [-0.20773543, 0.26701325], [-0.02414621, 0.25144747], [ 0.23481508, 0.5045001 ], [ 0.44063616, 0.7097012 ], [ 0.4449884 , 0.762481 ], [ 0.3840104 , 0.7218947 ], [ 0.33943903, 0.73847425], [ 0.40284824, 0.76374006], [ 0.36457124, 0.76704985], [ 0.26937196, 0.84716266], [ 0.46683946, 0.5275276 ], [ 0.4642676 , 0.49167544], [ 0.06039319, 0.11509081], [ 0.31504983, 0.36394927], [ 0.3660137 , 0.52945083], [ 0.3509634 , 0.50311893], [ 0.09496811, 0.5005815 ], [ 0.46075967, 0.4424029 ], [ 0.20108324, 0.05883435], [ 0.12877828, 0.07731954], [-0.09675749, -0.09848522], [ 0.39672711, 0.09345116], [ 0.29908365, 0.18449144], [ 0.23298171, 0.7922538 ], [-0.27583498, 0.85219014], [ 0.38898414, 0.5723152 ], [ 0.41446668, 0.59347576], [ 0.28167963, 0.7884952 ], [ 0.30013445, 0.7875627 ], [ 0.09448256, 0.03961415], [ 0.3531811 , 0.5553779 ], [ 0.2873921 , 0.05599196], [ 0.28232294, 0.01076962], [ 0.1903341 , -0.23029903], [ 0.0108011 , -0.03099815], [ 0.24915197, -0.10741784], [ 0.01047484, 0.08868673], [-0.08942058, 0.05201372], [ 0.44268388, 0.7376863 ], [ 0.39652622, 0.741894 ], [ 0.35389552, 0.7514722 ], [ 0.393559 , 0.5851372 ], [ 0.2925385 , 0.7871472 ], [ 0.31904542, 0.80939215], [ 0.32005206, 0.787085 ], [ 0.4195982 , 0.5444628 ], [ 0.3688312 , 0.78418756], [ 0.40608776, 0.7841225 ], [ 0.4472093 , 0.78405076], [ 0.43053833, 0.9379409 ], [ 0.44192585, 0.8617842 ], [ 0.44321233, 0.82923037], [ 0.4432334 , 0.80578357], [ 0.44304678, 0.78921837], [ 0.36314115, 0.7893578 ], [ 0.36057413, 0.8040033 ], [ 0.35472178, 0.8187327 ], [ 0.34614718, 0.83330894], [ 0.2959003 , 0.69076014], [-0.37090415, 0.5509728 ], [ 0.4903264 , 0.5851119 ], [ 0.3370172 , 0.78961957], [ 0.33070365, 0.8010128 ], [ 0.43397966, 0.6231119 ], [ 0.35356513, 0.59569615], [ 0.42509514, 0.6093918 ], [ 0.2635329 , 0.39636588], [ 0.19704658, 0.43663597], [ 0.33384863, 0.52658314], [ 0.03225203, -0.18047164], [ 0.11854403, -0.08533629], [ 0.18350407, 0.01215954], [ 0.31292278, 0.8845064 ], [ 0.3862302 , 0.02093028], [ 0.36480215, -0.1098879 ], [ 0.33342764, -0.2497105 ], [ 0.11592615, 0.2646692 ], [-0.00803981, 0.3294946 ], [ 0.33535972, 0.26431814], [ 0.05940344, 0.18766014], [ 0.36188984, 0.33336782], [ 0.39879864, 0.50869733], [-0.07952328, 0.36885905], [ 0.04230375, 0.36800843], [ 0.11137532, 0.3864613 ], [ 0.19386435, 0.37397826], [ 0.25749052, 0.34993485], [ 0.310977 , 0.3240539 ], [ 0.44813582, 0.2762354 ], [-0.06039021, 0.4864401 ], [ 0.00945808, 0.17624807], [ 0.4739895 , 0.55369264], [ 0.32125092, 0.4170324 ], [-0.36162117, 0.27013144], [ 0.3592803 , 0.3023075 ], [ 0.30784345, 0.529875 ], [ 0.07601253, 0.22579695], [ 0.3824061 , 0.47686696], [-0.33810768, 0.70034444], [ 0.34643772, 0.24336138], [ 0.42429656, 0.45338264], [ 0.02854156, 0.939626 ], [-0.04352415, 1.0322431 ], [-0.20510256, 0.51651907], [-0.06969981, 0.8698207 ], [-0.1581445 , 0.14948419], [ 0.2889787 , 1.1224228 ], [ 0.47446907, 0.58377683], [ 0.2818322 , 0.4586393 ], [-0.08708218, 0.2627534 ], [ 0.16877942, 0.25976214], [ 0.21234928, 0.267416 ], [ 0.30676025, 0.81592965], [-0.06259334, 0.6009466 ], [ 0.36930662, 1.2302231 ], [ 0.17070079, 1.149443 ], [ 0.07714309, 1.0989524 ], [ 0.48931465, -0.1052461 ], [ 0.49159575, 1.2484183 ], [ 0.2527582 , 0.26420003], [ 0.30066028, 0.25829503], [ 0.3310663 , 0.25034374], [-0.05075949, 0.16421606], [ 0.29250854, 0.19938153], [ 0.2522571 , 0.18826446], [ 0.21220936, 0.18724632], [ 0.16866222, 0.19260857], [ 0.13789575, 0.2011967 ], [-0.29335994, 0.12383505], [ 0.1379709 , 0.24424627], [ 0.49057597, 0.65296 ], [ 0.34147182, 0.663431 ], [ 0.3941785 , 0.5603462 ], [ 0.43007633, 0.6569765 ], [ 0.48963526, 0.17996965], [ 0.11681002, 1.0107123 ], [ 0.19942053, 1.068824 ], [ 0.38605705, 1.1563928 ], [-0.16756529, 0.9615808 ], [ 0.32817602, 0.21989337], [ 0.41141313, 0.3578073 ], [ 0.49127796, 1.1678538 ], [ 0.27080515, 1.195178 ], [-0.19307071, 0.6481067 ], [ 0.399859 , 0.7892937 ], [ 0.39875022, 0.80587196], [ 0.39717573, 0.8256797 ], [ 0.3931817 , 0.85224336], [ 0.3670306 , 0.9161113 ], [ 0.3256227 , 0.7724022 ], [ 0.31488904, 0.76426226], [ 0.3001029 , 0.7583232 ], [ 0.2565659 , 0.73397243], [ 0.0438394 , 0.6234349 ], [ 0.40628996, 0.30296788], [ 0.37707803, 0.19498621], [ 0.34125936, 0.21069102], [ 0.33733743, 0.7842425 ], [ 0.00882016, 0.769232 ], [ 0.4335431 , 0.1821002 ], [ 0.33409703, 0.9826546 ], [ 0.49011812, 0.3896104 ], [ 0.45311242, 0.34152514], [ 0.4899982 , 0.33611432], [ 0.369907 , 0.43193236], [ 0.49116373, 1.0932964 ], [ 0.49107185, 1.0132186 ], [ 0.41421878, 1.008873 ], [ 0.21551576, 0.8785059 ], [ 0.27587482, 0.57461077], [ 0.2683325 , 0.9399872 ], [ 0.17091931, 0.56899554], [ 0.23741819, 0.6283017 ], [ 0.12783033, 0.65916985], [ 0.39875996, 1.0855893 ], [ 0.33251646, 0.45881665], [ 0.16138549, 0.93153137], [ 0.23269826, 0.99740875], [ 0.17994387, 0.8051213 ], [-0.06026869, 0.7033027 ], [ 0.10063827, 0.8241594 ], [-0.15810522, 0.7679798 ], [ 0.2014156 , 0.7000692 ], [ 0.365875 , 0.3839739 ], [ 0.4115726 , 0.5293855 ], [ 0.378973 , 0.5476473 ], [ 0.43235463, 0.49621448], [ 0.3385827 , 0.15134089], [ 0.27179635, 0.12940899], [ 0.21341887, 0.12485553], [ 0.15807948, 0.12881717], [ 0.10610204, 0.14814937], [ 0.03133116, 0.236169 ], [-0.21341309, 0.38895622], [ 0.07818349, 0.3101151 ], [ 0.1318462 , 0.32528982], [ 0.19485526, 0.32642388], [ 0.25329807, 0.31256682], [ 0.30569646, 0.29578218], [ 0.34839994, 0.2842457 ], [-0.3824783 , 0.41054142], [ 0.37162504, 0.5664833 ], [ 0.41687053, 0.40615496], [ 0.4433516 , 0.5242282 ], [ 0.44805393, 0.5562703 ], [ 0.43453053, 0.5407472 ], [ 0.37351128, 0.58924097], [ 0.46121803, 0.55474806], [ 0.45942986, 0.5810936 ], [ 0.35955238, 0.24802393], [ 0.38181108, 0.25985107], [ 0.40143687, 0.26679716], [ 0.11717269, 0.2102652 ], [ 0.0940459 , 0.2016577 ], [ 0.5217974 , 0.39331725], [ 0.8625129 , 0.23113514], [ 0.5369363 , 0.57397795], [ 1.1896138 , 0.00617525], [ 0.7275363 , 0.28242856], [ 0.7756985 , 0.2884565 ], [ 0.82466465, 0.28205347], [ 0.88921595, 0.24591576], [ 0.6788919 , 0.27210945], [ 0.7640089 , 0.166177 ], [ 0.7199609 , 0.16991326], [ 0.8099376 , 0.17186326], [ 0.8479136 , 0.18300733], [ 0.9368992 , 0.28424102], [ 0.67367214, 1.0503516 ], [ 0.8795338 , 0.22195426], [ 1.1875838 , 0.26458502], [ 1.0039485 , 0.24965489], [ 0.74551606, 0.50375396], [ 0.54075617, 0.7095265 ], [ 0.5365969 , 0.76231945], [ 0.59742403, 0.7215222 ], [ 0.6420548 , 0.7379461 ], [ 0.5787324 , 0.7634331 ], [ 0.617019 , 0.766611 ], [ 0.71218634, 0.8469107 ], [ 0.513503 , 0.52683127], [ 0.5170686 , 0.49132976], [ 0.91894245, 0.11362247], [ 0.66487545, 0.36299667], [ 0.61502695, 0.52894545], [ 0.6296784 , 0.50242335], [ 0.88566196, 0.49919614], [ 0.5193738 , 0.4423927 ], [ 0.7780587 , 0.05788935], [ 0.8504331 , 0.07610969], [ 1.0753254 , -0.1005309 ], [ 0.5824533 , 0.09305263], [ 0.6804744 , 0.18382579], [ 0.7485537 , 0.79121745], [ 1.2577202 , 0.8495136 ], [ 0.59192824, 0.57196105], [ 0.5665197 , 0.59321034], [ 0.6999867 , 0.7877651 ], [ 0.6814933 , 0.7868972 ], [ 0.8846023 , 0.03829005], [ 0.62761134, 0.5547819 ], [ 0.6917209 , 0.05532694], [ 0.6966465 , 0.01012804], [ 0.7876697 , -0.2309872 ], [ 0.9680314 , -0.03263693], [ 0.7294528 , -0.1080169 ], [ 0.96877015, 0.08704082], [ 1.0685298 , 0.05000517], [ 0.538806 , 0.7375185 ], [ 0.5849781 , 0.7415651 ], [ 0.62764204, 0.7509944 ], [ 0.58739805, 0.5847989 ], [ 0.68912315, 0.78645504], [ 0.6626941 , 0.8087924 ], [ 0.6616096 , 0.7864889 ], [ 0.5612171 , 0.5442156 ], [ 0.61282057, 0.7837617 ], [ 0.575564 , 0.7838267 ], [ 0.5344426 , 0.7838985 ], [ 0.551505 , 0.93764293], [ 0.5399973 , 0.8616131 ], [ 0.53859717, 0.8290639 ], [ 0.5384943 , 0.8056173 ], [ 0.53862303, 0.78905153], [ 0.6185288 , 0.78891206], [ 0.62114686, 0.8035485 ], [ 0.62705064, 0.81825733], [ 0.635676 , 0.8328036 ], [ 0.6854969 , 0.69067734], [ 1.3517375 , 0.54796624], [ 0.64465326, 0.78908265], [ 0.6510032 , 0.8004538 ], [ 0.5471015 , 0.62291807], [ 0.62742317, 0.59512955], [ 0.55593795, 0.6091671 ], [ 0.7161671 , 0.39546603], [ 0.7836529 , 0.435396 ], [ 0.64694774, 0.5258542 ], [ 0.94603044, -0.1820665 ], [ 0.86011904, -0.08652072], [ 0.79549086, 0.01118712], [ 0.66893554, 0.8840338 ], [ 0.59274685, 0.02056277], [ 0.613851 , -0.11025709], [ 0.64526045, -0.25000137], [ 0.8639107 , 0.26336375], [ 0.9881146 , 0.3277454 ], [ 0.6445285 , 0.26371115], [ 0.92017305, 0.18616839], [ 0.61790556, 0.3323734 ], [ 0.58225924, 0.5077285 ], [ 1.0597262 , 0.36687428], [ 0.93791103, 0.36642405], [ 0.86892897, 0.38505408], [ 0.78624976, 0.37287512], [ 0.7223912 , 0.34902957], [ 0.6687594 , 0.32310694], [ 0.5315497 , 0.2757726 ], [ 1.0409807 , 0.48452145], [ 0.9700836 , 0.17458573], [ 0.5065989 , 0.55419755], [ 0.6590531 , 0.41624966], [ 1.3414742 , 0.26715896], [ 0.62023264, 0.30108824], [ 0.67289865, 0.5290446 ], [ 0.9036883 , 0.22435239], [ 0.59769833, 0.47659585], [ 1.3194624 , 0.6974514 ], [ 0.63339525, 0.24286939], [ 0.5571053 , 0.45250946], [ 0.9535533 , 0.9380257 ], [ 1.0260391 , 1.0303764 ], [ 1.1858007 , 0.51410204], [ 1.0515786 , 0.867869 ], [ 1.1375865 , 0.14722979], [ 0.6935665 , 1.1218798 ], [ 0.5063422 , 0.58382744], [ 0.69926125, 0.45745537], [ 1.0669235 , 0.26074636], [ 0.8110406 , 0.25864118], [ 0.7674977 , 0.26644707], [ 0.67500204, 0.81528693], [ 1.0435516 , 0.5990178 ], [ 0.6121316 , 1.2306852 ], [ 0.81222653, 1.1483234 ], [ 0.9056057 , 1.0975065 ], [ 0.7270778 , 0.26337218], [ 0.6791554 , 0.25763443], [ 0.6487802 , 0.24975733], [ 1.0302606 , 0.16233999], [ 0.68710136, 0.19869283], [ 0.72731376, 0.18743533], [ 0.7673578 , 0.1862774 ], [ 0.81092334, 0.1914876 ], [ 0.84171957, 0.1999683 ], [ 1.2727026 , 0.12110176], [ 0.8417947 , 0.24301787], [ 0.63978463, 0.6627527 ], [ 0.5866921 , 0.5600102 ], [ 0.5511283 , 0.6567636 ], [ 0.8655194 , 1.009457 ], [ 0.78306264, 1.0678959 ], [ 0.59620714, 1.1564037 ], [ 1.149833 , 0.9592815 ], [ 0.65151644, 0.21932903], [ 0.56865776, 0.3571483 ], [ 0.71228063, 1.1944076 ], [ 1.1742088 , 0.6457327 ], [ 0.5818109 , 0.78897613], [ 0.5829775 , 0.80555046], [ 0.5846211 , 0.82535255], [ 0.5887078 , 0.8519021 ], [ 0.6150045 , 0.916079 ], [ 0.65597004, 0.771831 ], [ 0.66669285, 0.7636482 ], [ 0.6814582 , 0.7576576 ], [ 0.7245435 , 0.73241323], [ 0.9371713 , 0.62184393], [ 0.5736738 , 0.30186948], [ 0.60240346, 0.19448838], [ 0.6383993 , 0.21017241], [ 0.64431435, 0.7837067 ], [ 0.9726586 , 0.7675604 ], [ 0.54576766, 0.18157108], [ 0.6477745 , 0.98230904], [ 0.5269076 , 0.34123868], [ 0.61068684, 0.43131724], [ 0.56792 , 1.0087004 ], [ 0.7662271 , 0.8776794 ], [ 0.7048996 , 0.57387614], [ 0.7136024 , 0.9394351 ], [ 0.8097781 , 0.56784695], [ 0.7435453 , 0.62753886], [ 0.85328954, 0.6578133 ], [ 0.5835228 , 1.0854707 ], [ 0.64810187, 0.45811343], [ 0.82059515, 0.9304676 ], [ 0.7494546 , 0.9966611 ], [ 0.8015866 , 0.80400985], [ 1.0415541 , 0.70138854], [ 0.8809724 , 0.8228132 ], [ 1.1396528 , 0.7657218 ], [ 0.7798614 , 0.69881856], [ 0.6143189 , 0.383193 ], [ 0.56934875, 0.52867246], [ 0.60162777, 0.54706186], [ 0.5470082 , 0.4963955 ], [ 0.6408297 , 0.15073723], [ 0.7075675 , 0.12865019], [ 0.76593757, 0.12391254], [ 0.8212976 , 0.12768434], [ 0.87334216, 0.14682971], [ 0.948411 , 0.23457018], [ 1.1936799 , 0.38651106], [ 0.90181875, 0.30865455], [ 0.84818983, 0.3240165 ], [ 0.7851249 , 0.32537246], [ 0.72658616, 0.3116911 ], [ 0.6740513 , 0.2949461 ], [ 0.63111407, 0.28325075], [ 1.362823 , 0.4074953 ], [ 0.60951644, 0.5658945 ], [ 0.5634702 , 0.4055624 ], [ 0.5374476 , 0.5247268 ], [ 0.53280455, 0.5561224 ], [ 0.5462737 , 0.5405522 ], [ 0.6075077 , 0.58877414], [ 0.51933056, 0.55477065], [ 0.52143395, 0.58103496], [ 0.62030756, 0.24758299], [ 0.59746987, 0.2574137 ], [ 0.5780933 , 0.2652785 ], [ 0.8624742 , 0.2089644 ], [ 0.8855709 , 0.20027623]], dtype=np.float32) # import numpy as np # import cv2 # pts = uni_landmarks_468 # res = 900 # pts -= pts.min(axis=0) # pts /= pts.max(axis=0) # pts *= [res, res] # pts = pts.astype(np.int) # img = np.zeros( (res,res,3), np.uint8 ) # wnd_name = 'asd' # selected = [False]*len(pts) # sel = [0, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 37, 38, 39, 40, 41, 42, 43, 46, 52, 53, 54, 55, 56, 57, 58, 61, 62, 63, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 76, 77, 78, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 95, 96, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 117, 118, 124, 130, 132, 133, 135, 136, 138, 139, 140, 143, 144, 145, 146, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 168, 169, 170, 171, 172, 173, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 189, 190, 191, 192, 193, 194, 199, 200, 201, 202, 204, 208, 210, 211, 212, 213, 214, 215, 221, 222, 223, 224, 225, 226, 228, 229, 230, 231, 232, 233, 243, 244, 245, 246, 247, 249, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 267, 268, 269, 270, 271, 272, 273, 276, 282, 283, 284, 285, 286, 287, 288, 291, 292, 293, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 324, 325, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 346, 347, 353, 359, 361, 362, 364, 365, 367, 368, 369, 372, 373, 374, 375, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 394, 395, 396, 397, 398, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 413, 414, 415, 416, 417, 418, 421, 422, 424, 428, 430, 431, 432, 433, 434, 435, 441, 442, 443, 444, 445, 446, 448, 449, 450, 451, 452, 453, 463, 464, 465, 466, 467] # print(len(sel)) # for i in sel: # selected[i] = True # select_holding = False # unselect_holding = False # def onMouse(event, x, y, flags, _): # global select_holding # global unselect_holding # if event == cv2.EVENT_LBUTTONDOWN: # select_holding = True # elif event == cv2.EVENT_LBUTTONUP: # select_holding = False # elif event == cv2.EVENT_RBUTTONDOWN: # unselect_holding = True # elif event == cv2.EVENT_RBUTTONUP: # unselect_holding = False # elif event == cv2.EVENT_MBUTTONDOWN: # print([ i for i, x in enumerate(selected) if x == True ]) # pt_idx = np.argsort( np.linalg.norm(pts - [x,y], axis=1) )[0] # if select_holding: # selected[pt_idx] = True # if unselect_holding: # selected[pt_idx] = False # cv2.namedWindow(wnd_name) # cv2.setMouseCallback(wnd_name, onMouse) # while True: # for pt_idx, (x,y) in enumerate(pts): # if selected[pt_idx]: # color = (255,0,0) # else: # color = (255,255,255) # cv2.circle(img, (x,y), 1, color, 1 ) # cv2.imshow(wnd_name,img) # cv2.waitKey(5) # import multiprocessing # import threading # import time # def proc1(ev = multiprocessing.Event()): # while True: # ev.wait(timeout=0.001) # # def proc2(obj : ClassWithEvent): # # print('before wait') # # obj.ev.wait(timeout=0.005) # # print('after wait') # if __name__ == '__main__': # multiprocessing.set_start_method('spawn', force=True) # ev = multiprocessing.Event() # ev.set() # p = multiprocessing.Process(target=proc1, args=(ev,), daemon=True) # threading.Thread(target=lambda: p.start(), daemon=True).start() # time.sleep(1.0) # p.terminate() # p.join() # del p # # p = multiprocessing.Process(target=proc2, args=(obj,), daemon=True) # # threading.Thread(target=lambda: p.start(), daemon=True).start() # # time.sleep(1.0) # import code # code.interact(local=dict(globals(), **locals()))