在树莓派上使用自带的摄像头采集视频

需要安装的 Python 包

  1. OpenCV:用于处理图像和视频。
  2. PiCamera (可选):如果你使用的是官方的 Raspberry Pi Camera Module,可以通过 opencv 直接访问,也可以安装 picamera 库用于更深层次的控制。
安装步骤

先确认摄像头模块已经启用:

  1. 在终端中运行:

    bash 复制代码
    sudo raspi-config
  2. 在菜单中找到 Interface Options ,选择 Camera,并启用。

  3. 重启树莓派:

    bash 复制代码
    sudo reboot

然后安装好需要的库,可以参考:
树莓派--OpenCV安装踩坑
树莓派明明安装了opencv和numpy,却找不到


测试摄像头状态

bash 复制代码
ls /dev/video*  

如果有 video0 就说明摄像头没有问题


如果读取不到摄像头,可能原因

  1. 摄像头被其他进程占用:

    • 如果其他程序(例如 raspivid、motion 或 OpenCV)正在使用摄像头,picamera 库将无法初始化连接。
  2. 摄像头配置不正确:

    • 树莓派的摄像头模块可能未正确启用或初始化。
  3. 设备节点冲突:

    • 如果有多个视频设备,系统可能尝试分配错误的设备节点。
  4. 显存不足:

    • 树莓派的 GPU 内存分配不足,无法满足 picamera 的需求。

解决方法

** 1:检查摄像头是否被占用**
  1. 使用以下命令查找使用摄像头的进程:

    bash 复制代码
    lsof /dev/video0
  2. 如果有输出,说明某个进程正在使用摄像头,记录下进程 ID (PID),然后终止它:

    bash 复制代码
    kill -9 <PID>

** 2:重启摄像头模块**
  1. 禁用并重新启用摄像头模块:

    bash 复制代码
    sudo modprobe -r bcm2835-v4l2
    sudo modprobe bcm2835-v4l2
  2. 检查设备是否正常:

    bash 复制代码
    ls /dev/video*

** 3:调整显存**
  1. 打开 GPU 内存配置:

    bash 复制代码
    sudo raspi-config
  2. 选择 Performance Options > GPU Memory。

  3. 将显存调整为 128 MB 或更高(建议 256 MB,这里不要设置太高,会导致黑屏无法正常显示!!!!!)。

  4. 重启系统:

    bash 复制代码
    sudo reboot

4:测试摄像头模块

使用以下命令测试摄像头是否正常工作:

bash 复制代码
raspivid -t 5000

这会显示摄像头画面 5 秒钟。如果正常工作,说明硬件无问题。


5. 检查摄像头模块是否启用

确认摄像头模块已启用。使用以下命令检查:

bash 复制代码
vcgencmd get_camera

输出应该是:

bash 复制代码
supported=1 detected=1

如果不是,可以通过 raspi-config 工具启用摄像头模块:

bash 复制代码
sudo raspi-config

然后选择 Interface Options > Camera,启用摄像头,并重启系统。

6. 确保系统没有占用过多的资源

如果树莓派的内存或 CPU 负载过高,也可能导致资源不足。使用以下命令检查系统资源:

bash 复制代码
top

如果系统负载过高,尝试关闭不必要的进程,释放资源。


总结

  1. 更新树莓派的固件和软件包。
  2. 调整 GPU 内存。
  3. 禁用并重新启用摄像头模块。
  4. 确保没有进程占用摄像头。
  5. 检查摄像头是否已启用。

下面附上采集并保存视频的代码

代码示例 1:使用 OpenCV

下面是一个简单的示例,利用 OpenCV 从摄像头读取视频帧并保存为视频文件:

python 复制代码
import cv2

# 初始化摄像头(摄像头索引为 0)
cap = cv2.VideoCapture(0)

# 设置视频参数(分辨率和帧率)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
cap.set(cv2.CAP_PROP_FPS, 30)

# 定义视频编码器和输出文件
fourcc = cv2.VideoWriter_fourcc(*'XVID')  # 或者使用 'MJPG'
out = cv2.VideoWriter('output.avi', fourcc, 30, (640, 480))

print("按 'q' 退出并保存视频...")

while True:
    ret, frame = cap.read()
    if not ret:
        print("无法读取摄像头数据!")
        break

    # 显示视频
    cv2.imshow('Video', frame)
    
    # 写入到输出文件
    out.write(frame)

    # 按 'q' 键退出
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 释放资源
cap.release()
out.release()
cv2.destroyAllWindows()

代码示例 2:使用 PiCamera

如果使用的是官方摄像头,也可以使用 picamera 库来捕获视频,个人感觉能用opecv就最好用opencv,迁移方便:

python 复制代码
from picamera import PiCamera
from time import sleep

camera = PiCamera()

# 设置分辨率和帧率
camera.resolution = (640, 480)
camera.framerate = 30

# 开始录制并保存到文件
camera.start_recording('video.h264')
print("开始录制,按 Ctrl+C 停止...")
try:
    sleep(10)  # 录制 10 秒
finally:
    camera.stop_recording()
    print("录制完成,保存为 video.h264")

注意文件格式转换:

  • 如果使用 PiCamera 保存的 .h264 文件,可以使用以下命令将其转换为 .mp4 格式:

    bash 复制代码
    MP4Box -add video.h264 video.mp4

    需要安装 gpac 工具:

    bash 复制代码
    sudo apt install gpac
相关推荐
摇滚侠1 小时前
《On Java 中文版 基础卷》阅读笔记 对象无处不在 03
java·笔记·python
小小小小钰儿1 小时前
1.5-Python网络编程
开发语言·网络·python·web安全·计算机·网络安全
keke.shengfengpolang1 小时前
2026年金融风控岗技术能力拆解:SQL取数、Python建模、评分卡项目,校招面试到底考什
python
kyrie_sakura2 小时前
大模型学习7 -- 深度学习2 -- 张量
python·深度学习
智鸟科技GemeOpen开发者智能设备2 小时前
智能插座二次开发如何接入Home Assistant,从零开始完整工程实现(Python+React)
开发语言·python·物联网·react.js·智能家居
hqyjzsb3 小时前
法律 Prompt 干货:搭建合同审查提示词要包含哪些要素
开发语言·人工智能·python·职场和发展·数据分析·prompt·业界资讯
Andreapiki3 小时前
风险审计校招技术栈拆解:SQL、Python、Power BI在2026届JD中的真实权重
数据库·python·sql
2601_966949653 小时前
股票池发生变化后,如何高效更新行情数据?从全量刷新到增量同步
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
玖石书4 小时前
python-uv-windows环境安装方案
windows·python·uv