树莓派摄像头自动捕获的python脚本

1 投票
2 回答
4205 浏览
提问于 2025-04-19 02:08

我一直在尝试设置我的树莓派,让它每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这个方法。这就导致了错误。

撰写回答