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}