code wiki / (root) / nx_response_signal_test.nx

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}