feat(v2): add realtime command and release tooling

This commit is contained in:
ila
2026-07-22 21:28:57 +08:00
parent a98005e631
commit 536396f373
9 changed files with 367 additions and 10 deletions
+82
View File
@@ -0,0 +1,82 @@
[CmdletBinding()]
param(
[Parameter(Mandatory = $true)] [string] $OnnxPath,
[Parameter(Mandatory = $true)] [string] $OrtDllPath,
[Parameter(Mandatory = $true)] [string] $FfmpegPath,
[Parameter(Mandatory = $true)] [string] $FfprobePath,
[Parameter(Mandatory = $true)] [string] $OutputDirectory
)
$ErrorActionPreference = 'Stop'
function Resolve-RequiredFile([string] $Path, [string] $Name) {
if (-not (Test-Path -LiteralPath $Path -PathType Leaf)) {
throw "$Name does not exist or is not a file: $Path"
}
return (Resolve-Path -LiteralPath $Path).Path
}
function Get-ReleaseFileInfo([string] $Path, [string] $Name) {
$item = Get-Item -LiteralPath $Path
return [ordered]@{
name = $Name
sha256 = (Get-FileHash -LiteralPath $Path -Algorithm SHA256).Hash.ToLowerInvariant()
bytes = $item.Length
}
}
$onnx = Resolve-RequiredFile $OnnxPath 'ONNX model'
$ort = Resolve-RequiredFile $OrtDllPath 'ONNX Runtime DLL'
$ffmpeg = Resolve-RequiredFile $FfmpegPath 'FFmpeg executable'
$ffprobe = Resolve-RequiredFile $FfprobePath 'FFprobe executable'
$target = [System.IO.Path]::GetFullPath($OutputDirectory)
if (Test-Path -LiteralPath $target) {
$existing = Get-ChildItem -LiteralPath $target -Force
if ($existing.Count -gt 0) {
throw "OutputDirectory must be empty: $target"
}
} else {
New-Item -ItemType Directory -Path $target | Out-Null
}
$scriptRoot = Split-Path -Parent $PSCommandPath
$v2Root = Split-Path -Parent $scriptRoot
$runtime = Join-Path $target 'runtime'
New-Item -ItemType Directory -Path $runtime | Out-Null
$oldCgo = $env:CGO_ENABLED
$env:CGO_ENABLED = '1'
try {
Push-Location $v2Root
go build -trimpath -ldflags '-s -w' -o (Join-Path $target 'silver-pose.exe') ./cmd/silver-pose
} finally {
Pop-Location
$env:CGO_ENABLED = $oldCgo
}
Copy-Item -LiteralPath $onnx -Destination (Join-Path $runtime 'best.onnx')
Copy-Item -LiteralPath $ort -Destination (Join-Path $runtime 'onnxruntime.dll')
Copy-Item -LiteralPath $ffmpeg -Destination (Join-Path $runtime 'ffmpeg.exe')
Copy-Item -LiteralPath $ffprobe -Destination (Join-Path $runtime 'ffprobe.exe')
Copy-Item -LiteralPath (Join-Path $v2Root 'config.example.json') -Destination (Join-Path $target 'config.example.json')
Copy-Item -LiteralPath (Join-Path (Split-Path -Parent $v2Root) 'docs\v2-demo-runbook.md') -Destination (Join-Path $target 'v2-demo-runbook.md')
$ffmpegVersion = (& (Join-Path $runtime 'ffmpeg.exe') -version | Select-Object -First 1)
$ffprobeVersion = (& (Join-Path $runtime 'ffprobe.exe') -version | Select-Object -First 1)
$manifest = [ordered]@{
format = 'silver-pose-v2-runtime-1'
generated_at_utc = [DateTime]::UtcNow.ToString('o')
go_version = (& go version)
ffmpeg_version = $ffmpegVersion
ffprobe_version = $ffprobeVersion
files = @(
(Get-ReleaseFileInfo (Join-Path $target 'silver-pose.exe') 'silver-pose.exe'),
(Get-ReleaseFileInfo (Join-Path $runtime 'best.onnx') 'runtime/best.onnx'),
(Get-ReleaseFileInfo (Join-Path $runtime 'onnxruntime.dll') 'runtime/onnxruntime.dll'),
(Get-ReleaseFileInfo (Join-Path $runtime 'ffmpeg.exe') 'runtime/ffmpeg.exe'),
(Get-ReleaseFileInfo (Join-Path $runtime 'ffprobe.exe') 'runtime/ffprobe.exe')
)
}
$manifest | ConvertTo-Json -Depth 4 | Set-Content -LiteralPath (Join-Path $target 'runtime-manifest.json') -Encoding UTF8
Write-Output "V2 release created: $target"