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}