Skip to content

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: 90

Configuration 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: true

Configuration 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: true

Email

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: true

Alertes 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: 10

Exemple 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

CCTV Smart — Videosurveillance Intelligente pour le Benin