Complete reference for all SecureVision configuration options using environment variables.
- Overview
- Configuration Format
- Video Source Settings
- Face Recognition Settings
- License Plate Settings
- Event Storage Settings
- Tracking Settings
- API Settings
- Example Configurations
- Configuration Validation
SecureVision uses environment variables for all configuration. This approach:
- Works seamlessly with Docker and containerized deployments
- Integrates with systemd service units
- Supports
.envfiles for local development - Follows 12-factor app principles
Key Features:
- Type validation via Pydantic
- Nested configuration using double underscore (
__) - Sensible defaults for all optional settings
- Clear error messages on invalid configuration
All settings use the prefix SECUREVISION__ followed by nested sections:
SECUREVISION__<SECTION>__<SUBSECTION>__<KEY>
Examples:
SECUREVISION__VIDEO__SOURCE__TYPE=rtsp
SECUREVISION__VIDEO__FPS_TARGET=15
SECUREVISION__FACE__ENABLED=true
SECUREVISION__PLATES__DETECTOR__CONF_THRESHOLD=0.25For local development, create a .env file:
# Video source
SECUREVISION__VIDEO__SOURCE__TYPE=device
SECUREVISION__VIDEO__SOURCE__DEVICE_INDEX=0
SECUREVISION__VIDEO__FPS_TARGET=15
# Enable/disable features
SECUREVISION__FACE__ENABLED=true
SECUREVISION__PLATES__ENABLED=trueLoad environment file:
set -a; source .env; set +a
poetry run securevision-qt- Environment variables (highest priority)
.envfile (if usingsourceor docker-compose)- Default values (lowest priority)
Section: SECUREVISION__VIDEO__SOURCE__
Configure the video input source. SecureVision supports multiple source types.
SECUREVISION__VIDEO__SOURCE__TYPE=device
SECUREVISION__VIDEO__SOURCE__DEVICE_INDEX=0 # 0 = first camera, 1 = second, etc.
SECUREVISION__VIDEO__SOURCE__BACKEND=AVFOUNDATION # Optional: macOS hintDevice Index:
0: First camera (MacBook built-in, or first USB)1: Second camera2: Third camera, etc.
Backend (Optional):
AVFOUNDATION: macOS (recommended for MacBook)DSHOW: WindowsV4L2: Linux- Leave empty for auto-detection
SECUREVISION__VIDEO__SOURCE__TYPE=rtsp
SECUREVISION__VIDEO__SOURCE__URL=rtsp://user:password@192.168.1.100:554/streamURL Format:
rtsp://[username:password@]host:port/path
Examples:
# Camera with authentication
SECUREVISION__VIDEO__SOURCE__URL=rtsp://admin:12345@192.168.1.50:554/h264
# Camera without authentication
SECUREVISION__VIDEO__SOURCE__URL=rtsp://192.168.1.50:554/stream1
# Custom port
SECUREVISION__VIDEO__SOURCE__URL=rtsp://cam:pass@10.0.0.100:8554/liveSECUREVISION__VIDEO__SOURCE__TYPE=http_mjpeg
SECUREVISION__VIDEO__SOURCE__URL=http://192.168.1.100:8080/videoExamples:
# Basic MJPEG stream
SECUREVISION__VIDEO__SOURCE__URL=http://camera.local:8080/mjpeg
# With authentication in URL
SECUREVISION__VIDEO__SOURCE__URL=http://user:pass@192.168.1.50:8080/streamSECUREVISION__VIDEO__SOURCE__TYPE=file
SECUREVISION__VIDEO__SOURCE__URL=/path/to/video.mp4Supported Formats:
- MP4 (H.264, H.265)
- AVI
- MKV
- MOV
SECUREVISION__VIDEO__SOURCE__TYPE=rtmp
SECUREVISION__VIDEO__SOURCE__URL=rtmp://server:port/app/streamkey# Target processing FPS (frames will be dropped to achieve this rate)
SECUREVISION__VIDEO__FPS_TARGET=15
# Default: 15
# Range: 1-60
# Lower values reduce CPU usage
# Resize frames before processing (width, height)
SECUREVISION__VIDEO__FRAME_RESIZE=1280,720
# Default: None (no resizing)
# Format: "width,height"
# Example: "640,480" for VGA resolution
# Rotate frame 180 degrees (for upside-down cameras)
SECUREVISION__VIDEO__ROTATE_180=false
# Default: false
# Enable ONVIF discovery helpers
SECUREVISION__VIDEO__ONVIF_DISCOVERY_ENABLED=false
# Default: false
# Network source timeouts
SECUREVISION__VIDEO__READ_TIMEOUT_S=5.0
# Default: 5.0 seconds
# Per-frame read timeout for network sources
SECUREVISION__VIDEO__RECONNECT_INTERVAL_S=3.0
# Default: 3.0 seconds
# Delay before reconnection attemptsSection: SECUREVISION__FACE__
# Enable/disable face recognition
SECUREVISION__FACE__ENABLED=true
# Default: true
# Path to trusted faces gallery (directory with subdirectories per person)
SECUREVISION__FACE__GALLERY_PATH=./data/faces/trusted
# Default: ./data/faces/trusted
# Structure: gallery_path/person_name/*.jpg
# Gallery cache file (pre-computed embeddings)
SECUREVISION__FACE__GALLERY_CACHE=./data/faces/gallery.npz
# Default: ./data/faces/gallery.npz
# Auto-generated on first run
# Similarity threshold for face matching
SECUREVISION__FACE__SIMILARITY_THRESHOLD=0.35
# Default: 0.35
# Range: 0.0-1.0 (lower = stricter matching)
# Recommended: 0.30-0.40
# Minimum face size to process (pixels)
SECUREVISION__FACE__MIN_FACE_SIZE=40
# Default: 40
# Faces smaller than this will be ignoredOrganize face images in subdirectories by person name:
data/faces/trusted/
├── john_doe/
│ ├── photo1.jpg
│ ├── photo2.jpg
│ └── photo3.jpg
├── jane_smith/
│ ├── image1.jpg
│ └── image2.jpg
└── alex_wilson/
└── profile.jpg
Recommendations:
- 3-5 images per person
- Different angles and lighting
- Clear, front-facing photos
- Minimum 200x200 pixels
- JPEG or PNG format
Section: SECUREVISION__PLATES__
# Enable/disable license plate recognition
SECUREVISION__PLATES__ENABLED=true
# Default: trueSection: SECUREVISION__PLATES__DETECTOR__
# Path to YOLOv8 plate detection model
SECUREVISION__PLATES__DETECTOR__MODEL_PATH=./weights/yolov8n_plate.pt
# Default: ./weights/yolov8n_plate.pt
# Use yolov8n (nano) for CPU, yolov8s or yolov8m for GPU
# Detection confidence threshold
SECUREVISION__PLATES__DETECTOR__CONF_THRESHOLD=0.25
# Default: 0.25
# Range: 0.0-1.0 (higher = stricter)
# Non-maximum suppression IoU threshold
SECUREVISION__PLATES__DETECTOR__IOU_THRESHOLD=0.45
# Default: 0.45
# Range: 0.0-1.0
# Maximum detections per frame
SECUREVISION__PLATES__DETECTOR__MAX_DET=10
# Default: 10
# Increase for multi-lane scenarios
# Model input size (square)
SECUREVISION__PLATES__DETECTOR__INPUT_SIZE=640
# Default: 640
# Options: 320, 416, 640 (higher = more accurate but slower)Section: SECUREVISION__PLATES__OCR__
# Tesseract language packs
SECUREVISION__PLATES__OCR__TESSERACT_LANG=eng+rus
# Default: eng+rus
# Options: eng, rus, deu, fra, etc. (combine with +)
# Install with: sudo apt-get install tesseract-ocr-rus
# Page segmentation mode (PSM)
SECUREVISION__PLATES__OCR__PSM_MODE=7
# Default: 7 (single line)
# Options: 6=block, 7=line, 8=word, 13=raw line
# OCR Engine mode (OEM)
SECUREVISION__PLATES__OCR__OEM_MODE=3
# Default: 3 (default)
# Options: 0=legacy, 1=LSTM, 2=legacy+LSTM, 3=default
# Character whitelist (allowed characters)
SECUREVISION__PLATES__OCR__CHAR_WHITELIST="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789- "
# Default: "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789- "
# Crop margin around detected plate (pixels)
SECUREVISION__PLATES__OCR__CROP_MARGIN_PX=8
# Default: 8
# Preprocessing pipeline
SECUREVISION__PLATES__OCR__ENABLE_GRAYSCALE=true
# Default: true (recommended)
SECUREVISION__PLATES__OCR__ENABLE_BILATERAL=false
# Default: false (adds overhead)
SECUREVISION__PLATES__OCR__ENABLE_ADAPTIVE_THRESHOLD=false
# Default: false (good for uneven lighting)
SECUREVISION__PLATES__OCR__ENABLE_CLAHE=false
# Default: false (minimal benefit for plates)Section: SECUREVISION__PLATES__POSTPROCESS__
# Regex pattern for valid plate format
SECUREVISION__PLATES__POSTPROCESS__REGEX="[A-Z0-9\\u0410-\\u042F\\u0401-]{4,10}"
# Default: "[A-Z0-9\\u0410-\\u042F\\u0401-]{4,10}"
# Supports Latin + Cyrillic uppercase
# Convert to uppercase before validation
SECUREVISION__PLATES__POSTPROCESS__UPPERCASE=true
# Default: true
# Minimum plate text length
SECUREVISION__PLATES__POSTPROCESS__MIN_LENGTH=4
# Default: 4
# Maximum plate text length
SECUREVISION__PLATES__POSTPROCESS__MAX_LENGTH=10
# Default: 10Section: SECUREVISION__PLATES__ROI__
Crop frame to region of interest before detection (performance optimization).
# Enable ROI cropping
SECUREVISION__PLATES__ROI__ENABLED=false
# Default: false
# ROI coordinates (pixels)
SECUREVISION__PLATES__ROI__X1=0
SECUREVISION__PLATES__ROI__Y1=400
SECUREVISION__PLATES__ROI__X2=1920
SECUREVISION__PLATES__ROI__Y2=800
# Default: 0,0,0,0 (full frame)
# Format: top-left (x1,y1), bottom-right (x2,y2)Use Case: Fixed camera angle where plates always appear in lower portion of frame.
# Whitelist CSV file (authorized plates)
SECUREVISION__PLATES__WHITELIST_PATH=./data/plates/whitelist.csv
# Default: ./data/plates/whitelist.csv
# Format: plate_text,description
# Blacklist CSV file (blocked plates)
SECUREVISION__PLATES__BLACKLIST_PATH=./data/plates/blacklist.csv
# Default: ./data/plates/blacklist.csv
# Overall event confidence threshold
SECUREVISION__PLATES__MIN_CONFIDENCE=0.55
# Default: 0.55
# Combined detection + OCR confidence
# Plate aspect ratio constraints (width/height)
SECUREVISION__PLATES__MIN_ASPECT_RATIO=1.2
SECUREVISION__PLATES__MAX_ASPECT_RATIO=8.5
# Defaults: 1.2 - 8.5
# Filters out non-plate detections
# Minimum plate size (pixels)
SECUREVISION__PLATES__MIN_WIDTH_PX=60
SECUREVISION__PLATES__MIN_HEIGHT_PX=18
# Defaults: 60x18
# Reject small/distant platesSection: SECUREVISION__EVENTS__
# Database URL (SQLite)
SECUREVISION__EVENTS__DB_URL=sqlite:///./data/events.db
# Default: sqlite:///./data/events.db
# Format: sqlite:///path/to/events.db
# Event retention period (days)
SECUREVISION__EVENTS__RETENTION_DAYS=30
# Default: 30
# Events older than this are automatically deletedSection: SECUREVISION__TRACKING__
Multi-frame confirmation to reduce false positives.
# Enable tracking and multi-frame confirmation
SECUREVISION__TRACKING__ENABLED=true
# Default: true
# Consecutive frames required for confirmation
SECUREVISION__TRACKING__FRAMES_REQUIRED=3
# Default: 3
# Range: 1-10 (higher = fewer false positives, slower reaction)
# Frame window for tracking (lookback)
SECUREVISION__TRACKING__FRAMES_WINDOW=5
# Default: 5
# Must be >= frames_required
# Minimum IoU for bbox matching across frames
SECUREVISION__TRACKING__IOU_THRESHOLD=0.5
# Default: 0.5
# Range: 0.0-1.0 (higher = stricter tracking)
# Maximum frames without match before track removal
SECUREVISION__TRACKING__MAX_AGE_FRAMES=30
# Default: 30
# OCR text agreement ratio for plate confirmation
SECUREVISION__TRACKING__OCR_AGREEMENT_THRESHOLD=0.6
# Default: 0.6
# Minimum fraction of frames with matching OCR text
# Cooldown period between duplicate events (seconds)
SECUREVISION__TRACKING__COOLDOWN_SECONDS=30.0
# Default: 30.0
# Prevent duplicate alerts for same person/plateSection: SECUREVISION__API__
# API server host
SECUREVISION__API__HOST=0.0.0.0
# Default: 0.0.0.0 (all interfaces)
# Use 127.0.0.1 for localhost only
# API server port
SECUREVISION__API__PORT=8000
# Default: 8000
# Enable WebSocket streaming
SECUREVISION__API__WS_ENABLED=true
# Default: true
# Authentication bearer token (optional)
SECUREVISION__API__AUTH_TOKEN=your-secret-token-here
# Default: None (no authentication)
# Generate with: python3 -c "import secrets; print(secrets.token_urlsafe(32))"# .env for home security setup
SECUREVISION__VIDEO__SOURCE__TYPE=rtsp
SECUREVISION__VIDEO__SOURCE__URL=rtsp://admin:password@192.168.1.50:554/stream
SECUREVISION__VIDEO__FPS_TARGET=10
SECUREVISION__FACE__ENABLED=true
SECUREVISION__FACE__GALLERY_PATH=./data/faces/family
SECUREVISION__FACE__SIMILARITY_THRESHOLD=0.30
SECUREVISION__PLATES__ENABLED=true
SECUREVISION__PLATES__WHITELIST_PATH=./data/plates/family_cars.csv
SECUREVISION__TRACKING__FRAMES_REQUIRED=3
SECUREVISION__TRACKING__COOLDOWN_SECONDS=60
SECUREVISION__API__AUTH_TOKEN=my-secret-token-123
SECUREVISION__API__WS_ENABLED=true# .env for parking garage
SECUREVISION__VIDEO__SOURCE__TYPE=rtsp
SECUREVISION__VIDEO__SOURCE__URL=rtsp://camera:pass@10.0.0.100:554/h264
SECUREVISION__VIDEO__FPS_TARGET=15
SECUREVISION__VIDEO__FRAME_RESIZE=1280,720
SECUREVISION__FACE__ENABLED=false
SECUREVISION__PLATES__ENABLED=true
SECUREVISION__PLATES__DETECTOR__CONF_THRESHOLD=0.30
SECUREVISION__PLATES__OCR__TESSERACT_LANG=eng
SECUREVISION__PLATES__WHITELIST_PATH=./data/plates/authorized.csv
SECUREVISION__PLATES__MIN_CONFIDENCE=0.60
# ROI for entrance gate area
SECUREVISION__PLATES__ROI__ENABLED=true
SECUREVISION__PLATES__ROI__Y1=500
SECUREVISION__PLATES__ROI__Y2=900
SECUREVISION__TRACKING__FRAMES_REQUIRED=5
SECUREVISION__EVENTS__RETENTION_DAYS=90# .env for local development
SECUREVISION__VIDEO__SOURCE__TYPE=device
SECUREVISION__VIDEO__SOURCE__DEVICE_INDEX=0
SECUREVISION__VIDEO__SOURCE__BACKEND=AVFOUNDATION
SECUREVISION__VIDEO__FPS_TARGET=10
SECUREVISION__FACE__ENABLED=true
SECUREVISION__FACE__GALLERY_PATH=./data/faces/test
SECUREVISION__FACE__MIN_FACE_SIZE=60
SECUREVISION__PLATES__ENABLED=false
SECUREVISION__API__HOST=127.0.0.1
SECUREVISION__API__PORT=8000
SECUREVISION__API__AUTH_TOKEN=# .env for German license plates
SECUREVISION__VIDEO__SOURCE__TYPE=rtsp
SECUREVISION__VIDEO__SOURCE__URL=rtsp://cam:pass@192.168.1.50:554/stream
SECUREVISION__FACE__ENABLED=false
SECUREVISION__PLATES__ENABLED=true
SECUREVISION__PLATES__OCR__TESSERACT_LANG=deu+eng
SECUREVISION__PLATES__OCR__CHAR_WHITELIST="ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ0123456789- "
SECUREVISION__PLATES__POSTPROCESS__REGEX="[A-ZÄÖÜ]{1,3}-[A-Z]{1,2}[0-9]{1,4}"
SECUREVISION__PLATES__POSTPROCESS__MIN_LENGTH=5
SECUREVISION__PLATES__POSTPROCESS__MAX_LENGTH=10# .env for EU border region (supports Russian and Latin plates)
SECUREVISION__PLATES__OCR__TESSERACT_LANG=eng+rus
SECUREVISION__PLATES__OCR__CHAR_WHITELIST="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ- "
SECUREVISION__PLATES__POSTPROCESS__REGEX="[A-Z0-9\\u0410-\\u042F\\u0401-]{4,10}"Test configuration without running the full pipeline:
from cam_vision.config import load_settings
try:
settings = load_settings()
print("Configuration valid!")
print(f"Video source: {settings.video.source.type}")
print(f"Face recognition: {settings.face.enabled}")
print(f"Plate recognition: {settings.plates.enabled}")
except Exception as e:
print(f"Configuration error: {e}")Missing RTSP URL:
ValidationError: RTSP url required
Solution: Set SECUREVISION__VIDEO__SOURCE__URL
Invalid FPS:
ValidationError: fps_target must be positive integer
Solution: Use positive integer (1-60)
Invalid threshold:
ValidationError: similarity_threshold must be between 0.0 and 1.0
Solution: Use value in valid range
Print all SecureVision environment variables:
env | grep SECUREVISIONVerify specific setting:
echo $SECUREVISION__VIDEO__SOURCE__TYPE- User Guide - End-user documentation
- Deployment Guide - Production deployment
- API Documentation - API reference
- Examples Directory - Pre-configured environment templates