You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派调用摄像头拍照后脚本异常退出问题求助

解决树莓派相机脚本执行拍照后退出的问题

这种情况我之前调试树莓派相机脚本时也碰到过,大概率是权限、资源释放或者环境配置的问题,咱们一步步排查解决:

1. 先去掉不必要的sudo权限

默认pi用户已经加入了video组,拥有访问相机硬件的权限,使用sudo反而可能导致环境变量异常或资源释放失败:

  • 把subprocess.Popen里的sudo去掉:
    subprocess.Popen(['raspistill', '-w', '320', '-h', '240', '-hf', '-o', '/home/pi/Documents/Python/robot1/image0.jpg'])
    
  • os.system命令同样去掉sudo:
    os.system('raspistill -w 320 -h 240 -o /home/pi/Documents/Python/robot1/image0.jpg')
    
  • 验证用户权限:终端运行groups pi,确认输出里有video;如果没有,执行sudo usermod -aG video pi后重启树莓派。

2. 用上下文管理器确保PiCamera资源正确释放

直接实例化PiCamera如果没手动关闭,可能会导致资源占用,建议用with语句自动管理相机资源:

from picamera import PiCamera
from time import sleep

with PiCamera() as camera:
    camera.start_preview()
    sleep(2)
    camera.capture('/home/pi/Documents/Python/robot1/image01.jpg')
    camera.stop_preview()

这样即使拍照过程中出现异常,相机也会自动关闭,不会残留占用问题。

3. 捕获异常查看具体错误

脚本突然退出很可能是拍照时抛出了未捕获的异常,给代码加上异常捕获:

from picamera import PiCamera
from time import sleep

try:
    camera = PiCamera()
    camera.start_preview()
    sleep(2)
    camera.capture('/home/pi/Documents/Python/robot1/image01.jpg')
    camera.stop_preview()
except Exception as e:
    print(f"拍照时出错:{str(e)}")
    if 'camera' in locals():
        camera.close()

运行后就能看到具体错误,比如路径不存在、相机被其他进程占用等。

4. 检查保存路径是否存在

如果目标文件夹不存在,拍照命令会失败并导致脚本退出,先确保路径存在:

import os

save_path = '/home/pi/Documents/Python/robot1/image0.jpg'
save_dir = os.path.dirname(save_path)
os.makedirs(save_dir, exist_ok=True)  # 自动创建不存在的文件夹

5. 验证相机硬件和系统配置

先在终端直接运行相机命令,排除硬件或系统配置问题:

raspistill -w 320 -h 240 -o test.jpg

如果终端运行也失败:

  • 检查相机排线是否插紧(树莓派断电后再插拔);
  • 打开sudo raspi-config,进入Interface Options -> Camera,确保相机已启用,重启树莓派后再试。

内容的提问来源于stack exchange,提问作者tteo57

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:34:32