code wiki / (root) / nx_pose_classify_test.nx

nx_pose_classify_test.nx source

↩ module page · 64 lines · 3011 B

1import "nx_syscalls.nx" 2import "nx_pose_classify.nx" 3 4func main() -> i64 { 5 let bbox: *i64 = (sys_mmap(8 * 8 + 16)) as *i64 6 let result: *i64 = (sys_mmap(NX_POSE_RES_FIELDS * 8 + 16)) as *i64 7 8 // T1: STANDING_FACING — face above torso, centered. 9 // face 100..200 x 50..150 (cx=150). torso 80..220 x 160..400 (cx=150, h=240, w=140, aspect=1.71). 10 bbox[0] = 100; bbox[1] = 50; bbox[2] = 200; bbox[3] = 150 11 bbox[4] = 80; bbox[5] = 160; bbox[6] = 220; bbox[7] = 400 12 nx_pose_classify(bbox, result) 13 let k1: i64 = result[NX_POSE_RES_KIND] 14 // aspect 1.71 > 1.6 -> LEANING_FORWARD (very tall torso); use less-tall version next. 15 if k1 != NX_POSE_LEANING_FORWARD { return 1 } 16 17 // T1b: STANDING_FACING — face above, centered, torso aspect ~1.3. 18 // face 100..200 x 50..150. torso 80..220 x 160..340 (w=140 h=180 aspect=1.28). 19 bbox[0] = 100; bbox[1] = 50; bbox[2] = 200; bbox[3] = 150 20 bbox[4] = 80; bbox[5] = 160; bbox[6] = 220; bbox[7] = 340 21 nx_pose_classify(bbox, result) 22 let k1b: i64 = result[NX_POSE_RES_KIND] 23 if k1b != NX_POSE_STANDING_FACING { return 5 } 24 25 // T2: SIDE_PROFILE — face strongly offset right (>40%). 26 // face cx 250, torso cx 150 (offset 100/140 = 71%). 27 bbox[0] = 200; bbox[1] = 50; bbox[2] = 300; bbox[3] = 150 28 bbox[4] = 80; bbox[5] = 160; bbox[6] = 220; bbox[7] = 340 29 nx_pose_classify(bbox, result) 30 let k2: i64 = result[NX_POSE_RES_KIND] 31 if k2 != NX_POSE_SIDE_PROFILE { return 10 } 32 33 // T3: RECLINING_TWISTED — face moderately offset (20-40%). 34 // face cx 180 (offset 30 = 21%). 35 bbox[0] = 130; bbox[1] = 50; bbox[2] = 230; bbox[3] = 150 36 bbox[4] = 80; bbox[5] = 160; bbox[6] = 220; bbox[7] = 340 37 nx_pose_classify(bbox, result) 38 let k3: i64 = result[NX_POSE_RES_KIND] 39 if k3 != NX_POSE_RECLINING_TWISTED { return 20 } 40 41 // T4: LAYING_BACK — torso wider than tall, face above torso center. 42 // face cy 100, torso cy 250. torso 50..350 x 200..300 (w=300 h=100 aspect=0.33). 43 bbox[0] = 150; bbox[1] = 50; bbox[2] = 250; bbox[3] = 150 44 bbox[4] = 50; bbox[5] = 200; bbox[6] = 350; bbox[7] = 300 45 nx_pose_classify(bbox, result) 46 let k4: i64 = result[NX_POSE_RES_KIND] 47 if k4 != NX_POSE_LAYING_BACK { return 30 } 48 49 // T5: FACE_DOWN_ASS_UP — torso wider than tall, face BELOW torso center. 50 bbox[0] = 150; bbox[1] = 350; bbox[2] = 250; bbox[3] = 450 51 bbox[4] = 50; bbox[5] = 200; bbox[6] = 350; bbox[7] = 300 52 nx_pose_classify(bbox, result) 53 let k5: i64 = result[NX_POSE_RES_KIND] 54 if k5 != NX_POSE_FACE_DOWN_ASS_UP { return 40 } 55 56 // T6: ARCHED_PRESENTING — face overlaps torso vertically, normal aspect. 57 bbox[0] = 100; bbox[1] = 140; bbox[2] = 200; bbox[3] = 240 // face y 140-240 58 bbox[4] = 80; bbox[5] = 160; bbox[6] = 220; bbox[7] = 340 // torso y 160-340 (overlap) 59 nx_pose_classify(bbox, result) 60 let k6: i64 = result[NX_POSE_RES_KIND] 61 if k6 != NX_POSE_ARCHED_PRESENTING { return 50 } 62 63 return 0 64}