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

使用Raspberry Pi及Camera V3(广角版)拍照失败求助

问题分析与解决方案

你的代码核心问题是**app.exec()会启动Qt的事件循环并阻塞后续代码执行**,所以time.sleep(2)和picam2.capture_file('a.jpg')这两行永远不会被运行,自然不会生成图片文件。另外,你导入了time模块,但直接写sleep(2)会报错,应该用time.sleep(2)。

修复方案(两种可选)

方案1:用Qt定时器触发拍照

把拍照逻辑放到Qt的定时器中,让事件循环启动后自动执行拍照操作:

#!/usr/bin/python3
import sys
import libcamera
import time
from PyQt5.QtCore import QTimer
from PyQt5.QtWidgets import (QApplication, QWidget, QHBoxLayout)
from picamera2.previews.qt import QGlPicamera2
from picamera2 import Picamera2

picam2 = Picamera2()

app = QApplication([])
window = QWidget()
qpicamera2 = QGlPicamera2(picam2, width=1280, height=720, keep_ar=True)
layout_h = QHBoxLayout()
layout_h.addWidget(qpicamera2, 80)
window.setLayout(layout_h)
window.setStyleSheet("background-color: black;")

pic_config = picam2.create_still_configuration(main={"size": (1920, 1080)}, lores={"size": (1280, 720)}, transform=libcamera.Transform(vflip=1), display="lores")
picam2.configure(pic_config)

# 定义拍照函数
def take_photo():
    time.sleep(2)  # 等待相机稳定
    picam2.capture_file('a.jpg')
    print("照片已保存为a.jpg")
    # 拍完照后可以选择退出程序
    app.quit()

# 启动相机后,用定时器触发拍照(延迟100ms确保预览启动)
picam2.start()
window.show()
QTimer.singleShot(100, take_photo)

app.exec()

方案2:调整执行顺序(不保留预览窗口)

如果不需要实时预览窗口,可先完成拍照再启动Qt预览(或直接不启动预览):

#!/usr/bin/python3
import sys
import libcamera
import time
from PyQt5.QtWidgets import (QApplication, QWidget, QHBoxLayout)
from picamera2.previews.qt import QGlPicamera2
from picamera2 import Picamera2

picam2 = Picamera2()

pic_config = picam2.create_still_configuration(main={"size": (1920, 1080)}, lores={"size": (1280, 720)}, transform=libcamera.Transform(vflip=1), display="lores")
picam2.configure(pic_config)

picam2.start()
time.sleep(2)
picam2.capture_file('a.jpg')
print("照片已保存为a.jpg")
picam2.stop()

# 如果需要预览,再启动Qt窗口
app = QApplication([])
window = QWidget()
qpicamera2 = QGlPicamera2(picam2, width=1280, height=720, keep_ar=True)
layout_h = QHBoxLayout()
layout_h.addWidget(qpicamera2, 80)
window.setLayout(layout_h)
window.setStyleSheet("background-color: black;")

picam2.start()
window.show()
app.exec()

额外注意事项

  • 确保你的用户对保存图片的目录有写入权限,可通过运行touch test.jpg测试是否能在当前目录创建文件
  • 检查Camera V3的连接是否牢固,广角版的排线方向是否正确
  • 运行代码时使用python3 your_script.py,避免用python2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 07:22:48