149 lines
5.5 KiB
PowerShell
149 lines
5.5 KiB
PowerShell
param(
|
||
[string[]]$Routes = @(),
|
||
[string]$RouteListPath = "",
|
||
[string[]]$SimulationMaps = @("yandex"),
|
||
[string[]]$InterframeMethods = @("optical-flow", "orb", "akaze", "sift", "brisk"),
|
||
[string[]]$LandmarkMethods = @("orb", "akaze", "sift", "brisk"),
|
||
[string[]]$UseSianSimilarityValues = @("false"),
|
||
[string[]]$UseGanValues = @("false"),
|
||
[string[]]$UseLandmarksValues = @("true"),
|
||
[double[]]$RefMinDistances = @(100),
|
||
[switch]$UseSianSimilarity,
|
||
[switch]$UseGan,
|
||
[switch]$DryRun
|
||
)
|
||
|
||
$ErrorActionPreference = "Stop"
|
||
|
||
$ProjectRoot = Split-Path -Parent $MyInvocation.MyCommand.Path
|
||
Set-Location $ProjectRoot
|
||
|
||
function Expand-List {
|
||
param([string[]]$Values)
|
||
|
||
$Expanded = @()
|
||
foreach ($Value in $Values) {
|
||
$Expanded += $Value -split "," | ForEach-Object { $_.Trim() } | Where-Object { $_ }
|
||
}
|
||
return $Expanded
|
||
}
|
||
|
||
$Routes = Expand-List $Routes
|
||
$SimulationMaps = Expand-List $SimulationMaps
|
||
$InterframeMethods = Expand-List $InterframeMethods
|
||
$LandmarkMethods = Expand-List $LandmarkMethods
|
||
$UseSianSimilarityValues = Expand-List $UseSianSimilarityValues
|
||
$UseGanValues = Expand-List $UseGanValues
|
||
$UseLandmarksValues = Expand-List $UseLandmarksValues
|
||
|
||
if ($UseSianSimilarity) {
|
||
$UseSianSimilarityValues = @("true")
|
||
}
|
||
if ($UseGan) {
|
||
$UseGanValues = @("true")
|
||
}
|
||
|
||
function Convert-ToBool {
|
||
param([string]$Value)
|
||
|
||
$Normalized = $Value.Trim().ToLowerInvariant()
|
||
if ($Normalized -in @("true", "1", "yes", "y", "on")) {
|
||
return $true
|
||
}
|
||
if ($Normalized -in @("false", "0", "no", "n", "off")) {
|
||
return $false
|
||
}
|
||
throw "Не удалось распознать boolean значение: $Value"
|
||
}
|
||
|
||
if ($RouteListPath) {
|
||
if (-not (Test-Path $RouteListPath)) {
|
||
throw "Файл со списком маршрутов не найден: $RouteListPath"
|
||
}
|
||
|
||
$RoutesFromFile = Get-Content -Path $RouteListPath |
|
||
ForEach-Object { ($_ -split "#")[0].Trim() } |
|
||
Where-Object { $_ }
|
||
|
||
$Routes += $RoutesFromFile
|
||
$Routes = $Routes | Select-Object -Unique
|
||
}
|
||
|
||
if ($Routes.Count -eq 0) {
|
||
$Routes = Get-ChildItem -Path "trajectories" -Directory |
|
||
Where-Object { Test-Path (Join-Path $_.FullName "positions.pkl") } |
|
||
Sort-Object Name |
|
||
Select-Object -ExpandProperty Name
|
||
}
|
||
|
||
if ($Routes.Count -eq 0) {
|
||
throw "Не найдено маршрутов в trajectories. Сначала выполните build хотя бы для одного маршрута."
|
||
}
|
||
|
||
$Python = Join-Path $ProjectRoot ".venv\Scripts\python.exe"
|
||
if (-not (Test-Path $Python)) {
|
||
$Python = "python"
|
||
}
|
||
|
||
$Total = $Routes.Count * $SimulationMaps.Count * $InterframeMethods.Count * $LandmarkMethods.Count * $UseSianSimilarityValues.Count * $UseGanValues.Count * $UseLandmarksValues.Count * $RefMinDistances.Count
|
||
$RunIndex = 0
|
||
|
||
Write-Host "Batch run started"
|
||
Write-Host "Routes: $($Routes -join ', ')"
|
||
Write-Host "Total runs: $Total"
|
||
|
||
foreach ($Route in $Routes) {
|
||
foreach ($SimulationMap in $SimulationMaps) {
|
||
foreach ($RefMinDistance in $RefMinDistances) {
|
||
foreach ($InterframeMethod in $InterframeMethods) {
|
||
foreach ($LandmarkMethod in $LandmarkMethods) {
|
||
foreach ($UseSianSimilarityValue in $UseSianSimilarityValues) {
|
||
foreach ($UseGanValue in $UseGanValues) {
|
||
foreach ($UseLandmarksValue in $UseLandmarksValues) {
|
||
$SianEnabled = Convert-ToBool $UseSianSimilarityValue
|
||
$GanEnabled = Convert-ToBool $UseGanValue
|
||
$LandmarksEnabled = Convert-ToBool $UseLandmarksValue
|
||
|
||
$RunIndex += 1
|
||
$Args = @(
|
||
"main.py",
|
||
"--mode", "run",
|
||
"--name", $Route,
|
||
"--simulation", $SimulationMap,
|
||
"--ref-min-distance", "$RefMinDistance",
|
||
"--interframe-method", $InterframeMethod,
|
||
"--landmark-method", $LandmarkMethod
|
||
)
|
||
|
||
if ($SianEnabled) {
|
||
$Args += "--use-sian-similarity"
|
||
}
|
||
if ($GanEnabled) {
|
||
$Args += "--use-gan"
|
||
}
|
||
if (-not $LandmarksEnabled) {
|
||
$Args += "--no-landmarks"
|
||
}
|
||
|
||
Write-Host ""
|
||
Write-Host "[$RunIndex/$Total] route=$Route simulation=$SimulationMap ref=$RefMinDistance interframe=$InterframeMethod landmark=$LandmarkMethod landmarks=$LandmarksEnabled sian=$SianEnabled gan=$GanEnabled"
|
||
Write-Host "$Python $($Args -join ' ')"
|
||
|
||
if (-not $DryRun) {
|
||
& $Python @Args
|
||
if ($LASTEXITCODE -ne 0) {
|
||
throw "Run failed with exit code $LASTEXITCODE"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
Write-Host ""
|
||
Write-Host "Batch run finished. Results are saved by main.py into test_runs."
|