2014-08-31 54 views
1

我一直想我的树莓派成立了自动拍照,每5秒,该文件保存为图像1,图像2等,这是Python代码,我一直在努力:树莓派相机自动捕捉python脚本

import time 
import picamera 
counter = 0 
with picamera.PiCamera() as camera: 
    for each in range(5): 
     counter = counter + 1 
     camera.start_preview() 
     time.sleep(5) 
     camera.capture("/home/pi/python/Pictures/image",counter,".jpg") 
     camera.stop_preview() 

但每次我跑这个时候,我得到这个错误:

Traceback (most recent call last): 
    File "/home/pi/python/camera_repeated.py", line 9, in <module> 
    camera.capture("/home/pi/python/Pictures/image",counter,".jpg") 
    File "/usr/lib/python3/dist-packages/picamera/camera.py", line 1303, in capture 
    format = self._get_image_format(output, format) 
    File "/usr/lib/python3/dist-packages/picamera/camera.py", line 684, in _get_image_format 
    format[6:] if format.startswith('image/') else 
AttributeError: 'int' object has no attribute 'startswith' 

回答

1

你做字符串连接错误。 python中的字符串应该与它们之间的+连接。您正在使用,符号,它通常在函数调用中分隔参数。

PiCamera.capture签名被定义为

capture(output, format=None, use_video_port=False, resize=None, splitter_port=0, **options) 

所以,你会先指定输出文件作为字符串,然后(可选)的格式。如果未指定格式,则格式将从给定输出文件的文件扩展名派生,因此您可以在此处将其保留为空。

因此,在第9行权调用应该是:

camera.capture("/home/pi/python/Pictures/image" + str(counter) + ".jpg") 

你只是在一个字符串,给出了。在给出3个参数之前,格式是您的变量counter的值,第三个(use_video_port)的值为.jpg。在内部,该库似乎测试了通用已知MIME类型startswith('image/')的给定格式,但是如果您以整数形式给出,则不存在此类方法startswith。这导致了错误。

+0

这看起来像应该工作,我已经测试了它,但它现在说:TypeError:不能将'int'对象隐式转换为str – 2014-08-31 13:27:22

+0

我假设当我修复它应该正常工作? – 2014-08-31 13:30:30

+0

哎呀,错过了从int到字符串的转换。您需要使用'str(counter)'将int转换为字符串才能进行字符串连接。更新了我的答案,所以现在应该真的有效。 – ConcurrentHashMap 2014-08-31 13:30:38