【问题标题】:Raspberry Pi Camera auto capture python script树莓派相机自动捕捉python脚本
【发布时间】:2021-03-11 15:25:48
【问题描述】:

我一直在尝试将我的树莓派设置为每 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'

【问题讨论】:

    标签: python camera raspberry-pi


    【解决方案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。这导致了错误。

    【讨论】:

    • 这看起来应该可以工作,我已经对其进行了测试,但现在它说:TypeError: Can't convert 'int' object to str implicitly
    • 我假设当我修复它应该可以正常工作?
    • 哎呀,错过了从 int 到 string 的转换。您需要使用 str(counter) 将 int 转换为字符串,以便进行字符串连接。更新了我的答案,所以现在它应该真的可以工作了。
    【解决方案2】:

    我假设下面的代码更短更好:

    对于范围 (5) 中的每个: camera.capture("/home/pi/python/Pictures/image%s.jpg" %each) 睡觉 (5)

    【讨论】:

      最近更新 更多