树莓派调用摄像头拍照后脚本异常退出问题求助
解决树莓派相机脚本执行拍照后退出的问题
这种情况我之前调试树莓派相机脚本时也碰到过,大概率是权限、资源释放或者环境配置的问题,咱们一步步排查解决:
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
相关产品推荐
相关产品推荐

