使用TensorFlow JS摄像头检测时遇[0x0]无效纹理尺寸错误求助
可能引发该错误的其他原因
视频流未完成初始化:即便设置了video元素的宽高,若摄像头视频流还未加载完成(未触发
loadeddata事件、未开始播放),video的实际帧尺寸仍可能为0x0。需确保调用model.detect前,video已处于播放状态,可通过监听loadeddata事件,在回调内执行检测逻辑。摄像头权限异常:用户拒绝摄像头权限、浏览器无法获取摄像头时,video元素无实际视频流,内部尺寸会变为0。获取媒体流时需添加错误捕获,确认流成功绑定到video上。
视频像素格式不兼容:部分浏览器返回的视频流格式(如非RGBA/YUV类)可能导致TFJS无法正确读取尺寸。可先将video帧绘制到canvas,再用canvas作为
model.detect的输入,绕开纹理创建问题,示例代码:const canvas = document.createElement('canvas'); canvas.width = video.videoWidth; canvas.height = video.videoHeight; const ctx = canvas.getContext('2d'); ctx.drawImage(video, 0, 0, canvas.width, canvas.height); const predictions = await model.detect(canvas);模型未加载完成:若在模型加载未完成时调用
model.detect,会触发异常。需确保await model.load()(或对应加载Promise)执行完成后,再启动检测逻辑。WebGL硬件加速兼容性问题:部分浏览器的WebGL硬件加速存在兼容bug,导致TFJS无法创建有效纹理。可尝试禁用浏览器硬件加速,或初始化时指定TFJS使用CPU后端:
await tf.setBackend('cpu');
内容的提问来源于stack exchange,提问作者Graham Slick
相关产品推荐
相关产品推荐

