@@ -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 ( ) {
0 commit comments