Motion detection now optionally runs MobileNet V2 SSD (COCO, quantized) on frames that trigger motion, identifying objects like people, cats, and cars. Events without detected objects are suppressed by default. Snapshots include bounding box annotations. New MCP tool vision_get_detections() enables label-based queries. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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