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

需要安装的 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. 摄像头被其他进程占用

    • 如果其他程序(例如 raspividmotion 或 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
相关推荐
许一世流年 绝不嵩手 cium几秒前
python笔记3
开发语言·笔记·python
---wzy---2 分钟前
我的知识图谱和Neo4j数据库的使用
开发语言·python
星辰@Sea25 分钟前
使用OpenCV和卡尔曼滤波器进行实时活体检测
人工智能·opencv·计算机视觉
Tronlongtech27 分钟前
基于OpenCV的拆分和合并图像通道实验案例分享_基于RK3568教学实验箱
人工智能·opencv·计算机视觉
算力魔方AIPC34 分钟前
PyTorch 2.5.1: Bugs修复版发布
人工智能·pytorch·python
Joyner201837 分钟前
pytorch中有哪些归一化的方式?
人工智能·pytorch·python
Niuguangshuo38 分钟前
PyTorch 实现动态输入
人工智能·pytorch·python
禾风wyh39 分钟前
【PyTorch】回归问题代码实战
python·算法·机器学习
总有一天你的谜底会解开40 分钟前
pytorch加载预训练权重失败
人工智能·pytorch·python
每天八杯水D42 分钟前
python使用pdfplumber工具包加载pdf格式数据
人工智能·python·机器学习·pdfplumber·加载pdf数据