Files
livekit-cameras/tests/test_portrait_daemon.py
root 95bb7c50ee feat: point the fleet at wss LiveKit room uwh-telhai
Publish and subscribe over wss://livekit.uni-wh.de:7800 and refuse
cleartext ws://. Conference room is uwh-telhai. Includes the uncommitted
encoded H.264 publish path, Rally hairpin, and KMS wall overlay.
2026-10-11 00:48:50 +00:00

88 lines
2.7 KiB
Python

"""SHM round-trip for portrait daemon with a fake mask."""
import time
import numpy as np
from frame_shm import LatestFrameReader, LatestFrameWriter, wait_for_ready
from portrait import bgr_to_i420, i420_nbytes, i420_to_bgr, person_present
from portrait_daemon import CamSlot, tick_once
def test_tick_blurs_bg_and_keeps_person(tmp_path):
w, h = 64, 48
bgr = np.zeros((h, w, 3), dtype=np.uint8)
bgr[::3, :] = 255
bgr[:, ::3] = 255
bgr[8:40, 16:48] = (20, 200, 20)
payload = bgr_to_i420(bgr)
src = tmp_path / "raw" / "cam-01.i420"
dst = tmp_path / "por" / "cam-01.i420"
writer = LatestFrameWriter(str(src), w, h)
writer.write(payload)
mask = np.zeros((h, w), dtype=np.float32)
mask[8:40, 16:48] = 1.0
def infer(_bgr):
return mask
slot = CamSlot(
identity="cam-01",
width=w,
height=h,
reader=LatestFrameReader(str(src)),
writer=LatestFrameWriter(str(dst), w, h),
infer_hz=30.0,
hold_s=0.8,
blur_px=9,
)
n = tick_once([slot], infer, time.monotonic(), infer_budget_s=0.05)
assert n == 1
out_r = LatestFrameReader(str(dst))
buf = bytearray(i420_nbytes(w, h))
seq = out_r.copy_into(buf)
assert seq == 1
out = i420_to_bgr(buf, w, h)
roi = out[12:36, 20:44]
assert abs(int(roi[:, :, 1].mean()) - 200) < 25
bg = out[0:6, :]
assert float(bg.var()) < float(bgr[0:6, :].var()) * 0.6
def test_tick_blurs_when_empty(tmp_path):
w, h = 32, 32
bgr = np.zeros((h, w, 3), dtype=np.uint8)
bgr[::3, :] = 255
bgr[:, ::3] = 255
payload = bgr_to_i420(bgr)
src = tmp_path / "raw" / "cam-02.i420"
dst = tmp_path / "por" / "cam-02.i420"
LatestFrameWriter(str(src), w, h).write(payload)
def infer(_bgr):
return np.zeros((h, w), dtype=np.float32)
slot = CamSlot(
identity="cam-02",
width=w,
height=h,
reader=LatestFrameReader(str(src)),
writer=LatestFrameWriter(str(dst), w, h),
infer_hz=30.0,
hold_s=0.2,
blur_px=9,
)
tick_once([slot], infer, time.monotonic(), infer_budget_s=0.05)
buf = bytearray(i420_nbytes(w, h))
assert LatestFrameReader(str(dst)).copy_into(buf) == 1
y0 = np.frombuffer(payload, dtype=np.uint8, count=w * h).reshape(h, w)
y1 = np.frombuffer(buf, dtype=np.uint8, count=w * h).reshape(h, w)
assert float(y1.var()) < float(y0.var()) * 0.6
assert person_present(np.zeros((h, w), dtype=np.float32)) is False
def test_wait_ready_helper(tmp_path):
p = tmp_path / "ready"
assert wait_for_ready(str(p), timeout=0.05) is False
p.write_text("ok\n")
assert wait_for_ready(str(p), timeout=0.2) is True