code wiki / (root) / nx_face_probe.nx

nx_face_probe.nx source

↩ module page · 56 lines · 2248 B

1// nx_face_probe.nx -- Rule-2 verify: does the existing nx_face_count detect a 2// face on a REAL clothed-person photo (the skin!=person case)? Decodes the 3// JPEG, runs nx_face_count_compute, prints the verdict fields. 4// license_tier: ORIGINAL 5import "nx_syscalls.nx" 6import "nx_image.nx" 7import "nx_jpeg_ascii.nx" 8import "nx_face_count.nx" 9 10func gp(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 } 11func gn(v: i64) -> i64 { 12 let bb: *u8 = sys_mmap(28) 13 var m: i64 = v 14 if m < 0 { sys_write(1, "-\x00" as *u8, 1); m = 0 - m } 15 let t: *u8 = sys_mmap(28) 16 var k: i64 = 0 17 if m == 0 { t[0] = 48 as u8; k = 1 } 18 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } 19 var i: i64 = 0 20 while i < k { bb[i] = t[k - 1 - i]; i = i + 1 } 21 sys_write(1, bb, k) 22 return 0 23} 24 25func decode_jpeg(path: *u8) -> *Image { 26 let szp: *i64 = sys_mmap(16) as *i64 27 let buf: *u8 = sys_read_file(path, szp) 28 if (buf as i64) == 0 { return 0 as *Image } 29 let pr: *i64 = sys_mmap(8) as *i64 30 let pw: *i64 = sys_mmap(8) as *i64 31 let ph: *i64 = sys_mmap(8) as *i64 32 let dr: i64 = nx_jpeg_decode_rgb(buf, szp[0], pr, pw, ph) 33 if dr != NX_JPEG_ASCII_OK { return 0 as *Image } 34 let raw: *u8 = sys_mmap(40) 35 let img: *Image = raw as *Image 36 img.pixels = pr[0] as *u8 37 img.width = pw[0] 38 img.height = ph[0] 39 img.channels = 3 40 img.stride = pw[0] * 3 41 return img 42} 43 44func main() -> i64 { 45 let img: *Image = decode_jpeg("knowledge/media/diora_baird/a5a3307c5482c87a34119ec185eb5fc53eb46bbdcdb1925c46d9f9f1b5e18a88.jpg\x00" as *u8) 46 if (img as i64) == 0 { gp("FACE-PROBE: decode failed\n\x00" as *u8); return 1 } 47 gp("FACE-PROBE dims=\x00" as *u8); gn(img.width); gp("x\x00" as *u8); gn(img.height); gp("\n\x00" as *u8) 48 let v: *FaceCountVerdict = sys_mmap(64) as *FaceCountVerdict 49 nx_face_count_compute(img, v) 50 gp("FACE-PROBE kind=\x00" as *u8); gn(v.kind) 51 gp(" face_regions=\x00" as *u8); gn(v.face_region_count) 52 gp(" eye_pairs=\x00" as *u8); gn(v.eye_pair_count) 53 gp(" eye_blobs=\x00" as *u8); gn(v.eye_blob_count) 54 gp(" fidelity_q10=\x00" as *u8); gn(v.fidelity_q10); gp("\n\x00" as *u8) 55 return 0 56}