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
相关产品推荐
相关产品推荐

