You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spinnaker相机内存分配错误:如何彻底解决初始化失败问题?

问题

启动相机时出现「Spinnaker: Not Enough available memory to allocate buffer for streaming」错误,编写了一段重试初始化的代码尝试释放相机资源:

system = PySpin.System.GetInstance()

cont = 10
while cont > 0:
    try:
        cam_list = system.GetCameras()
        cam = cam_list.GetByIndex(0)
        print(">1")
        cam.Init() # 错误发生在这里
        print(">2")
        break
    except Exception as e:
        print("e: ", str(e))
        
        if cam.IsInitialized(): # 从未进入这个分支
            cam.DeInit()
            print('deInit')
            
        del cam
        del cam_list
        
        cont -= 1

if cont > 0:    
    print("** Iniciou a camera **")
else:
    print("** Não iniciou a camera **")
    return

但10次重试均失败,增加到100次偶尔能成功但无规律;此前相机可完成60余次拍摄,如今第二次运行就触发错误,怀疑是硬件故障但无法确认,求彻底解决方法。

解决方案
  • 重置Spinnaker系统实例:当前代码只释放了相机对象,但系统实例的内存没清理。每次重试失败后,先释放系统实例,再重新获取:

    # 在except块的del语句后添加
    system.ReleaseInstance()
    # 然后回到循环开头重新初始化系统
    system = PySpin.System.GetInstance()
    

    这能彻底清除系统层面残留的内存占用。

  • 调小相机流缓冲区:用Spinnaker官方GUI工具打开相机设置,找到「Stream Parameters」里的「Buffer Count」,从默认的10左右降到3-5,同时如果支持自定义缓冲区大小,也适当调小。缓冲区过大是触发内存不足的常见原因。

  • 强制进程级内存清理:脚本运行结束后,不要依赖Python垃圾回收,直接用os._exit(0)强制退出进程,避免残留内存影响下一次运行。

  • 排查硬件与驱动:

    • 换一根相机连接线(USB/网线),排除线缆故障;
    • 卸载旧驱动,安装最新版Spinnaker驱动,旧驱动可能有内存泄漏;
    • 把相机接到另一台电脑测试,若同样报错,基本可以确定是相机硬件问题。
  • 优化相机列表管理:每次重试前清空相机列表,避免重复占用资源:

    # 在获取cam_list前加入
    if 'cam_list' in locals():
        cam_list.Clear()
    

内容的提问来源于stack exchange,提问作者Marcius Leandro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 03:27:45