Skip to content

Commit dc5ffd6

Browse files
committed
Fix ONNX model loading: upgrade onnxruntime-web, add local fallback
- Upgrade onnxruntime-web from 1.18.0 to 1.21.1 (opset 22 support) The new YOLO26n-pose model uses opset 22 which was not supported by ort 1.18.0, causing silent load failure - Add local file path as primary, CDN as fallback - Model load now tries local 'yolo26n-pose-player.onnx' first, then falls back to jsDelivr CDN URL
1 parent 55565ff commit dc5ffd6

File tree

3 files changed

+33
-22
lines changed

3 files changed

+33
-22
lines changed

19-sports-player-id/app.js

Lines changed: 31 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,9 @@ document.addEventListener('DOMContentLoaded', async function() {
5757
// Local ONNX player detection model (YOLO26n-pose, 640x640 input, 3 classes + 6 keypoints)
5858
var playerOnnxModel = null;
5959
var playerModelLoaded = false;
60-
// CDN-hosted via jsDelivr for fast loading
61-
var PLAYER_ONNX_PATH = 'https://cdn.jsdelivr.net/gh/streamgeeks/visual-reasoning-playground@master/19-sports-player-id/yolo26n-pose-player.onnx';
60+
// Try local file first (when served from same origin), fall back to CDN
61+
var PLAYER_ONNX_PATH = 'yolo26n-pose-player.onnx';
62+
var PLAYER_ONNX_CDN = 'https://cdn.jsdelivr.net/gh/streamgeeks/visual-reasoning-playground@master/19-sports-player-id/yolo26n-pose-player.onnx';
6263
var PLAYER_INPUT_SIZE = 640;
6364
var PLAYER_CLASS_NAMES = {
6465
0: 'ball', 1: 'court', 2: 'player'
@@ -298,27 +299,37 @@ document.addEventListener('DOMContentLoaded', async function() {
298299
updateStatus('Loading local ONNX model...');
299300
window.reasoningConsole.logInfo('Loading player detection ONNX model...');
300301

301-
playerOnnxModel = new OnnxModelRunner(PLAYER_ONNX_PATH, {
302-
inputWidth: PLAYER_INPUT_SIZE,
303-
inputHeight: PLAYER_INPUT_SIZE,
304-
task: 'pose',
305-
classNames: PLAYER_CLASS_NAMES,
306-
kptShape: [6, 3]
307-
});
302+
// Try local path first, then CDN fallback
303+
var paths = [PLAYER_ONNX_PATH, PLAYER_ONNX_CDN];
304+
for (var p = 0; p < paths.length; p++) {
305+
var modelPath = paths[p];
306+
window.reasoningConsole.logInfo('Trying model path: ' + modelPath);
307+
308+
playerOnnxModel = new OnnxModelRunner(modelPath, {
309+
inputWidth: PLAYER_INPUT_SIZE,
310+
inputHeight: PLAYER_INPUT_SIZE,
311+
task: 'pose',
312+
classNames: PLAYER_CLASS_NAMES,
313+
kptShape: [6, 3]
314+
});
308315

309-
var loaded = await playerOnnxModel.load(function(msg) {
310-
updateStatus('ONNX: ' + msg);
311-
});
316+
var loaded = await playerOnnxModel.load(function(msg) {
317+
updateStatus('ONNX: ' + msg);
318+
});
312319

313-
playerModelLoaded = loaded;
314-
if (loaded) {
315-
window.reasoningConsole.logInfo('Player ONNX model loaded');
316-
updateStatus('Local model ready');
317-
} else {
318-
window.reasoningConsole.logError('Player ONNX model failed to load');
319-
updateStatus('Local model failed — try Cloud engine', true);
320+
if (loaded) {
321+
playerModelLoaded = true;
322+
window.reasoningConsole.logInfo('Player ONNX model loaded from: ' + modelPath);
323+
updateStatus('Local model ready');
324+
return true;
325+
} else {
326+
window.reasoningConsole.logError('Failed to load from: ' + modelPath);
327+
}
320328
}
321-
return loaded;
329+
330+
window.reasoningConsole.logError('Player ONNX model failed to load from all sources');
331+
updateStatus('Local model failed — try Cloud engine', true);
332+
return false;
322333
}
323334

324335
async function onnxLocalDetect() {

19-sports-player-id/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -530,7 +530,7 @@ <h3>Live Detection</h3>
530530
</div>
531531

532532
<!-- ONNX Runtime Web for local in-browser model inference -->
533-
<script src="https://cdn.jsdelivr.net/npm/onnxruntime-web@1.18.0/dist/ort.min.js"></script>
533+
<script src="https://cdn.jsdelivr.net/npm/onnxruntime-web@1.21.1/dist/ort.min.js"></script>
534534
<script src="onnx-engine.js"></script>
535535
<script src="homography.js"></script>
536536
<script src="court-map.js"></script>

19-sports-player-id/onnx-engine.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747

4848
// Configure ONNX Runtime WASM backend
4949
if (typeof ort !== 'undefined') {
50-
ort.env.wasm.wasmPaths = 'https://cdn.jsdelivr.net/npm/onnxruntime-web@1.18.0/dist/';
50+
ort.env.wasm.wasmPaths = 'https://cdn.jsdelivr.net/npm/onnxruntime-web@1.21.1/dist/';
5151
// Single-threaded for compatibility (multi-threading requires CORS headers)
5252
ort.env.wasm.numThreads = 1;
5353
ort.env.wasm.simd = true;

0 commit comments

Comments
 (0)