code wiki / (root) / nx_media_gallery.nx

nx_media_gallery.nx source

↩ module page · 131 lines · 6621 B

1// nx_media_gallery.nx -- EXPOSURE rung X2 (visible/usable, not just numbers). 2// Reads the media path list, tags each via nx_mindex_tag_path, and EMITS an 3// openable HTML page (knowledge/staging/media/detect_gallery.html) showing each 4// REAL image with the detected skin bounding box drawn as a CSS overlay (real 5// coords, percentage-scaled so it stays correct at any display size) + tag 6// badges (skin/conc/present) + a "show only person-present" filter. 7// 8// Open the file in a browser to VERIFY the detections land on the real photos. 9// Sovereign: syscalls + nx_media_index (+ its decode/presence deps). 10// license_tier: ORIGINAL 11import "nx_syscalls.nx" 12import "nx_media_index.nx" 13const K_MAGIC_4096: i64 = 4096 14const K_MAGIC_4095: i64 = 4095 15 16func gp(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 } 17func gnum(v: i64) -> i64 { 18 let bb: *u8 = sys_mmap(28) 19 var m: i64 = v 20 if m < 0 { sys_write(1, "-\x00" as *u8, 1); m = 0 - m } 21 let t: *u8 = sys_mmap(28) 22 var k: i64 = 0 23 if m == 0 { t[0] = 48 as u8; k = 1 } 24 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } 25 var i: i64 = 0 26 while i < k { bb[i] = t[k - 1 - i]; i = i + 1 } 27 sys_write(1, bb, k) 28 return 0 29} 30func fps(fd: i64, s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(fd, s, n); return 0 } 31func fnum(fd: i64, v: i64) -> i64 { 32 let bb: *u8 = sys_mmap(28) 33 var m: i64 = v 34 if m < 0 { sys_write(fd, "-\x00" as *u8, 1); m = 0 - m } 35 let t: *u8 = sys_mmap(28) 36 var k: i64 = 0 37 if m == 0 { t[0] = 48 as u8; k = 1 } 38 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } 39 var i: i64 = 0 40 while i < k { bb[i] = t[k - 1 - i]; i = i + 1 } 41 sys_write(fd, bb, k) 42 return 0 43} 44// returns prefix length if s starts with pre, else 0 45func strip_prefix(s: *u8, pre: *u8) -> i64 { 46 var i: i64 = 0 47 while pre[i] != (0 as u8) { 48 if s[i] != pre[i] { return 0 } 49 i = i + 1 50 } 51 return i 52} 53 54func main() -> i64 { 55 let szp: *i64 = sys_mmap(16) as *i64 56 let buf: *u8 = sys_read_file("knowledge/staging/media/idx_in.txt\x00" as *u8, szp) 57 if (buf as i64) == 0 { gp("nx_media_gallery: no idx_in.txt\n\x00" as *u8); return 1 } 58 let len: i64 = szp[0] 59 let fd: i64 = sys_openat_wr("knowledge/staging/media/detect_gallery.html\x00" as *u8, 420) 60 if fd < 0 { gp("nx_media_gallery: cannot write html\n\x00" as *u8); return 2 } 61 62 fps(fd, "<!doctype html><html><head><meta charset=utf-8><title>Nishi Media Studio</title><style>\x00" as *u8) 63 fps(fd, "body{background:#111;color:#eee;font-family:sans-serif;margin:16px}\x00" as *u8) 64 fps(fd, ".grid{display:flex;flex-wrap:wrap;gap:12px}\x00" as *u8) 65 fps(fd, ".card{background:#1c1c1c;border:1px solid #333;border-radius:8px;padding:8px;width:320px}\x00" as *u8) 66 fps(fd, ".imgwrap{position:relative;width:320px}.imgwrap img{width:100%;display:block;border-radius:4px}\x00" as *u8) 67 fps(fd, ".box{position:absolute;border:3px solid #39ff14;box-sizing:border-box}\x00" as *u8) 68 fps(fd, ".badge{margin-top:6px;font-size:13px}.present{color:#39ff14;font-weight:bold}.absent{color:#888}\x00" as *u8) 69 fps(fd, ".path{font-size:10px;color:#666;word-break:break-all;margin-top:4px}</style><script>\x00" as *u8) 70 fps(fd, "function flt(){var o=document.getElementById('onlyp').checked;var c=document.getElementsByClassName('card');\x00" as *u8) 71 fps(fd, "for(var i=0;i<c.length;i++){var p=c[i].getAttribute('data-present')=='1';c[i].style.display=(o&&!p)?'none':''}}\x00" as *u8) 72 fps(fd, "</script></head><body><h2>Nishi Media Studio &mdash; person-presence detections</h2>\x00" as *u8) 73 fps(fd, "<label><input type=checkbox id=onlyp onclick=flt()> show only person-present</label><div class=grid>\x00" as *u8) 74 75 let pbuf: *u8 = sys_mmap(K_MAGIC_4096) 76 let out: *i64 = sys_mmap(128) as *i64 77 var total: i64 = 0 78 var shown: i64 = 0 79 var present: i64 = 0 80 var i: i64 = 0 81 while i < len { 82 var j: i64 = i 83 while j < len && (buf[j] as i64) != 10 { j = j + 1 } 84 var end: i64 = j 85 if end > i && (buf[end - 1] as i64) == 13 { end = end - 1 } 86 let ll: i64 = end - i 87 if ll > 0 { 88 var k: i64 = 0 89 while k < ll && k < K_MAGIC_4095 { pbuf[k] = buf[i + k]; k = k + 1 } 90 pbuf[k] = 0 as u8 91 nx_mindex_tag_path(pbuf, out) 92 total = total + 1 93 if out[0] == NX_MIDX_OK { 94 shown = shown + 1 95 if out[5] == 1 { present = present + 1 } 96 let off: i64 = strip_prefix(pbuf, "knowledge/staging/media/\x00" as *u8) 97 let src: *u8 = (pbuf as i64 + off) as *u8 98 fps(fd, "<div class=card data-present=\x00" as *u8); fnum(fd, out[5]); fps(fd, "><div class=imgwrap><img src=\"\x00" as *u8) 99 fps(fd, src); fps(fd, "\">\x00" as *u8) 100 if out[6] > 0 { 101 // bbox as percentages of natural w/h 102 let lx: i64 = out[7] * 100 / out[1] 103 let ly: i64 = out[8] * 100 / out[2] 104 let bw: i64 = (out[9] - out[7] + 1) * 100 / out[1] 105 let bh: i64 = (out[10] - out[8] + 1) * 100 / out[2] 106 fps(fd, "<div class=box style=\"left:\x00" as *u8); fnum(fd, lx) 107 fps(fd, "%;top:\x00" as *u8); fnum(fd, ly) 108 fps(fd, "%;width:\x00" as *u8); fnum(fd, bw) 109 fps(fd, "%;height:\x00" as *u8); fnum(fd, bh) 110 fps(fd, "%\"></div>\x00" as *u8) 111 } 112 fps(fd, "</div><div class=badge>\x00" as *u8) 113 if out[5] == 1 { fps(fd, "<span class=present>PERSON</span>\x00" as *u8) } 114 if out[5] != 1 { fps(fd, "<span class=absent>no person</span>\x00" as *u8) } 115 fps(fd, " &middot; skin \x00" as *u8); fnum(fd, out[3]) 116 fps(fd, "&permil; &middot; conc \x00" as *u8); fnum(fd, out[4]) 117 fps(fd, "&permil; &middot; \x00" as *u8); fnum(fd, out[1]); fps(fd, "x\x00" as *u8); fnum(fd, out[2]) 118 fps(fd, "</div><div class=path>\x00" as *u8); fps(fd, src); fps(fd, "</div></div>\x00" as *u8) 119 } 120 } 121 i = j + 1 122 } 123 fps(fd, "</div></body></html>\n\x00" as *u8) 124 sys_close(fd) 125 126 gp("nx_media_gallery total=\x00" as *u8); gnum(total) 127 gp(" shown=\x00" as *u8); gnum(shown) 128 gp(" present=\x00" as *u8); gnum(present) 129 gp(" -> knowledge/staging/media/detect_gallery.html\n\x00" as *u8) 130 return 0 131}