nx_response_signal_test.nx source
↩ module page · 83 lines · 2779 B
1import "nx_syscalls.nx"
2import "nx_image.nx"
3import "nx_response_signal.nx"
4
5func paint_rect(rgb: *Image, x0: i64, y0: i64, x1: i64, y1: i64,
6 r: i64, g: i64, b: i64) -> i64 {
7 var y: i64 = y0
8 while y < y1 {
9 var x: i64 = x0
10 while x < x1 {
11 if x >= 0 { if x < rgb.width { if y >= 0 { if y < rgb.height {
12 nx_image_set(rgb, x, y, 0, r)
13 nx_image_set(rgb, x, y, 1, g)
14 nx_image_set(rgb, x, y, 2, b)
15 } } } }
16 x = x + 1
17 }
18 y = y + 1
19 }
20 return 0
21}
22
23func main() -> i64 {
24 let w: i64 = 200
25 let h: i64 = 300
26 let rgb: *Image = nx_image_alloc(w, h, 3)
27 let mask: *Image = nx_image_alloc(w, h, 1)
28
29 // Initialize as fully-neutral (no signals).
30 paint_rect(rgb, 0, 0, w, h, 180, 150, 140) // neutral skin tone everywhere
31 paint_rect(mask, 0, 0, w, h, 1, 1, 1) // mark all skin
32
33 // Face bbox 60..140 x 20..120 (80 wide, 100 tall).
34 // Cheek band: 65..95 x 60..80
35 // Torso baseline: 60..140 x 180..260
36 // First fill mask=255 in skin areas.
37 var yy: i64 = 0
38 while yy < h {
39 var xx: i64 = 0
40 while xx < w { nx_image_set(mask, xx, yy, 0, 255); xx = xx + 1 }
41 yy = yy + 1
42 }
43
44 // Pack bbox coords once.
45 let bbox: *i64 = (sys_mmap(12 * 8 + 16)) as *i64
46 bbox[0] = 60; bbox[1] = 20; bbox[2] = 140; bbox[3] = 120
47 bbox[4] = 65; bbox[5] = 60; bbox[6] = 95; bbox[7] = 80
48 bbox[8] = 60; bbox[9] = 180; bbox[10] = 140; bbox[11] = 260
49
50 // T1: NO signals — all neutral.
51 let result: *i64 = (sys_mmap(NX_RESP_RES_FIELDS * 8 + 16)) as *i64
52 nx_response_signals(rgb, mask, bbox, result)
53 let c1: i64 = result[NX_RESP_RES_COUNT]
54 if c1 != 0 { return 1 }
55
56 // T2: ADD parted lips — dark mouth band at y=90..100.
57 paint_rect(rgb, 90, 90, 110, 102, 30, 25, 25)
58 nx_response_signals(rgb, mask, bbox, result)
59 let parted2: i64 = result[NX_RESP_RES_PARTED]
60 if parted2 != 1 { return 10 }
61 let c2: i64 = result[NX_RESP_RES_COUNT]
62 if c2 < 1 { return 11 }
63
64 // T3: ADD flushed cheeks.
65 paint_rect(rgb, 65, 60, 95, 80, 220, 150, 140)
66 nx_response_signals(rgb, mask, bbox, result)
67 let flushed3: i64 = result[NX_RESP_RES_FLUSHED]
68 if flushed3 != 1 { return 20 }
69 let delta3: i64 = result[NX_RESP_RES_CHEEK_DELTA]
70 if delta3 < 15 { return 21 }
71 let c3: i64 = result[NX_RESP_RES_COUNT]
72 if c3 < 2 { return 22 }
73
74 // T4: ADD sheen.
75 paint_rect(rgb, 60, 180, 140, 200, 230, 220, 215)
76 nx_response_signals(rgb, mask, bbox, result)
77 let sheen4: i64 = result[NX_RESP_RES_SHEEN]
78 if sheen4 != 1 { return 30 }
79 let c4: i64 = result[NX_RESP_RES_COUNT]
80 if c4 != 3 { return 31 }
81
82 return 0
83}