v1.22.0: la IA del equipo (máscara de sujeto en la tarjeta NVIDIA)
La máscara de «Sujeto» y «Fondo» del editor de revelado de Labstream OS la busca la app en la tarjeta del equipo, no el navegador (src-tauri/src/ia/): - Tres comandos para la página, permitidos solo para el origen de la app (manifiesto en build.rs + capabilities): ia_estado (¿hay NVIDIA?, ¿está bajado?, cuánto falta), ia_preparar (baja lo que falte con eventos ia-progreso y abre el modelo) e ia_sujeto (RGBA en binario → [ancho][alto][un byte por punto]). - Motor: ONNX Runtime 1.24.4 con DirectML (crate ort 2.0.0-rc.14, load-dynamic, api-24): nada se enlaza al compilar; las DLL se bajan de NuGet la primera vez y DirectML.dll se carga por su ruta antes que onnxruntime.dll. Sin fundir el grafo (fundido, el HR no cabía en 16 GB) y sin seguir en la CPU si la tarjeta falla. - Modelo: BiRefNet general en media precisión, del servidor de la app con la sesión de la pestaña (cookies de WebView2 leídas en el comando asíncrono). - Todo fijado por huella SHA-256; los .nupkg se sacan por ruta exacta (DirectML trae también las DLL de Xbox y de depurar con el mismo nombre). - ¿Hay NVIDIA?: los adaptadores de DXGI, sin cargar nada de la IA. - El modelo se suelta de la tarjeta a los 2 min sin uso; si la tarjeta falla, se suelta y se abre de nuevo la próxima vez. Todo va a salud.log. Medido en una RTX 5080: 0,3 s por foto (1,4 s la primera; el navegador tarda 2,5–3 s) y el mismo borde que el modelo original en la CPU. El HR (2048 px, matting) se probó y se descartó: 14–15 GB de la tarjeta y de 6 a 45 s por foto. Pruebas nuevas: zip por ruta exacta, entrada igual a la del navegador, salida y respuesta; y una de punta a punta en la tarjeta (ignorada en CI). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Este commit está contenido en:
57
src-tauri/src/ia/piezas.rs
Archivo normal
57
src-tauri/src/ia/piezas.rs
Archivo normal
@@ -0,0 +1,57 @@
|
||||
// ── Lo que la IA baja la primera vez (≈700 MB), de dónde, y con qué huella ──
|
||||
//
|
||||
// Fijado por versión y huella SHA-256 (comprobadas al bajarlo el 14-oct-2026): si algún día cambia
|
||||
// lo que hay en esa dirección, no se usa.
|
||||
//
|
||||
// - El modelo: BiRefNet general (MIT, ZhengPeng7; el mismo del navegador) en media precisión, del
|
||||
// servidor de la app (api/modelos/sujeto-equipo, con la sesión de la pestaña). Sale de la
|
||||
// exportación ONNX oficial del autor (release v1 de su GitHub, float32) pasada a float16 con la
|
||||
// entrada y la salida en float32 (scripts/modelo-sujeto-equipo.py de labstream-os). Entrada
|
||||
// `input_image` [1, 3, 1024, 1024], salida `output_image` [1, 1, 1024, 1024] (logits). En una RTX
|
||||
// 5080: 0,3 s por foto y el mismo borde que el original en la CPU.
|
||||
// El HR (2048 px, matting) se probó y NO va: su convolución deformable, deshecha en GatherND en la
|
||||
// exportación oficial, ocupa 14–15 GB con DirectML y tarda de 6 a 45 s (14-oct-2026).
|
||||
// - ONNX Runtime 1.24.4 con DirectML (NuGet de Microsoft): onnxruntime.dll para x64.
|
||||
// - DirectML 1.15.4 (NuGet de Microsoft): DirectML.dll para Windows x64 (el paquete trae también
|
||||
// las de Xbox y las de depurar: se saca por su ruta exacta).
|
||||
|
||||
use super::bajar::{Forma, Pieza};
|
||||
|
||||
pub const NOMBRE_MODELO: &str = "BiRefNet";
|
||||
/// El lado de la entrada y de la salida del modelo.
|
||||
pub const LADO: usize = 1024;
|
||||
|
||||
pub const ARCHIVO_MODELO: &str = "birefnet-general-epoch_244-fp16.onnx";
|
||||
pub const DLL_ORT: &str = "onnxruntime.dll";
|
||||
pub const DLL_DIRECTML: &str = "DirectML.dll";
|
||||
|
||||
static PIEZAS: [Pieza; 3] = [
|
||||
Pieza {
|
||||
nombre: "onnxruntime-directml-1.24.4",
|
||||
url: "https://api.nuget.org/v3-flatcontainer/microsoft.ml.onnxruntime.directml/1.24.4/microsoft.ml.onnxruntime.directml.1.24.4.nupkg",
|
||||
sha256: "57e9f11b73437bef7a309496135d4c1f96b1a8e9ddba60013fa27bfc1d788681",
|
||||
bytes: 12_458_649,
|
||||
forma: Forma::Zip(&["runtimes/win-x64/native/onnxruntime.dll", "runtimes/win-x64/native/onnxruntime_providers_shared.dll"]),
|
||||
con_sesion: false,
|
||||
},
|
||||
Pieza {
|
||||
nombre: "directml-1.15.4",
|
||||
url: "https://api.nuget.org/v3-flatcontainer/microsoft.ai.directml/1.15.4/microsoft.ai.directml.1.15.4.nupkg",
|
||||
sha256: "4e7cb7ddce8cf837a7a75dc029209b520ca0101470fcdf275c1f49736a3615b9",
|
||||
bytes: 202_292_617,
|
||||
forma: Forma::Zip(&["bin/x64-win/DirectML.dll"]),
|
||||
con_sesion: false,
|
||||
},
|
||||
Pieza {
|
||||
nombre: "birefnet-general-epoch_244-fp16",
|
||||
url: "https://os.labstreamsas.com/api/modelos/sujeto-equipo",
|
||||
sha256: "323232ec73a04ac4d0ef8c325a75aa8d69ed7062235a7cf9941769fae4c9709f",
|
||||
bytes: 489_666_838,
|
||||
forma: Forma::Archivo(ARCHIVO_MODELO),
|
||||
con_sesion: true,
|
||||
},
|
||||
];
|
||||
|
||||
pub fn todas() -> &'static [Pieza] {
|
||||
&PIEZAS
|
||||
}
|
||||
Referencia en una nueva incidencia
Block a user