From 9f2931ae674d82bdfde0d9a8b8efa93a48ec7773 Mon Sep 17 00:00:00 2001 From: Rory Clear <45880510+roryclear@users.noreply.github.com> Date: Wed, 7 May 2025 19:46:09 +0100 Subject: [PATCH] Fix yolo load failing silently (#10046) * wait for js before loading model * use f32 * revert html changes, try both cameras and remove f16 req * clean --- examples/webgpu/yolov8/index.html | 17 ++++++++++++----- examples/yolov8.py | 10 +++------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/examples/webgpu/yolov8/index.html b/examples/webgpu/yolov8/index.html index 3c84de9fe7..6a98d5e124 100644 --- a/examples/webgpu/yolov8/index.html +++ b/examples/webgpu/yolov8/index.html @@ -127,14 +127,22 @@ const offscreenContext = offscreenCanvas.getContext('2d'); - if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) { - navigator.mediaDevices.getUserMedia({ audio: false, video: { facingMode: { ideal: "environment" }}}).then(function (stream) { + if (navigator.mediaDevices?.getUserMedia) { + const tryCamera = facing => navigator.mediaDevices.getUserMedia({ audio: false, video: { facingMode: { ideal: facing } } }); + const handle = stream => { video.srcObject = stream; video.onloadedmetadata = function() { canvas.width = video.clientWidth; canvas.height = video.clientHeight; - } - }); + }; + }; + tryCamera("environment").then(handle).catch(() => + tryCamera("user").then(handle).catch(e => { + wgpuError.textContent = "Error: Could not access camera." + wgpuError.style.display = "block"; + loadingContainer.style.display = "none"; + }) + ); } async function processFrame() { @@ -246,7 +254,6 @@ if (!navigator.gpu) return false; const adapter = await navigator.gpu.requestAdapter(); return await adapter.requestDevice({ - requiredFeatures: ["shader-f16"], powerPreference: "high-performance" }); }; diff --git a/examples/yolov8.py b/examples/yolov8.py index 782fa7c036..1a9035a21a 100644 --- a/examples/yolov8.py +++ b/examples/yolov8.py @@ -352,13 +352,9 @@ def postprocess(output, max_det=300, conf_threshold=0.25, iou_threshold=0.45): def get_weights_location(yolo_variant: str) -> Path: weights_location = Path(__file__).parents[1] / "weights" / f'yolov8{yolo_variant}.safetensors' fetch(f'https://gitlab.com/r3sist/yolov8_weights/-/raw/master/yolov8{yolo_variant}.safetensors', weights_location) - - if not is_dtype_supported(dtypes.half): - f32_weights = weights_location.with_name(f"{weights_location.stem}_f32.safetensors") - if not f32_weights.exists(): convert_f16_safetensor_to_f32(weights_location, f32_weights) - weights_location = f32_weights - - return weights_location + f32_weights = weights_location.with_name(f"{weights_location.stem}_f32.safetensors") + if not f32_weights.exists(): convert_f16_safetensor_to_f32(weights_location, f32_weights) + return f32_weights if __name__ == '__main__':