Files
Alex 1bcf32889f Add label whitelist to filter detection types
DETECTION_LABELS env var accepts comma-separated list (e.g. "person,cat,dog").
Only matching detections are reported; others are ignored. Empty = report all.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 19:08:31 -06:00
..

vixy-vision Server

Camera snapshot server with motion detection for Raspberry Pi.

Quick Start (Single Camera)

cp env.example .env
nano .env  # Configure settings
./setup.sh
sudo systemctl start vixy-vision-<your-camera-id>

Multi-Camera Deployment (Same Pi)

For running multiple cameras on one Pi, clone the repo into separate directories:

# Camera 1: desk
git clone http://gateway.local:3001/vixy/vixy-vision.git ~/vixy-vision-desk
cd ~/vixy-vision-desk/server
cp env.example .env
# Edit .env:
#   SERVICE_NAME=vixy-vision-desk
#   CAMERA_ID=desk
#   CAMERA_INDEX=0
#   PORT=8443
./setup.sh

# Camera 2: basement
git clone http://gateway.local:3001/vixy/vixy-vision.git ~/vixy-vision-basement
cd ~/vixy-vision-basement/server
cp env.example .env
# Edit .env:
#   SERVICE_NAME=vixy-vision-basement
#   CAMERA_ID=basement
#   CAMERA_INDEX=2
#   PORT=8444
./setup.sh

Each instance gets its own:

  • Install directory: ~/vixy-vision-<service-name>/
  • Systemd service: vixy-vision-<service-name>.service
  • Port: as configured in .env

Features

  • 📷 USB camera snapshots via HTTPS API
  • 🔐 API key authentication
  • 🔍 Motion detection with frame differencing
  • 📤 Event reporting to central collector
  • 🔄 Auto-reconnect on camera failure
  • 🔢 Multi-instance support via SERVICE_NAME and PORT

Configuration

Copy env.example to .env and customize:

Variable Description Default
API_KEY Auth key for API (generated)
SERVICE_NAME Systemd service name vixy-vision
PORT HTTPS port 8443
CAMERA_ID Identifier for this camera camera
CAMERA_INDEX /dev/videoN index 0
MOTION_ENABLED Enable motion detection true
MOTION_THRESHOLD Sensitivity (lower = more) 25
MOTION_COOLDOWN Seconds between events 5.0
COLLECTOR_URL Where to POST events (optional)

API Endpoints

Endpoint Auth Description
GET / No Service info
GET /health No Health check
GET /snapshot Yes JPEG snapshot
GET /motion/stats Yes Detection stats
POST /motion/enable Yes Start detection
POST /motion/disable Yes Stop detection

Motion Events

When motion is detected, the server POSTs to COLLECTOR_URL:

{
  "event": {
    "timestamp": "2024-12-16T14:23:01Z",
    "camera_id": "basement",
    "event_type": "motion",
    "confidence": 0.75,
    "area_percent": 7.5
  },
  "snapshot": "<base64 JPEG>"
}

Service Management

sudo systemctl start vixy-vision-<id>
sudo systemctl stop vixy-vision-<id>
sudo systemctl status vixy-vision-<id>
sudo journalctl -u vixy-vision-<id> -f