UNPKG

@needle-tools/facefilter

Version:

Needle Engine FaceFilter

96 lines (83 loc) 37.4 kB
import { NormalizedLandmark } from '@mediapipe/tasks-vision'; import { Mathf } from '@needle-tools/engine'; import { Mesh, BufferGeometry, BufferAttribute, Vector3, Box3 } from 'three'; import { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader.js'; // export async function loadOBJ() { // const url = "https://raw.githubusercontent.com/google-ai-edge/mediapipe/master/mediapipe/modules/face_geometry/data/canonical_face_model.obj"; // const loader = new OBJLoader(); // const model = await loader.loadAsync(url); // console.log(model); // return model.children[0]; // } const uvs_canonical = [[0.499977, 0.347466], [0.500026, 0.452513], [0.499974, 0.397628], [0.482113, 0.528021], [0.500151, 0.472844], [0.49991, 0.501747], [0.499523, 0.598938], [0.289712, 0.619236], [0.499955, 0.687602], [0.499987, 0.730081], [0.500023, 0.89295], [0.500023, 0.333766], [0.500016, 0.320776], [0.500023, 0.307652], [0.499977, 0.304722], [0.499977, 0.294066], [0.499977, 0.280615], [0.499977, 0.262981], [0.499968, 0.218629], [0.499816, 0.437019], [0.473773, 0.42609], [0.104907, 0.745859], [0.36593, 0.590424], [0.338758, 0.586975], [0.31112, 0.59054], [0.274658, 0.610869], [0.393362, 0.596294], [0.345234, 0.655989], [0.370094, 0.653924], [0.319322, 0.652735], [0.297903, 0.646409], [0.247792, 0.58919], [0.396889, 0.157245], [0.280098, 0.6244], [0.10631, 0.600044], [0.209925, 0.608647], [0.355808, 0.465594], [0.471751, 0.349596], [0.474155, 0.319808], [0.439785, 0.342771], [0.414617, 0.333459], [0.450374, 0.319139], [0.428771, 0.317309], [0.374971, 0.272195], [0.486717, 0.452371], [0.485301, 0.472605], [0.257765, 0.68551], [0.401223, 0.544828], [0.429819, 0.451385], [0.421352, 0.466259], [0.276896, 0.467943], [0.48337, 0.500413], [0.337212, 0.717117], [0.296392, 0.706757], [0.169295, 0.806186], [0.44758, 0.69739], [0.39239, 0.646112], [0.35449, 0.303216], [0.067305, 0.269895], [0.442739, 0.427174], [0.457098, 0.415208], [0.381974, 0.305289], [0.392389, 0.305797], [0.277076, 0.728068], [0.422552, 0.436767], [0.385919, 0.718636], [0.383103, 0.74416], [0.331431, 0.880286], [0.229924, 0.767997], [0.364501, 0.810886], [0.229622, 0.700459], [0.173287, 0.721252], [0.472879, 0.333802], [0.446828, 0.331473], [0.422762, 0.32611], [0.445308, 0.419934], [0.388103, 0.306039], [0.403039, 0.29346], [0.403629, 0.306047], [0.460042, 0.442861], [0.431158, 0.307634], [0.452182, 0.307634], [0.475387, 0.307634], [0.465828, 0.22081], [0.472329, 0.263774], [0.473087, 0.282143], [0.473122, 0.295374], [0.473033, 0.304722], [0.427942, 0.304722], [0.426479, 0.29646], [0.423162, 0.288154], [0.418309, 0.279937], [0.390095, 0.360427], [0.013954, 0.439966], [0.499914, 0.419853], [0.4132, 0.3046], [0.409626, 0.298177], [0.46808, 0.398465], [0.422729, 0.414015], [0.46308, 0.406216], [0.37212, 0.526586], [0.334562, 0.503927], [0.411671, 0.453035], [0.242176, 0.852324], [0.290777, 0.798554], [0.327338, 0.743473], [0.39951, 0.251079], [0.441728, 0.738324], [0.429765, 0.812166], [0.412198, 0.891099], [0.288955, 0.601048], [0.218937, 0.564589], [0.412782, 0.60103], [0.257135, 0.64456], [0.427685, 0.562039], [0.44834, 0.463064], [0.17856, 0.542446], [0.247308, 0.542806], [0.286267, 0.532325], [0.332828, 0.539288], [0.368756, 0.552793], [0.398964, 0.567345], [0.47641, 0.594194], [0.189241, 0.476076], [0.228962, 0.651049], [0.490726, 0.437599], [0.40467, 0.514867], [0.019469, 0.598436], [0.426243, 0.579569], [0.396993, 0.451203], [0.26647, 0.623023], [0.439121, 0.481042], [0.032314, 0.355643], [0.419054, 0.612845], [0.462783, 0.494253], [0.238979, 0.220255], [0.198221, 0.168062], [0.10755, 0.459245], [0.18361, 0.259743], [0.13441, 0.666317], [0.385764, 0.116846], [0.490967, 0.420622], [0.382385, 0.491427], [0.174399, 0.602329], [0.318785, 0.603765], [0.343364, 0.599403], [0.3961, 0.289783], [0.187885, 0.411462], [0.430987, 0.055935], [0.318993, 0.101715], [0.266248, 0.130299], [0.500023, 0.809424], [0.499977, 0.045547], [0.36617, 0.601178], [0.393207, 0.604463], [0.410373, 0.60892], [0.194993, 0.657898], [0.388665, 0.637716], [0.365962, 0.644029], [0.343364, 0.644643], [0.318785, 0.64166], [0.301415, 0.636844], [0.058133, 0.680924], [0.301415, 0.612551], [0.499988, 0.381566], [0.415838, 0.375804], [0.445682, 0.433923], [0.465844, 0.379359], [0.499923, 0.648476], [0.288719, 0.180054], [0.335279, 0.14718], [0.440512, 0.097581], [0.128294, 0.208059], [0.408772, 0.626106], [0.455607, 0.548199], [0.499877, 0.09101], [0.375437, 0.075808], [0.11421, 0.384978], [0.448662, 0.304722], [0.44802, 0.295368], [0.447112, 0.284192], [0.444832, 0.269206], [0.430012, 0.233191], [0.406787, 0.314327], [0.400738, 0.318931], [0.3924, 0.322297], [0.367856, 0.336081], [0.247923, 0.398667], [0.45277, 0.57915], [0.436392, 0.640113], [0.416164, 0.631286], [0.413386, 0.307634], [0.228018, 0.316428], [0.468268, 0.647329], [0.411362, 0.195673], [0.499989, 0.530175], [0.479154, 0.557346], [0.499974, 0.560363], [0.432112, 0.506411], [0.499886, 0.133083], [0.499913, 0.178271], [0.456549, 0.180799], [0.344549, 0.254561], [0.378909, 0.42599], [0.374293, 0.219815], [0.319688, 0.429262], [0.357155, 0.39573], [0.295284, 0.378419], [0.44775, 0.137523], [0.410986, 0.491277], [0.313951, 0.224692], [0.354128, 0.187447], [0.324548, 0.296007], [0.189096, 0.3537], [0.279777, 0.285342], [0.133823, 0.317299], [0.336768, 0.355267], [0.429884, 0.533478], [0.455528, 0.451377], [0.437114, 0.441104], [0.467288, 0.470075], [0.414712, 0.66478], [0.377046, 0.677222], [0.344108, 0.679849], [0.312876, 0.677668], [0.283526, 0.66681], [0.241246, 0.617214], [0.102986, 0.531237], [0.267612, 0.57544], [0.297879, 0.566824], [0.333434, 0.566122], [0.366427, 0.573884], [0.396012, 0.583304], [0.420121, 0.589772], [0.007561, 0.519223], [0.432949, 0.430482], [0.458639, 0.520911], [0.473466, 0.454256], [0.476088, 0.43617], [0.468472, 0.444943], [0.433991, 0.417638], [0.483518, 0.437016], [0.482483, 0.422151], [0.42645, 0.610201], [0.438999, 0.603505], [0.450067, 0.599566], [0.289712, 0.631747], [0.27667, 0.636627], [0.517862, 0.528052], [0.710288, 0.619236], [0.526227, 0.42609], [0.895093, 0.745859], [0.63407, 0.590424], [0.661242, 0.586975], [0.68888, 0.59054], [0.725342, 0.610869], [0.60663, 0.596295], [0.654766, 0.655989], [0.629906, 0.653924], [0.680678, 0.652735], [0.702097, 0.646409], [0.752212, 0.589195], [0.602918, 0.157137], [0.719902, 0.6244], [0.893693, 0.60004], [0.790082, 0.608646], [0.643998, 0.465512], [0.528249, 0.349596], [0.52585, 0.319809], [0.560215, 0.342771], [0.585384, 0.333459], [0.549626, 0.319139], [0.571228, 0.317308], [0.624852, 0.271901], [0.51305, 0.452718], [0.515097, 0.472748], [0.742247, 0.685493], [0.598631, 0.545021], [0.570338, 0.451425], [0.578632, 0.466377], [0.723087, 0.467946], [0.516446, 0.500361], [0.662801, 0.717082], [0.703624, 0.706729], [0.830705, 0.806186], [0.552386, 0.697432], [0.60761, 0.646112], [0.645429, 0.303293], [0.932695, 0.269895], [0.557261, 0.427174], [0.542902, 0.415208], [0.618026, 0.305289], [0.607591, 0.305797], [0.722943, 0.728037], [0.577414, 0.436833], [0.614083, 0.718613], [0.616907, 0.744114], [0.668509, 0.880086], [0.770092, 0.767979], [0.635536, 0.810751], [0.770391, 0.700444], [0.826722, 0.721245], [0.527121, 0.333802], [0.553172, 0.331473], [0.577238, 0.32611], [0.554692, 0.419934], [0.611897, 0.306039], [0.596961, 0.29346], [0.596371, 0.306047], [0.539958, 0.442861], [0.568842, 0.307634], [0.547818, 0.307634], [0.524613, 0.307634], [0.53409, 0.220859], [0.527671, 0.263774], [0.526913, 0.282143], [0.526878, 0.295374], [0.526967, 0.304722], [0.572058, 0.304722], [0.573521, 0.29646], [0.576838, 0.288154], [0.581691, 0.279937], [0.609945, 0.36009], [0.986046, 0.439966], [0.5868, 0.3046], [0.590372, 0.298177], [0.531915, 0.398463], [0.577268, 0.414065], [0.536915, 0.406214], [0.627543, 0.526648], [0.665586, 0.504049], [0.588354, 0.453138], [0.757824, 0.852324], [0.70925, 0.798492], [0.672684, 0.743419], [0.600409, 0.250995], [0.558266, 0.738328], [0.570304, 0.812129], [0.588166, 0.890956], [0.711045, 0.601048], [0.78107, 0.564595], [0.587247, 0.601068], [0.74287, 0.644554], [0.572156, 0.562348], [0.551868, 0.46343], [0.821442, 0.542444], [0.752702, 0.542818], [0.713757, 0.532373], [0.667113, 0.539327], [0.631101, 0.552846], [0.600862, 0.567527], [0.523481, 0.594373], [0.810748, 0.476074], [0.771046, 0.651041], [0.509127, 0.437282], [0.595293, 0.514976], [0.980531, 0.598436], [0.5735, 0.58], [0.602995, 0.451312], [0.73353, 0.623023], [0.560611, 0.480983], [0.967686, 0.355643], [0.580985, 0.61284], [0.537728, 0.494615], [0.760966, 0.220247], [0.801779, 0.168062], [0.892441, 0.459239], [0.816351, 0.25974], [0.865595, 0.666313], [0.614074, 0.116754], [0.508953, 0.420562], [0.617942, 0.491684], [0.825608, 0.602325], [0.681215, 0.603765], [0.656636, 0.599403], [0.6039, 0.289783], [0.812086, 0.411461], [0.568013, 0.055435], [0.681008, 0.101715], [0.733752, 0.130299], [0.63383, 0.601178], [0.606793, 0.604463], [0.58966, 0.608938], [0.805016, 0.657892], [0.611335, 0.637716], [0.634038, 0.644029], [0.656636, 0.644643], [0.681215, 0.64166], [0.698585, 0.636844], [0.941867, 0.680924], [0.698585, 0.612551], [0.584177, 0.375893], [0.554318, 0.433923], [0.534154, 0.37936], [0.711218, 0.180025], [0.66463, 0.147129], [0.5591, 0.097368], [0.871706, 0.208059], [0.591234, 0.626106], [0.544341, 0.548416], [0.624563, 0.075808], [0.88577, 0.384971], [0.551338, 0.304722], [0.55198, 0.295368], [0.552888, 0.284192], [0.555168, 0.269206], [0.569944, 0.232965], [0.593203, 0.314324], [0.599262, 0.318931], [0.6076, 0.322297], [0.631938, 0.3365], [0.752033, 0.398685], [0.547226, 0.579605], [0.563544, 0.640172], [0.583841, 0.631286], [0.586614, 0.307634], [0.771915, 0.316422], [0.531597, 0.647517], [0.588371, 0.195559], [0.520797, 0.557435], [0.567985, 0.506521], [0.543283, 0.180745], [0.655317, 0.254485], [0.621009, 0.425982], [0.62556, 0.219688], [0.680198, 0.429281], [0.642764, 0.395662], [0.704663, 0.37847], [0.552012, 0.137408], [0.589072, 0.491363], [0.685945, 0.224643], [0.645735, 0.18736], [0.675343, 0.296022], [0.810858, 0.353695], [0.720122, 0.285333], [0.866152, 0.317295], [0.663187, 0.355403], [0.570082, 0.533674], [0.544562, 0.451624], [0.562759, 0.441215], [0.531987, 0.46986], [0.585271, 0.664823], [0.622953, 0.677221], [0.655896, 0.679837], [0.687132, 0.677654], [0.716482, 0.666799], [0.758757, 0.617213], [0.897013, 0.531231], [0.732392, 0.575453], [0.702114, 0.566837], [0.666525, 0.566134], [0.633505, 0.573912], [0.603876, 0.583413], [0.579658, 0.590055], [0.99244, 0.519223], [0.567192, 0.43058], [0.541366, 0.521101], [0.526564, 0.453882], [0.523913, 0.43617], [0.531529, 0.444943], [0.566036, 0.417671], [0.516311, 0.436946], [0.517472, 0.422123], [0.573595, 0.610193], [0.560698, 0.604668], [0.549756, 0.600249], [0.710288, 0.631747], [0.72333, 0.636627]]; const uvs_procreate = [[0.5, 0.4264138], [0.5, 0.5089197], [0.5, 0.4686638], [0.4858298, 0.5547871], [0.5, 0.5175187], [0.5, 0.5338411], [0.5, 0.6110764], [0.2805265, 0.6347286], [0.5, 0.7417583], [0.5, 0.7793878], [0.5, 0.8938162], [0.5, 0.4179876], [0.5, 0.4090751], [0.5, 0.4008656], [0.5, 0.3537], [0.5, 0.3433449], [0.5, 0.3334051], [0.5, 0.3189329], [0.5, 0.2847248], [0.5, 0.5006548], [0.482585, 0.4878969], [0.1196013, 0.788066], [0.3412578, 0.6048268], [0.3165913, 0.6023787], [0.2915974, 0.6056454], [0.2634866, 0.6315652], [0.3608277, 0.6155198], [0.312358, 0.7101664], [0.3396467, 0.7068731], [0.2826909, 0.703652], [0.2658705, 0.6918719], [0.2218047, 0.6123845], [0.4063474, 0.2250524], [0.2687401, 0.6462706], [0.1112035, 0.6553332], [0.1810132, 0.6438236], [0.3488216, 0.5072646], [0.4760613, 0.4262066], [0.4789794, 0.4068746], [0.446896, 0.4225649], [0.4233053, 0.4094889], [0.4594696, 0.4013772], [0.4412754, 0.3955772], [0.3835194, 0.3507709], [0.489795, 0.5084811], [0.4880416, 0.5170463], [0.2193608, 0.7365863], [0.3997581, 0.5799434], [0.4307721, 0.506979], [0.4250007, 0.5209625], [0.2528225, 0.5010315], [0.4867841, 0.5338985], [0.2996651, 0.7639786], [0.2524098, 0.757337], [0.1725281, 0.8234616], [0.4458041, 0.7542378], [0.3641976, 0.6987641], [0.358503, 0.3809863], [0.06063318, 0.3338498], [0.4373001, 0.4837532], [0.4596405, 0.4700361], [0.3924315, 0.3757056], [0.4177605, 0.3762611], [0.2403112, 0.7711622], [0.4238161, 0.4930874], [0.3633198, 0.7685537], [0.3604001, 0.7932935], [0.321901, 0.8702379], [0.2113714, 0.7962968], [0.3472663, 0.8305072], [0.2009887, 0.7445474], [0.1622838, 0.7608513], [0.4787771, 0.4186497], [0.4550625, 0.4116073], [0.4327328, 0.4032321], [0.440062, 0.4748663], [0.4003948, 0.375701], [0.4175249, 0.3647895], [0.4308616, 0.3768246], [0.4595368, 0.4990045], [0.4455866, 0.3905197], [0.460755, 0.3958081], [0.4796359, 0.3991181], [0.46731, 0.287487], [0.4724973, 0.3214968], [0.4741301, 0.3353087], [0.4754549, 0.3443815], [0.4769784, 0.3539358], [0.4372259, 0.3637175], [0.4327311, 0.3586829], [0.4277672, 0.3527076], [0.4216998, 0.3450617], [0.3934931, 0.4339796], [0.03702325, 0.5336529], [0.5, 0.4882157], [0.4313386, 0.3691437], [0.4228182, 0.3660065], [0.4702356, 0.4648562], [0.4234222, 0.4724772], [0.4656074, 0.4677808], [0.3651297, 0.5574974], [0.3191767, 0.531894], [0.4163468, 0.5074026], [0.2386606, 0.8491542], [0.268216, 0.8165471], [0.2909172, 0.7865036], [0.4036986, 0.3247814], [0.4386032, 0.7853849], [0.422894, 0.8376397], [0.4061298, 0.8867314], [0.277289, 0.6186666], [0.1894774, 0.5940352], [0.3754579, 0.6301491], [0.2287771, 0.6892209], [0.426898, 0.5969748], [0.4525638, 0.5126048], [0.1590719, 0.5826434], [0.2174201, 0.5675326], [0.2582694, 0.5525491], [0.3129907, 0.557565], [0.355893, 0.5757394], [0.3877079, 0.5972538], [0.4772315, 0.6099592], [0.1692545, 0.5165449], [0.1953376, 0.6953571], [0.4931592, 0.5004207], [0.4100334, 0.5571164], [0.05543435, 0.6726039], [0.4127628, 0.6154665], [0.4003895, 0.5014462], [0.2533032, 0.6496038], [0.4475878, 0.5286032], [0.03926444, 0.4425439], [0.3632672, 0.6449236], [0.4696487, 0.5332126], [0.2205372, 0.2616815], [0.175781, 0.1949722], [0.1058744, 0.5199652], [0.1649271, 0.3056794], [0.1311931, 0.715682], [0.3978224, 0.1885402], [0.4934651, 0.4880412], [0.3805647, 0.5326988], [0.154117, 0.6431957], [0.2984451, 0.6240894], [0.3158252, 0.6207459], [0.4065445, 0.3617959], [0.1707271, 0.4603447], [0.4432631, 0.1475734], [0.3334248, 0.1550484], [0.2662904, 0.1655289], [0.5, 0.8401799], [0.5, 0.1428936], [0.3327595, 0.6221129], [0.3481884, 0.6302037], [0.3579472, 0.6369971], [0.1702968, 0.7027576], [0.3506387, 0.6718016], [0.3342472, 0.6754614], [0.3118362, 0.6770415], [0.2907284, 0.6728223], [0.2812643, 0.667866], [0.08077121, 0.738031], [0.2870663, 0.6294951], [0.5, 0.4555224], [0.4206612, 0.4466807], [0.4403921, 0.4898409], [0.4679195, 0.4529672], [0.5, 0.6745888], [0.2860109, 0.2250599], [0.3429336, 0.2041222], [0.4486892, 0.1833848], [0.109363, 0.2454156], [0.3622733, 0.6616974], [0.4615903, 0.5752641], [0.5, 0.1794699], [0.3928421, 0.1517425], [0.1089326, 0.4488127], [0.4553869, 0.3573959], [0.4514545, 0.3505998], [0.4489054, 0.3434419], [0.4442472, 0.3287269], [0.4312642, 0.3008049], [0.4307432, 0.3868302], [0.4165011, 0.387686], [0.4010236, 0.3918805], [0.3721061, 0.4112828], [0.2320824, 0.449739], [0.453108, 0.6065453], [0.4173802, 0.68295], [0.3810349, 0.6736439], [0.4373854, 0.3854016], [0.2157546, 0.3751378], [0.4604967, 0.6742588], [0.4173614, 0.2619512], [0.5, 0.554572], [0.4819341, 0.5770875], [0.5, 0.5782142], [0.4428635, 0.5494438], [0.5, 0.2139157], [0.5, 0.2470725], [0.4591182, 0.2493412], [0.3498467, 0.3253703], [0.3785083, 0.4808499], [0.3810428, 0.2881907], [0.3084473, 0.4746699], [0.3563237, 0.4563869], [0.2870304, 0.4364939], [0.4532615, 0.215474], [0.4206767, 0.5408133], [0.3156177, 0.2830706], [0.3609085, 0.2492505], [0.3237342, 0.3710533], [0.1743103, 0.4084691], [0.2734175, 0.3460723], [0.1209128, 0.3786525], [0.3372058, 0.4240166], [0.4372599, 0.5701997], [0.4570615, 0.5034234], [0.4352607, 0.4967324], [0.4731705, 0.5156264], [0.3942779, 0.7220693], [0.3472955, 0.7301209], [0.307299, 0.7322875], [0.2720139, 0.7306966], [0.247343, 0.7153552], [0.2202493, 0.6506522], [0.1063452, 0.5892756], [0.2407073, 0.5934239], [0.2719873, 0.5789008], [0.3125386, 0.5777702], [0.3493408, 0.5907804], [0.3750395, 0.6079531], [0.3953251, 0.6240107], [0.04175603, 0.6091485], [0.431079, 0.4867027], [0.467061, 0.5535556], [0.4779042, 0.5073684], [0.483086, 0.4969605], [0.4728429, 0.5009724], [0.4311202, 0.4770756], [0.4878266, 0.4990406], [0.4880969, 0.4870421], [0.3847258, 0.6448752], [0.4114873, 0.6394892], [0.4345452, 0.6366605], [0.27327, 0.6616998], [0.2520135, 0.6773149], [0.5141702, 0.5547871], [0.7194735, 0.6347286], [0.517415, 0.4878969], [0.8803987, 0.788066], [0.6587422, 0.6048268], [0.6834087, 0.6023787], [0.7084026, 0.6056454], [0.7365134, 0.6315652], [0.6391723, 0.6155198], [0.687642, 0.7101664], [0.6603533, 0.7068731], [0.7173091, 0.703652], [0.7341295, 0.6918719], [0.7781953, 0.6123845], [0.5936526, 0.2250524], [0.7312599, 0.6462706], [0.8887965, 0.6553332], [0.8189868, 0.6438236], [0.6511784, 0.5072646], [0.5239387, 0.4262066], [0.5210206, 0.4068746], [0.553104, 0.4225649], [0.5766947, 0.4094889], [0.5405304, 0.4013772], [0.5587246, 0.3955772], [0.6164806, 0.3507709], [0.510205, 0.5084811], [0.5119584, 0.5170463], [0.7806392, 0.7365863], [0.6002419, 0.5799434], [0.5692279, 0.506979], [0.5749993, 0.5209625], [0.7471775, 0.5010315], [0.5132159, 0.5338985], [0.7003349, 0.7639786], [0.7475902, 0.757337], [0.8274719, 0.8234616], [0.5541959, 0.7542378], [0.6358024, 0.6987641], [0.641497, 0.3809863], [0.9393668, 0.3338498], [0.5626999, 0.4837532], [0.5403595, 0.4700361], [0.6075685, 0.3757056], [0.5822395, 0.3762611], [0.7596888, 0.7711622], [0.5761839, 0.4930874], [0.6366802, 0.7685537], [0.6395999, 0.7932935], [0.678099, 0.8702379], [0.7886286, 0.7962968], [0.6527337, 0.8305072], [0.7990113, 0.7445474], [0.8377162, 0.7608513], [0.5212229, 0.4186497], [0.5449375, 0.4116073], [0.5672672, 0.4032321], [0.559938, 0.4748663], [0.5996052, 0.375701], [0.5824751, 0.3647895], [0.5691384, 0.3768246], [0.5404632, 0.4990045], [0.5544134, 0.3905197], [0.539245, 0.3958081], [0.5203641, 0.3991181], [0.53269, 0.287487], [0.5275027, 0.3214968], [0.5258699, 0.3353087], [0.5245451, 0.3443815], [0.5230216, 0.3539358], [0.5627741, 0.3637175], [0.567269, 0.3586829], [0.5722327, 0.3527076], [0.5783002, 0.3450617], [0.6065069, 0.4339796], [0.9629768, 0.5336529], [0.5686615, 0.3691437], [0.5771818, 0.3660065], [0.5297644, 0.4648562], [0.5765778, 0.4724772], [0.5343926, 0.4677808], [0.6348703, 0.5574974], [0.6808233, 0.531894], [0.5836532, 0.5074026], [0.7613394, 0.8491542], [0.731784, 0.8165471], [0.7090828, 0.7865036], [0.5963014, 0.3247814], [0.5613968, 0.7853849], [0.577106, 0.8376397], [0.5938702, 0.8867314], [0.722711, 0.6186666], [0.8105226, 0.5940352], [0.6245421, 0.6301491], [0.7712229, 0.6892209], [0.573102, 0.5969748], [0.5474362, 0.5126048], [0.8409281, 0.5826434], [0.7825799, 0.5675326], [0.7417306, 0.5525491], [0.6870093, 0.557565], [0.644107, 0.5757394], [0.6122921, 0.5972538], [0.5227685, 0.6099592], [0.8307455, 0.5165449], [0.8046624, 0.6953571], [0.5068408, 0.5004207], [0.5899666, 0.5571164], [0.9445657, 0.6726039], [0.5872372, 0.6154665], [0.5996105, 0.5014462], [0.7466968, 0.6496038], [0.5524122, 0.5286032], [0.9607356, 0.4425439], [0.6367328, 0.6449236], [0.5303513, 0.5332126], [0.7794628, 0.2616815], [0.824219, 0.1949722], [0.8941256, 0.5199652], [0.8350729, 0.3056794], [0.8688069, 0.715682], [0.6021776, 0.1885402], [0.5065349, 0.4880412], [0.6194353, 0.5326988], [0.845883, 0.6431957], [0.7015549, 0.6240894], [0.6841748, 0.6207459], [0.5934556, 0.3617959], [0.8292729, 0.4603447], [0.5567369, 0.1475734], [0.6665752, 0.1550484], [0.7337096, 0.1655289], [0.6672405, 0.6221129], [0.6518116, 0.6302037], [0.6420528, 0.6369971], [0.8297032, 0.7027576], [0.6493613, 0.6718016], [0.6657528, 0.6754614], [0.6881638, 0.6770415], [0.7092716, 0.6728223], [0.7187357, 0.667866], [0.9192288, 0.738031], [0.7129337, 0.6294951], [0.5793388, 0.4466807], [0.5596079, 0.4898409], [0.5320805, 0.4529672], [0.7139891, 0.2250599], [0.6570664, 0.2041222], [0.5513108, 0.1833848], [0.890637, 0.2454156], [0.6377267, 0.6616974], [0.5384097, 0.5752641], [0.6071579, 0.1517425], [0.8910674, 0.4488127], [0.5446131, 0.3573959], [0.5485455, 0.3505998], [0.5510945, 0.3434419], [0.5557528, 0.3287269], [0.5687358, 0.3008049], [0.5692568, 0.3868302], [0.5834989, 0.387686], [0.5989764, 0.3918805], [0.6278939, 0.4112828], [0.7679176, 0.449739], [0.546892, 0.6065453], [0.5826198, 0.68295], [0.618965, 0.6736439], [0.5626147, 0.3854016], [0.7842454, 0.3751378], [0.5395033, 0.6742588], [0.5826386, 0.2619512], [0.5180659, 0.5770875], [0.5571365, 0.5494438], [0.5408818, 0.2493412], [0.6501533, 0.3253703], [0.6214917, 0.4808499], [0.6189572, 0.2881907], [0.6915527, 0.4746699], [0.6436763, 0.4563869], [0.7129696, 0.4364939], [0.5467385, 0.215474], [0.5793233, 0.5408133], [0.6843823, 0.2830706], [0.6390915, 0.2492505], [0.6762658, 0.3710533], [0.8256897, 0.4084691], [0.7265825, 0.3460723], [0.8790872, 0.3786525], [0.6627942, 0.4240166], [0.5627401, 0.5701997], [0.5429385, 0.5034234], [0.5647393, 0.4967324], [0.5268295, 0.5156264], [0.6057221, 0.7220693], [0.6527045, 0.7301209], [0.692701, 0.7322875], [0.7279861, 0.7306966], [0.7526569, 0.7153552], [0.7797507, 0.6506522], [0.8936548, 0.5892756], [0.7592927, 0.5934239], [0.7280127, 0.5789008], [0.6874614, 0.5777702], [0.6506592, 0.5907804], [0.6249605, 0.6079531], [0.6046749, 0.6240107], [0.958244, 0.6091485], [0.568921, 0.4867027], [0.532939, 0.5535556], [0.5220958, 0.5073684], [0.516914, 0.4969605], [0.5271571, 0.5009724], [0.5688798, 0.4770756], [0.5121734, 0.4990406], [0.5119031, 0.4870421], [0.6152742, 0.6448752], [0.5885127, 0.6394892], [0.5654548, 0.6366605], [0.72673, 0.6616998], [0.7479864, 0.6773149]] const faces = [173, 155, 133, 246, 33, 7, 382, 398, 362, 263, 466, 249, 308, 415, 324, 78, 95, 191, 356, 389, 264, 127, 34, 162, 368, 264, 389, 139, 162, 34, 267, 0, 302, 37, 72, 0, 11, 302, 0, 11, 0, 72, 349, 451, 350, 120, 121, 231, 452, 350, 451, 232, 231, 121, 267, 302, 269, 37, 39, 72, 303, 269, 302, 73, 72, 39, 357, 343, 350, 128, 121, 114, 277, 350, 343, 47, 114, 121, 350, 452, 357, 121, 128, 232, 453, 357, 452, 233, 232, 128, 299, 333, 297, 69, 67, 104, 332, 297, 333, 103, 104, 67, 175, 152, 396, 175, 171, 152, 377, 396, 152, 148, 152, 171, 381, 384, 382, 154, 155, 157, 398, 382, 384, 173, 157, 155, 280, 347, 330, 50, 101, 118, 348, 330, 347, 119, 118, 101, 269, 303, 270, 39, 40, 73, 304, 270, 303, 74, 73, 40, 9, 336, 151, 9, 151, 107, 337, 151, 336, 108, 107, 151, 344, 278, 360, 115, 131, 48, 279, 360, 278, 49, 48, 131, 262, 431, 418, 32, 194, 211, 424, 418, 431, 204, 211, 194, 304, 408, 270, 74, 40, 184, 409, 270, 408, 185, 184, 40, 272, 310, 407, 42, 183, 80, 415, 407, 310, 191, 80, 183, 322, 270, 410, 92, 186, 40, 409, 410, 270, 185, 40, 186, 347, 449, 348, 118, 119, 229, 450, 348, 449, 230, 229, 119, 434, 432, 430, 214, 210, 212, 422, 430, 432, 202, 212, 210, 313, 314, 18, 83, 18, 84, 17, 18, 314, 17, 84, 18, 307, 375, 306, 77, 76, 146, 291, 306, 375, 61, 146, 76, 259, 387, 260, 29, 30, 160, 388, 260, 387, 161, 160, 30, 286, 414, 384, 56, 157, 190, 398, 384, 414, 173, 190, 157, 418, 424, 406, 194, 182, 204, 335, 406, 424, 106, 204, 182, 367, 416, 364, 138, 135, 192, 434, 364, 416, 214, 192, 135, 391, 423, 327, 165, 98, 203, 358, 327, 423, 129, 203, 98, 298, 301, 284, 68, 54, 71, 251, 284, 301, 21, 71, 54, 4, 275, 5, 4, 5, 45, 281, 5, 275, 51, 45, 5, 254, 373, 253, 24, 23, 144, 374, 253, 373, 145, 144, 23, 320, 321, 307, 90, 77, 91, 375, 307, 321, 146, 91, 77, 280, 425, 411, 50, 187, 205, 427, 411, 425, 207, 205, 187, 421, 313, 200, 201, 200, 83, 18, 200, 313, 18, 83, 200, 335, 321, 406, 106, 182, 91, 405, 406, 321, 181, 91, 182, 405, 321, 404, 181, 180, 91, 320, 404, 321, 90, 91, 180, 17, 314, 16, 17, 16, 84, 315, 16, 314, 85, 84, 16, 425, 266, 426, 205, 206, 36, 423, 426, 266, 203, 36, 206, 369, 396, 400, 140, 176, 171, 377, 400, 396, 148, 171, 176, 391, 269, 322, 165, 92, 39, 270, 322, 269, 40, 39, 92, 417, 465, 413, 193, 189, 245, 464, 413, 465, 244, 245, 189, 257, 258, 386, 27, 159, 28, 385, 386, 258, 158, 28, 159, 260, 388, 467, 30, 247, 161, 466, 467, 388, 246, 161, 247, 248, 456, 419, 3, 196, 236, 399, 419, 456, 174, 236, 196, 333, 298, 332, 104, 103, 68, 284, 332, 298, 54, 68, 103, 285, 8, 417, 55, 193, 8, 168, 417, 8, 168, 8, 193, 340, 261, 346, 111, 117, 31, 448, 346, 261, 228, 31, 117, 285, 417, 441, 55, 221, 193, 413, 441, 417, 189, 193, 221, 327, 460, 326, 98, 97, 240, 328, 326, 460, 99, 240, 97, 277, 355, 329, 47, 100, 126, 371, 329, 355, 142, 126, 100, 309, 392, 438, 79, 218, 166, 439, 438, 392, 219, 166, 218, 381, 382, 256, 154, 26, 155, 341, 256, 382, 112, 155, 26, 360, 279, 420, 131, 198, 49, 429, 420, 279, 209, 49, 198, 365, 364, 379, 136, 150, 135, 394, 379, 364, 169, 135, 150, 355, 277, 437, 126, 217, 47, 343, 437, 277, 114, 47, 217, 443, 444, 282, 223, 52, 224, 283, 282, 444, 53, 224, 52, 281, 275, 363, 51, 134, 45, 440, 363, 275, 220, 45, 134, 431, 262, 395, 211, 170, 32, 369, 395, 262, 140, 32, 170, 337, 299, 338, 108, 109, 69, 297, 338, 299, 67, 69, 109, 335, 273, 321, 106, 91, 43, 375, 321, 273, 146, 43, 91, 348, 450, 349, 119, 120, 230, 451, 349, 450, 231, 230, 120, 467, 359, 342, 247, 113, 130, 446, 342, 359, 226, 130, 113, 282, 283, 334, 52, 105, 53, 293, 334, 283, 63, 53, 105, 250, 458, 462, 20, 242, 238, 461, 462, 458, 241, 238, 242, 276, 353, 300, 46, 70, 124, 383, 300, 353, 156, 124, 70, 325, 292, 324, 96, 95, 62, 308, 324, 292, 78, 62, 95, 283, 276, 293, 53, 63, 46, 300, 293, 276, 70, 46, 63, 447, 264, 345, 227, 116, 34, 372, 345, 264, 143, 34, 116, 352, 345, 346, 123, 117, 116, 340, 346, 345, 111, 116, 117, 1, 19, 274, 1, 44, 19, 354, 274, 19, 125, 19, 44, 248, 281, 456, 3, 236, 51, 363, 456, 281, 134, 51, 236, 425, 426, 427, 205, 207, 206, 436, 427, 426, 216, 206, 207, 380, 381, 252, 153, 22, 154, 256, 252, 381, 26, 154, 22, 391, 393, 269, 165, 39, 167, 267, 269, 393, 37, 167, 39, 199, 428, 200, 199, 200, 208, 421, 200, 428, 201, 208, 200, 330, 329, 266, 101, 36, 100, 371, 266, 329, 142, 100, 36, 422, 432, 273, 202, 43, 212, 287, 273, 432, 57, 212, 43, 290, 250, 328, 60, 99, 20, 462, 328, 250, 242, 20, 99, 258, 286, 385, 28, 158, 56, 384, 385, 286, 157, 56, 158, 342, 446, 353, 113, 124, 226, 265, 353, 446, 35, 226, 124, 257, 386, 259, 27, 29, 159, 387, 259, 386, 160, 159, 29, 430, 422, 431, 210, 211, 202, 424, 431, 422, 204, 202, 211, 445, 342, 276, 225, 46, 113, 353, 276, 342, 124, 113, 46, 424, 422, 335, 204, 106, 202, 273, 335, 422, 43, 202, 106, 306, 292, 307, 76, 77, 62, 325, 307, 292, 96, 62, 77, 366, 447, 352, 137, 123, 227, 345, 352, 447, 116, 227, 123, 302, 268, 303, 72, 73, 38, 271, 303, 268, 41, 38, 73, 371, 358, 266, 142, 36, 129, 423, 266, 358, 203, 129, 36, 327, 294, 460, 98, 240, 64, 455, 460, 294, 235, 64, 240, 294, 331, 278, 64, 48, 102, 279, 278, 331, 49, 102, 48, 303, 271, 304, 73, 74, 41, 272, 304, 271, 42, 41, 74, 427, 436, 434, 207, 214, 216, 432, 434, 436, 212, 216, 214, 304, 272, 408, 74, 184, 42, 407, 408, 272, 183, 42, 184, 394, 430, 395, 169, 170, 210, 431, 395, 430, 211, 210, 170, 395, 369, 378, 170, 149, 140, 400, 378, 369, 176, 140, 149, 296, 334, 299, 66, 69, 105, 333, 299, 334, 104, 105, 69, 417, 168, 351, 193, 122, 168, 6, 351, 168, 6, 168, 122, 280, 411, 352, 50, 123, 187, 376, 352, 411, 147, 187, 123, 319, 320, 325, 89, 96, 90, 307, 325, 320, 77, 90, 96, 285, 295, 336, 55, 107, 65, 296, 336, 295, 66, 65, 107, 404, 320, 403, 180, 179, 90, 319, 403, 320, 89, 90, 179, 330, 348, 329, 101, 100, 119, 349, 329, 348, 120, 119, 100, 334, 293, 333, 105, 104, 63, 298, 333, 293, 68, 63, 104, 323, 454, 366, 93, 137, 234, 447, 366, 454, 227, 234, 137, 16, 315, 15, 16, 15, 85, 316, 15, 315, 86, 85, 15, 429, 279, 358, 209, 129, 49, 331, 358, 279, 102, 49, 129, 15, 316, 14, 15, 14, 86, 317, 14, 316, 87, 86, 14, 8, 285, 9, 8, 9, 55, 336, 9, 285, 107, 55, 9, 329, 349, 277, 100, 47, 120, 350, 277, 349, 121, 120, 47, 252, 253, 380, 22, 153, 23, 374, 380, 253, 145, 23, 153, 402, 403, 318, 178, 88, 179, 319, 318, 403, 89, 179, 88, 351, 6, 419, 122, 196, 6, 197, 419, 6, 197, 6, 196, 324, 318, 325, 95, 96, 88, 319, 325, 318, 89, 88, 96, 397, 367, 365, 172, 136, 138, 364, 365, 367, 135, 138, 136, 288, 435, 397, 58, 172, 215, 367, 397, 435, 138, 215, 172, 438, 439, 344, 218, 115, 219, 278, 344, 439, 48, 219, 115, 271, 311, 272, 41, 42, 81, 310, 272, 311, 80, 81, 42, 5, 281, 195, 5, 195, 51, 248, 195, 281, 3, 51, 195, 273, 287, 375, 43, 146, 57, 291, 375, 287, 61, 57, 146, 396, 428, 175, 171, 175, 208, 199, 175, 428, 199, 208, 175, 268, 312, 271, 38, 41, 82, 311, 271, 312, 81, 82, 41, 444, 445, 283, 224, 53, 225, 276, 283, 445, 46, 225, 53, 254, 339, 373, 24, 144, 110, 390, 373, 339, 163, 110, 144, 295, 282, 296, 65, 66, 52, 334, 296, 282, 105, 52, 66, 346, 448, 347, 117, 118, 228, 449, 347, 448, 229, 228, 118, 454, 356, 447, 234, 227, 127, 264, 447, 356, 34, 127, 227, 336, 296, 337, 107, 108, 66, 299, 337, 296, 69, 66, 108, 151, 337, 10, 151, 10, 108, 338, 10, 337, 109, 108, 10, 278, 439, 294, 48, 64, 219, 455, 294, 439, 235, 219, 64, 407, 415, 292, 183, 62, 191, 308, 292, 415, 78, 191, 62, 358, 371, 429, 129, 209, 142, 355, 429, 371, 126, 142, 209, 345, 372, 340, 116, 111, 143, 265, 340, 372, 35, 143, 111, 388, 390, 466, 161, 246, 163, 249, 466, 390, 7, 163, 246, 352, 346, 280, 123, 50, 117, 347, 280, 346, 118, 117, 50, 295, 442, 282, 65, 52, 222, 443, 282, 442, 223, 222, 52, 19, 94, 354, 19, 125, 94, 370, 354, 94, 141, 94, 125, 295, 285, 442, 65, 222, 55, 441, 442, 285, 221, 55, 222, 419, 197, 248, 196, 3, 197, 195, 248, 197, 195, 197, 3, 359, 263, 255, 130, 25, 33, 249, 255, 263, 7, 33, 25, 275, 274, 440, 45, 220, 44, 457, 440, 274, 237, 44, 220, 300, 383, 301, 70, 71, 156, 368, 301, 383, 139, 156, 71, 417, 351, 465, 193, 245, 122, 412, 465, 351, 188, 122, 245, 466, 263, 467, 246, 247, 33, 359, 467, 263, 130, 33, 247, 389, 251, 368, 162, 139, 21, 301, 368, 251, 71, 21, 139, 374, 386, 380, 145, 153, 159, 385, 380, 386, 158, 159, 153, 379, 394, 378, 150, 149, 169, 395, 378, 394, 170, 169, 149, 351, 419, 412, 122, 188, 196, 399, 412, 419, 174, 196, 188, 426, 322, 436, 206, 216, 92, 410, 436, 322, 186, 92, 216, 387, 373, 388, 160, 161, 144, 390, 388, 373, 163, 144, 161, 393, 326, 164, 167, 164, 97, 2, 164, 326, 2, 97, 164, 354, 370, 461, 125, 241, 141, 462, 461, 370, 242, 141, 241, 0, 267, 164, 0, 164, 37, 393, 164, 267, 167, 37, 164, 11, 12, 302, 11, 72, 12, 268, 302, 12, 38, 12, 72, 386, 374, 387, 159, 160, 145, 373, 387, 374, 144, 145, 160, 12, 13, 268, 12, 38, 13, 312, 268, 13, 82, 13, 38, 293, 300, 298, 63, 68, 70, 301, 298, 300, 71, 70, 68, 340, 265, 261, 111, 31, 35, 446, 261, 265, 226, 35, 31, 380, 385, 381, 153, 154, 158, 384, 381, 385, 157, 158, 154, 280, 330, 425, 50, 205, 101, 266, 425, 330, 36, 101, 205, 423, 391, 426, 203, 206, 165, 322, 426, 391, 92, 165, 206, 429, 355, 420, 209, 198, 126, 437, 420, 355, 217, 126, 198, 391, 327, 393, 165, 167, 98, 326, 393, 327, 97, 98, 167, 457, 438, 440, 237, 220, 218, 344, 440, 438, 115, 218, 220, 382, 362, 341, 155, 112, 133, 463, 341, 362, 243, 133, 112, 457, 461, 459, 237, 239, 241, 458, 459, 461, 238, 241, 239, 434, 430, 364, 214, 135, 210, 394, 364, 430, 169, 210, 135, 414, 463, 398, 190, 173, 243, 362, 398, 463, 133, 243, 173, 262, 428, 369, 32, 140, 208, 396, 369, 428, 171, 208, 140, 457, 274, 461, 237, 241, 44, 354, 461, 274, 125, 44, 241, 316, 403, 317, 86, 87, 179, 402, 317, 403, 178, 179, 87, 315, 404, 316, 85, 86, 180, 403, 316, 404, 179, 180, 86, 314, 405, 315, 84, 85, 181, 404, 315, 405, 180, 181, 85, 313, 406, 314, 83, 84, 182, 405, 314, 406, 181, 182, 84, 418, 406, 421, 194, 201, 182, 313, 421, 406, 83, 182, 201, 366, 401, 323, 137, 93, 177, 361, 323, 401, 132, 177, 93, 408, 407, 306, 184, 76, 183, 292, 306, 407, 62, 183, 76, 408, 306, 409, 184, 185, 76, 291, 409, 306, 61, 76, 185, 410, 409, 287, 186, 57, 185, 291, 287, 409, 61, 185, 57, 436, 410, 432, 216, 212, 186, 287, 432, 410, 57, 186, 212, 434, 416, 427, 214, 207, 192, 411, 427, 416, 187, 192, 207, 264, 368, 372, 34, 143, 139, 383, 372, 368, 156, 139, 143, 457, 459, 438, 237, 218, 239, 309, 438, 459, 79, 239, 218, 352, 376, 366, 123, 137, 147, 401, 366, 376, 177, 147, 137, 4, 1, 275, 4, 45, 1, 274, 275, 1, 44, 1, 45, 428, 262, 421, 208, 201, 32, 418, 421, 262, 194, 32, 201, 327, 358, 294, 98, 64, 129, 331, 294, 358, 102, 129, 64, 367, 435, 416, 138, 192, 215, 433, 416, 435, 213, 215, 192, 455, 439, 289, 235, 59, 219, 392, 289, 439, 166, 219, 59, 328, 462, 326, 99, 97, 242, 370, 326, 462, 141, 242, 97, 326, 370, 2, 97, 2, 141, 94, 2, 370, 94, 141, 2, 460, 455, 305, 240, 75, 235, 289, 305, 455, 59, 235, 75, 448, 339, 449, 228, 229, 110, 254, 449, 339, 24, 110, 229, 261, 446, 255, 31, 25, 226, 359, 255, 446, 130, 226, 25, 449, 254, 450, 229, 230, 24, 253, 450, 254, 23, 24, 230, 450, 253, 451, 230, 231, 23, 252, 451, 253, 22, 23, 231, 451, 252, 452, 231, 232, 22, 256, 452, 252, 26, 22, 232, 256, 341, 452, 26, 232, 112, 453, 452, 341, 233, 112, 232, 413, 464, 414, 189, 190, 244, 463, 414, 464, 243, 244, 190, 441, 413, 286, 221, 56, 189, 414, 286, 413, 190, 189, 56, 441, 286, 442, 221, 222, 56, 258, 442, 286, 28, 56, 222, 442, 258, 443, 222, 223, 28, 257, 443, 258, 27, 28, 223, 444, 443, 259, 224, 29, 223, 257, 259, 443, 27, 223, 29, 259, 260, 444, 29, 224, 30, 445, 444, 260, 225, 30, 224, 260, 467, 445, 30, 225, 247, 342, 445, 467, 113, 247, 225, 250, 309, 458, 20, 238, 79, 459, 458, 309, 239, 79, 238, 290, 305, 392, 60, 166, 75, 289, 392, 305, 59, 75, 166, 460, 305, 328, 240, 99, 75, 290, 328, 305, 60, 75, 99, 376, 433, 401, 147, 177, 213, 435, 401, 433, 215, 213, 177, 250, 290, 309, 20, 79, 60, 392, 309, 290, 166, 60, 79, 411, 416, 376, 187, 147, 192, 433, 376, 416, 213, 192, 147, 341, 463, 453, 112, 233, 243, 464, 453, 463, 244, 243, 233, 453, 464, 357, 233, 128, 244, 465, 357, 464, 245, 244, 128, 412, 343, 465, 188, 245, 114, 357, 465, 343, 128, 114, 245, 437, 343, 399, 217, 174, 114, 412, 399, 343, 188, 114, 174, 363, 440, 360, 134, 131, 220, 344, 360, 440, 115, 220, 131, 456, 420, 399, 236, 174, 198, 437, 399, 420, 217, 198, 174, 456, 363, 420, 236, 198, 134, 360, 420, 363, 131, 134, 198, 361, 401, 288, 132, 58, 177, 435, 288, 401, 215, 177, 58, 353, 265, 383, 124, 156, 35, 372, 383, 265, 143, 35, 156, 255, 249, 339, 25, 110, 7, 390, 339, 249, 163, 7, 110, 261, 255, 448, 31, 228, 25, 339, 448, 255, 110, 25, 228, 14, 317, 13, 14, 13, 87, 312, 13, 317, 82, 87, 13, 317, 402, 312, 87, 82, 178, 311, 312, 402, 81, 178, 82, 402, 318, 311, 178, 81, 88, 310, 311, 318, 80, 88, 81, 318, 324, 310, 88, 80, 95, 415, 310, 324, 191, 95, 80]; const k_landmarks = 468; export declare type FaceLayout = "canonical" | "mediapipe" | "procreate"; export class FaceGeometry extends BufferGeometry { static create(type: FaceLayout): FaceGeometry { const geo = new FaceGeometry(); geo.name = "FaceMeshGeometry"; const positions = new Float32Array(k_landmarks * 3); geo.setAttribute("position", new BufferAttribute(positions, 3)); geo.setAttribute("uv", new BufferAttribute(new Float32Array(k_landmarks * 2), 2)); geo.setIndex(faces); geo.setUVs(type); geo.updateBounds(); return geo; } setUVs(type: FaceLayout) { console.debug("SETTING UV TYPE", type); let uvs: Array<Array<number>> | null = null; switch (type) { case "canonical": case "mediapipe": uvs = uvs_canonical; break; case "procreate": uvs = uvs_procreate; break; default: console.warn("Unknown face layout: " + type); uvs = uvs_canonical; break; } const array = this.attributes.uv.array as Float32Array; for (let j = 0; j < k_landmarks; j++) { array[j * 2] = 1 - uvs[j][0]; array[j * 2 + 1] = 1 - uvs[j][1]; } } update(normalizedLandmarks: NormalizedLandmark[], needsSmoothing: boolean) { const positions = this.attributes.position.array as Float32Array; for (let i = 0; i < normalizedLandmarks.length; i++) { if (!needsSmoothing) { positions[i * 3 + 0] = normalizedLandmarks[i].x; positions[i * 3 + 1] = normalizedLandmarks[i].y; positions[i * 3 + 2] = normalizedLandmarks[i].z; } else { const t = 0.5; positions[i * 3 + 0] = Mathf.lerp(positions[i * 3 + 0], normalizedLandmarks[i].x, t); positions[i * 3 + 1] = Mathf.lerp(positions[i * 3 + 1], normalizedLandmarks[i].y, t); positions[i * 3 + 2] = Mathf.lerp(positions[i * 3 + 2], normalizedLandmarks[i].z, t); } } this.attributes.position.needsUpdate = true; this.computeVertexNormals(); if (!this._didComputeBoundsAfterUpdate) { this._didComputeBoundsAfterUpdate = true; this.updateBounds(); } } private _didComputeBoundsAfterUpdate = false; private updateBounds() { this.computeBoundingBox(); // this.boundingBox ??= new Box3(); // // it's cheaper to just set the bounding box to the min/max possible values than to compute it every frame when the geometry is updated // this.boundingBox.set( // new Vector3(-Number.MIN_VALUE, -Number.MIN_VALUE, -Number.MIN_VALUE), // new Vector3(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE) // ); } }