# Sanad Package 3 — Recognition + Places + Memories — self-contained deps. # Comms + mask (like P2) + camera vision (opencv). Recognition is Gemini-side # (in-context primers) — NO local ML / torch / face-embeddings. # Web dashboard fastapi uvicorn[standard] pydantic python-multipart websockets # IPC bus shim + offline license verification pyzmq cryptography # Numerics + image numpy Pillow # Gemini Live voice + audio I/O google-genai>=1.0.0 pyaudio soundfile requests # Camera vision — JPEG-encode + USB (/dev/video*) capture. Headless (no GUI/libGL). # pyrealsense2 is deliberately OMITTED (PyPI wheel's newer glibc ImportErrors on # slim-bookworm); camera.py probes pyrealsense2 then falls back to cv2 V4L capture, # so a USB colour camera works via opencv alone. Add pyrealsense2 (built from # source) only if RealSense-specific depth is required. opencv-python-headless # Mask (BLE LED "Shining Mask") — expressions on recognition. bleak==0.22.3