2017-07-17 50 views
0

好吧,所以我试图采取与picamera 100黑帧。 exposure_mode设置为“关闭”和快门速度设定为5个milseconds我在一个相当简单的做这样的循环:树莓派的内存错误for循环采取与Picamera暗帧图像

for i in range(NUM_DARK_FRAMES): 
    print ('loop %s' % (i+1)) 
    camera.capture(output, 'jpeg', bayer=True) 
    arr = output.array 
    print ('saving array') 
    numpy.save('%sDarkFrame_%s' % (dark_frames_path, i+1), arr) 
    gc.collect() 

从打印语句我看到它是越来越循环38,并返回一个内存错误。我添加了明确的垃圾收集,因为它帮助了其他有类似问题的人,但没有成功。有任何想法吗?

+0

您不包含完整的代码(例如,什么是“相机”对象?)。 'camera'可能会在循环迭代之间保存一些状态。如果没有关闭缓存的选项,请尝试在循环的每次迭代中创建一个新的“摄像头”。 – ngoldbaum

+1

谢谢,你的缓存评论让我指出了正确的方向,我发现它是Pi/picamera的限制,并且改写它以每25个循环重新声明摄像机(外部为4的循环,内部循环为25)。 –

+0

很酷,你应该回答你自己的问题。 – ngoldbaum

回答

0

看来,这是由于树莓派的限制,在下面粘贴的高级食谱中,他们建议使用流式捕获一系列图像,但这不适用于jpeg格式,这对于原始Bayer数据捕获:

https://picamera.readthedocs.io/en/release-1.10/recipes2.html

我通过使for循环,其控制照相机实例化并且对于25个图像运行内环的外解决了这个。这会清除缓存并防止问题出现(通常发生在37-39之间)。