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

news2024/12/26 22:24:40

需要安装的 Python 包

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

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

  1. 在终端中运行:
    sudo raspi-config
    
  2. 在菜单中找到 Interface Options,选择 Camera,并启用。
  3. 重启树莓派:
    sudo reboot
    

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


测试摄像头状态

ls /dev/video*  

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


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

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

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

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

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

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

解决方法

** 1:检查摄像头是否被占用**
  1. 使用以下命令查找使用摄像头的进程:
    lsof /dev/video0
    
  2. 如果有输出,说明某个进程正在使用摄像头,记录下进程 ID (PID),然后终止它:
    kill -9 <PID>
    

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

    sudo modprobe -r bcm2835-v4l2
    sudo modprobe bcm2835-v4l2
    
  2. 检查设备是否正常:

    ls /dev/video*
    

** 3:调整显存**
  1. 打开 GPU 内存配置:
    sudo raspi-config
    
  2. 选择 Performance Options > GPU Memory
  3. 将显存调整为 128 MB 或更高(建议 256 MB,这里不要设置太高,会导致黑屏无法正常显示!!!!!)。
  4. 重启系统:
    sudo reboot
    

4:测试摄像头模块

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

raspivid -t 5000

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


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

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

vcgencmd get_camera

输出应该是:

supported=1 detected=1

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

sudo raspi-config

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

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

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

top

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


总结

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

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

代码示例 1:使用 OpenCV

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

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,迁移方便:

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 格式:
    MP4Box -add video.h264 video.mp4
    
    需要安装 gpac 工具:
    sudo apt install gpac
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2252790.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++设计模式(装饰模式)

一、介绍 1.动机 在某些情况下我们可能会“过度地使用继承来扩展对象的功能”&#xff0c;由于继承为类型引入的静态特质&#xff0c;使得这种扩展方式缺乏灵活性&#xff1b;并且随着子类的增多&#xff08;扩展功能的增多&#xff09;&#xff0c;各种子类的组合&#xff0…

【VMware】Ubuntu 虚拟机硬盘扩容教程(Ubuntu 22.04)

引言 想装个 Anaconda&#xff0c;发现 Ubuntu 硬盘空间不足。 步骤 虚拟机关机 编辑虚拟机设置 扩展硬盘容量 虚拟机开机 安装 gparted sudo apt install gparted启动 gparted sudo gparted右键sda3&#xff0c;调整分区大小 新大小拉满 应用全部操作 调整完成

03-12、SpringCloud Alibaba第十二章,升级篇,服务注册与配置中心Nacos

SpringCloud Alibaba第十二章&#xff0c;升级篇&#xff0c;服务注册与配置中心Nacos 一、为什么SpringCloud Alibaba 1、为什么 有了spring cloud这个微服务的框架&#xff0c;为什么又要使用spring cloud alibaba这个框架了&#xff1f;最重要的原因在于spring cloud中的…

java网络通信(三):TCP通信、实现客户端-服务端消息通信

目录 1、什么是 TCP协议&#xff1f; 2、代码实现TCP协议的一发一收 2.1、客户端 2.2、服务端 2.3 结果演示 3、代码实现TCP协议的多发多收 3.1 客户端 3.2 服务端 3.3 结果演示 简介&#xff1a;本文章主要是演示如何用java代码以及TCP协议实现网络通信&#xff0c;实…

剖析go协程池实现原理

go协程池实现 在go语言编程中有一种池肯定避免不了&#xff0c;那就是-协程池&#xff0c;无论你是日常工作还是面试中面试官都无法避免协程池&#xff0c;掌握协程池你也就算是入门go的并发编程了&#xff0c;打一波广告后面会有专门的文章来介绍如何在go中进行并发编程。 协…

华为关键词覆盖应用市场ASO优化覆盖技巧

在我国的消费者群体当中&#xff0c;华为的品牌形象较高&#xff0c;且产品质量过硬&#xff0c;因此用户基数也大。与此同时&#xff0c;随着影响力的增大&#xff0c;华为不断向外扩张&#xff0c;也逐渐成为了海外市场的香饽饽。作为开发者和运营者&#xff0c;我们要认识到…

万能门店小程序管理系统 onepic_uploade 任意文件上传漏洞复现

0x01 产品简介 万能门店小程序管理系统是一款功能强大的工具,旨在为各行业商家提供线上线下融合的全方位解决方案。是一个集成了会员管理和会员营销两大核心功能的综合性平台。它支持多行业使用,通过后台一键切换版本,满足不同行业商家的个性化需求。该系统采用轻量后台,搭…

QT:信号和槽01

QT中什么是信号和槽 概念解释 在 Qt 中&#xff0c;信号&#xff08;Signals&#xff09;和槽&#xff08;Slots&#xff09;是一种用于对象间通信的机制。信号是对象发出的事件通知&#xff0c;而槽是接收并处理这些通知的函数。 例如&#xff0c;当用户点击一个按钮时&#…

SQL面试50题

数据表关系图 数据表 CREATE TABLE student (id int(11) NOT NULL AUTO_INCREMENT,name varchar(255) NOT NULL,sex enum(female,male) NOT NULL,birth date NOT NULL,credit float(5,2) DEFAULT NULL,PRIMARY KEY (id) ) ENGINEInnoDB AUTO_INCREMENT25 DEFAULT CHARSETutf8;…

下载maven 3.6.3并校验文件做md5或SHA512校验

一、下载Apache Maven 3.6.3 Apache Maven 3.6.3 官方下载链接&#xff1a; 二进制压缩包&#xff08;推荐&#xff09;: ZIP格式: https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.zipTAR.GZ格式: https://archive.apache.org/dist/…

基于poi和javabean的excel读取

写在前面 示例写出时间&#xff1a;2024-12-02 这仅仅是excel读取的一个示例, 记录一下&#xff0c;这里也改了一下之前的导出&#xff0c;主要是为了兼容读取 之前的博客地址 基于poi和JavaBean的excel导出 poi依赖 <dependency><groupId>org.apache.poi</gr…

一键生成后端服务,MemFire Cloud重新定义开发效率

作为开发者&#xff0c;特别是独立开发者和小团队成员&#xff0c;大家都知道开发的最大难题之一就是搭建后端服务。要让一个应用从零开始&#xff0c;除了前端的开发工作外&#xff0c;还需要考虑数据库、接口、认证、存储等等一系列繁琐的后台工作。而MemFire Cloud这款神器&…

Maven、JAVAWeb、Servlet

知识点目标 1、MavenMaven是什么Maven项目的目录结构Maven的Pom文件Maven的命令Maven依赖管理Maven仓库JavaWeb项目 2.网络基础知识 3、ServletMaven Maven是什么 Maven是Java的项目管理工具&#xff0c;可以构建&#xff0c;打包&#xff0c;部署项目&#xff0c;还可以管理…

controller中的参数注解@Param @RequestParam和@RequestBody的不同

现在controller中有个方法&#xff1a;&#xff08;LoginUserRequest是一个用户类对象&#xff09; PostMapping("/test/phone")public Result validPhone(LoginUserRequest loginUserRequest) {return Result.success(loginUserRequest);}现在讨论Param("login…

Linux 内核系统架构

Linux 内核是一个复杂且高度模块化的系统&#xff0c;负责操作硬件资源、管理进程和内存、提供网络服务、执行文件系统操作、进行设备驱动程序的管理等。它为用户空间提供了一个抽象层&#xff0c;并为应用程序提供了底层服务。本文将深入探讨 Linux 内核的系统架构&#xff0c…

AI开发:逻辑回归 - 实战演练- 垃圾邮件的识别(二)

接上一篇AI开发&#xff1a;逻辑回归 - 实战演练- 垃圾邮件的识别&#xff08;一&#xff09; new_email 无论为什么文本&#xff0c;识别结果几乎都是垃圾邮件,因此我们需要对源码的逻辑进行梳理一下&#xff1a; 在代码中&#xff0c;new_email 无论赋值为何内容都被识别为…

WPF+MVVM案例实战与特效(三十)- 封装一个系统日志显示控件

文章目录 1、运行效果2、日志控件封装1、文件创建2、DisplayLogPanel.xaml 代码3、DisplayLogPanel.cs 代码4、数据模型5、枚举类型3、自定义控件使用1、LogPanelWindow.xaml2、LogPanelViewModel.cs4、总结1、运行效果 2、日志控件封装 1、文件创建 打开 Wpf_Examples ,在 …

VideoBooth: Diffusion-based Video Generation with Image Prompts

VideoBooth: Diffusion-based Video Generation with Image Prompts 概括 文章提出了一个视频生成模型VideoBooth&#xff0c;输入一张图片和一个文本提示词&#xff0c;即可输出保持图片中物体且符合文本提示词要求的视频。 方法 粗-细两阶段设计&#xff1a;1&#xff09;…

电子电气架构 --- 面向服务的汽车诊断架构

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 所有人的看法和评价都是暂时的,只有自己的经历是伴随一生的,几乎所有的担忧和畏惧,都是来源于自己的想象,只有你真的去做了,才会发现有多快乐。…

生成树详解(STP、RSTP、MSTP)

目录 1、STP 1.概述 2.基本概念 3.端口角色及其作用 4.报文结构 5.STP的端口状态 6.三种定时器 7.STP选举步骤 8.配置BPDU的比较原则 9.TCN BPDU 10.临时环路的问题 11.传统STP的不足 拓扑变更处理过程 2、RSTP 1.端口角色 2.端口状态 3.P/A&#xff08;Propo…