树莓派摄像头自动捕获的python脚本
我一直在尝试设置我的树莓派,让它每5秒自动拍一张照片,并把文件保存为image1、image2等等。这是我尝试的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'
2 个回答
0
我认为下面的代码更简洁、更好:
对于每个数字在范围(5)内:
相机拍照并保存到“/home/pi/python/Pictures/image%s.jpg”这个路径,%each会替换成当前的数字。
然后暂停5秒。
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
。在内部,这个库似乎会检查给定的格式是否是常见的已知类型startswith('image/')
,但因为你给的是一个整数,所以没有startswith
这个方法。这就导致了错误。