$ErrorActionPreference = "Stop" $root = Split-Path -Parent $MyInvocation.MyCommand.Path $running = Get-CimInstance Win32_Process | Where-Object { $_.Name -like "python*" -and $_.CommandLine -match "main\.py" } if ($running) { $running | Select-Object ProcessId, Name, CommandLine throw "main.py already running; stop it before starting another copy." } New-Item -ItemType Directory -Force -Path ` "$root\runtime-data\logs", ` "$root\runtime-data\ui", ` "$root\runtime-data\guidance", ` "$root\runtime-data\autopilot", ` "$root\runtime-data\out" | Out-Null $env:PYTHONUNBUFFERED = "1" $env:FPV_MODEL_PATH = "$root\best.pt" $env:FPV_MODEL_FUSE = "0" $env:FPV_TORCH_CUDNN_BENCHMARK = "1" $env:FPV_TORCH_MATMUL_PRECISION = "high" $env:FPV_SOURCE = "0" $env:FPV_CAP_BACKEND = "dshow" $env:FPV_CAP_AUTO_RES = "0" $env:FPV_CAP_WIDTH = "1920" $env:FPV_CAP_HEIGHT = "1080" $env:FPV_CAP_FPS = "30" $env:FPV_CAP_FOURCC = "MJPG" $env:FPV_CAMERA_READ_FAIL_RETRIES = "120" $env:FPV_FORCE_EFFECTIVE_PAL = "1" $env:FPV_EFFECTIVE_W = "640" $env:FPV_EFFECTIVE_H = "360" $env:FPV_IMG_SIZE_ROI = "320" $env:FPV_IMG_SIZE_FULL = "320" $env:FPV_MAX_DET = "5" $env:FPV_RECOVER_FORCED_DET_EVERY = "3" $env:FPV_RECOVER_FULLSCAN_EVERY = "45" $env:FPV_CLOSE_PERIODIC_FULLSCAN_EVERY = "24" $env:FPV_YOLO_FORCE_DET_WHEN_WEAK = "1" $env:FPV_ANALOG_FPV_MODE = "0" $env:FPV_APPLY_YOLO_PREPROC = "0" $env:FPV_PRE_BLUR_K = "0" $env:FPV_PRE_UNSHARP = "0.0" $env:FPV_DEBUG = "0" $env:FPV_TARGET_OUT_FPS = "30" $env:FPV_VIDEO_REALTIME = "1" $env:FPV_SHOW_OUTPUT = "0" $env:FPV_SAVE_INFER_VIDEO = "1" $env:FPV_OUT_VIDEO_PATH = "$root\runtime-data\out\out_infer.mp4" $env:FPV_DETECTION_CLIP_MAX_GAP_SEC = "15" $env:FPV_INFER_VIDEO_MAX_W = "960" $env:FPV_INFER_VIDEO_MAX_H = "540" $env:FPV_UI_FRAME_EXPORT_ENABLE = "1" $env:FPV_UI_FRAME_EXPORT_PATH = "$root\runtime-data\ui\latest.jpg" $env:FPV_UI_FRAME_EXPORT_EVERY = "1" $env:FPV_UI_FRAME_EXPORT_MAX_W = "960" $env:FPV_UI_FRAME_EXPORT_MAX_H = "540" $env:FPV_UI_FRAME_EXPORT_JPEG_QUALITY = "65" $env:FPV_UI_FRAME_EXPORT_ASYNC = "1" $env:FPV_GUIDANCE_EXPORT_ENABLE = "1" $env:FPV_GUIDANCE_EXPORT_PATH = "$root\runtime-data\guidance\guidance_state.json" $env:FPV_AUTOPILOT_ENABLE = "1" $env:FPV_AUTOPILOT_BACKEND = "json" $env:FPV_AUTOPILOT_JSON_PATH = "$root\runtime-data\autopilot\autopilot_cmd.json" $process = Start-Process ` -FilePath "$root\.venv\Scripts\python.exe" ` -ArgumentList "-u", "main.py" ` -WorkingDirectory $root ` -RedirectStandardOutput "$root\runtime-data\logs\main.log" ` -RedirectStandardError "$root\runtime-data\logs\main.err.log" ` -WindowStyle Hidden ` -PassThru "started pid=$($process.Id) ui=http://localhost:8080"