Guide de Configuration
Structure YAML
Le fichier config/cctv_smart.yaml est la source de vérité du système.
Sections Principales
yaml
system:
name: "CCTV Smart"
environment: "production"
log_level: "INFO"
hardware:
tier: "A" # S, A, B, C, ou D
cpu_cores: 16
ram_gb: 16
gpu_enabled: true
resources:
redis_host: "redis"
redis_port: 6379
ollama_host: "http://ollama:11434"
sqlite_path: "/data/cctv_smart.db"
eye:
fps: 1
motion_threshold: 0.3
yolo_model: "yolov8m" # yolov8n, yolov8m, yolov8l
confidence: 0.45
brain:
model: "gemma4:e4b"
max_queue_size: 50
timeout_seconds: 10
prompt_template: "default"
modules:
bytetrack:
enabled: true
priority: "high"
lpr:
enabled: true
priority: "medium"
ocr:
enabled: false
ppe:
enabled: true
priority: "medium"
fire_smoke:
enabled: true
priority: "high"
pose:
enabled: true
priority: "medium"
hand:
enabled: false
gesture:
enabled: false
cameras: [] # Voir section Caméras
rules: [] # Voir section Règles
alerts: {} # Voir section Alertes
recording:
enabled: true
format: "mp4"
retention_days: 30
path: "/data/recordings"
api:
host: "0.0.0.0"
port: 8000
auth_enabled: true
database:
type: "sqlite"
cleanup_days: 90Configuration des Caméras
yaml
cameras:
- id: "cam_001"
name: "Entrée Principal"
rtsp_url: "rtsp://user:pass@192.168.1.100:554/Streaming/Channels/101"
enabled: true
zones:
- name: "Zone Porte"
points: [[0, 0], [100, 0], [100, 100], [0, 100]]
sensitivity: 0.8
motion_only: false
- id: "cam_002"
name: "Parking"
rtsp_url: "rtsp://user:pass@192.168.1.101:554/Streaming/Channels/101"
enabled: true
zones: []
motion_only: trueConfiguration des Règles
yaml
rules:
- id: "rule_001"
name: "Personne détectée à l'entrée"
camera_id: "cam_001"
object_class: "person"
min_confidence: 0.7
zone_id: "Zone Porte"
min_duration_frames: 5
max_frequency_per_minute: 10
actions:
- type: "telegram"
params:
send_photo: true
- type: "brain"
params:
query: "Décrire la menace potentielle"
- id: "rule_002"
name: "Véhicule en stationnement interdit"
camera_id: "cam_002"
object_class: "car"
min_confidence: 0.8
min_duration_frames: 30
actions:
- type: "alert_physical"
params:
device: "siren"
duration_seconds: 5
- type: "email"Configuration des Alertes
Telegram
yaml
alerts:
telegram:
enabled: true
token: "123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11"
chat_id: -1001234567890
send_photo: true
send_ai_response: trueEmail
yaml
alerts:
email:
enabled: true
smtp_server: "smtp.gmail.com"
smtp_port: 587
from_address: "cctv@example.com"
from_password: "${EMAIL_PASSWORD}"
to_addresses:
- "admin@example.com"
- "security@example.com"
send_screenshot: trueAlertes Physiques
yaml
alerts:
physical:
devices:
- id: "siren_01"
type: "siren"
pin: 17
frequency_hz: 2800
- id: "strobe_01"
type: "strobe"
pin: 18
frequency_hz: 2
- id: "relay_01"
type: "relay"
pin: 27
normally_open: true
sip:
enabled: true
server: "asterisk.example.com"
port: 5060
username: "cctv"
password: "${SIP_PASSWORD}"
extension_police: "911"
gps:
enabled: true
api_provider: "gps_service"
api_key: "${GPS_API_KEY}"
update_interval_seconds: 10Exemple Complet : Magasin Retail
yaml
system:
name: "Retail Store Security"
environment: "production"
hardware:
tier: "B"
cpu_cores: 8
ram_gb: 16
gpu_enabled: true
eye:
fps: 1
motion_threshold: 0.25
yolo_model: "yolov8m"
confidence: 0.5
brain:
model: "gemma4:e4b"
prompt_template: "retail"
modules:
bytetrack:
enabled: true
priority: "high"
hand:
enabled: true
priority: "medium"
gesture:
enabled: true
priority: "medium"
ppe:
enabled: false
fire_smoke:
enabled: true
priority: "high"
cameras:
- id: "cam_entrance"
name: "Entrée"
rtsp_url: "rtsp://admin:Admin123@192.168.1.10:554/Streaming/Channels/101"
enabled: true
zones:
- name: "Porte d'entrée"
points: [[100, 50], [300, 50], [300, 200], [100, 200]]
sensitivity: 0.8
- id: "cam_checkout"
name: "Caisse"
rtsp_url: "rtsp://admin:Admin123@192.168.1.11:554/Streaming/Channels/101"
enabled: true
zones:
- name: "Zone Caisse"
points: [[50, 100], [250, 100], [250, 300], [50, 300]]
sensitivity: 0.7
- id: "cam_fitting"
name: "Cabine Essayage"
rtsp_url: "rtsp://admin:Admin123@192.168.1.12:554/Streaming/Channels/101"
enabled: true
motion_only: false
- id: "cam_stockroom"
name: "Réserve"
rtsp_url: "rtsp://admin:Admin123@192.168.1.13:554/Streaming/Channels/101"
enabled: true
motion_only: true
rules:
- id: "rule_theft"
name: "Tentative de vol"
camera_id: "cam_checkout"
object_class: "person"
min_confidence: 0.75
min_duration_frames: 10
actions:
- type: "telegram"
params:
send_photo: true
- type: "alert_physical"
params:
device: "siren"
duration_seconds: 3
- type: "brain"
params:
query: "Analyser le comportement suspect"
alerts:
telegram:
enabled: true
token: "YOUR_BOT_TOKEN"
chat_id: 123456789
send_photo: true
physical:
devices:
- id: "siren"
type: "siren"
pin: 17
recording:
enabled: true
format: "mp4"
retention_days: 30