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

需要安装的 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 sleepcamera = 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.rhkb.cn/news/483112.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cocotb pytest

打印python中的print &#xff0c; 应该使用 pytest -s

【C++】STL——map和set

目录 1、序列式容器和关联式容器前 2、set 2.1 set类的介绍 2.2 set的构造和迭代器 2.3 set的增删查 set 的插入 set的查找 set的删除 2.4 multiset和set的差异 3、map 3 .1 pair类型 3.2 map的构造 3.3 map的增删查 map的构造遍历 map的插入 map的删除 map的查…

java基础概念46-数据结构1

一、引入 List集合的三种实现类使用了不同的数据结构&#xff01; 二、数据结构的定义 三、常见的数据结构 3-1、栈 特点&#xff1a;先进后出&#xff0c;后进先出。 java内存容器&#xff1a; 3-2、队列 特点&#xff1a;先进先出、后进后出。 栈VS队列-小结 3-3、数组 3-…

Docker:在 ubuntu 系统上生成和加载 Docker 镜像

本文将介绍在 ubuntu系统上进行 Docker 镜像的生成和加载方法和代码。 文章目录 一、下载和安装 docker二、加载 docker 文件三、保存你的镜像四、将镜像上传到云端并通过连接下载和加载 Docker 镜像五、Docker 容器和本地的文件交互5.1 从容器复制文件到本地宿主机5.1.1 单个文…

《数据挖掘:概念、模型、方法与算法(第三版)》

嘿&#xff0c;数据挖掘的小伙伴们&#xff01;今天我要给你们介绍一本超级实用的书——《数据挖掘&#xff1a;概念、模型、方法与算法》第三版。这本书是数据挖掘领域的经典之作&#xff0c;由该领域的知名专家编写&#xff0c;系统性地介绍了在高维数据空间中分析和提取大量…

做异端中的异端 -- Emacs裸奔之路4: 你不需要IDE

确切地说&#xff0c;你不需要在IDE里面编写或者阅读代码。 IDE用于Render资源文件比较合适&#xff0c;但处理文本&#xff0c;并不划算。 这的文本文件&#xff0c;包括源代码&#xff0c;配置文件&#xff0c;文档等非二进制文件。 先说说IDE带的便利: 函数或者变量的自动…

【C++】编程题目分析与实现回顾:从浮点数运算到整型转换的全面解读

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目一&#xff1a;计算成绩问题分析与优化实现优化后的实现优势 &#x1f4af;题目二&#xff1a;浮点数向零舍入不同实现方式的比较1. 使用强制类型转换 (int)2. 使用标准…

时间表格Java

输入&#xff1a;XXX XXX 小时 分钟 输出&#xff1a; XXX&#xff1a;XXX ~ XXX: XXX XXX&#xff1a;XXX ~ XXX: XXX XXX&#xff1a;XXX ~ XXX: XXX 处理&#xff1a;间隔五分钟、区间45分钟 14:15 ~ 15:0 15:5 ~ 15:50 15:55 ~ 16:40 16:45 ~ 17:30 17:35 ~ 18:20…

Spring AOP 的实现和切点表达式的介绍

1. 快速入手 AOP&#xff1a;就是面相切面编程&#xff0c;切面指的就是某一类特定的问题&#xff0c;也可以理解为面相特定方法编程&#xff0c;例如之前使用的拦截器&#xff0c;就是 AOP 思想的一种应用&#xff0c;统一数据返回格式和统一异常处理也是 AOP 思想的实现方式…

shell脚本30个案例(五)

前言&#xff1a; 通过一个多月的shell学习&#xff0c;总共写出30个案例&#xff0c;分批次进行发布&#xff0c;这次总共发布了5个案例&#xff0c;希望能够对大家的学习和使用有所帮助&#xff0c;更多案例会在下期进行发布。 案例二十一、系统内核优化 1.问题&#xff1…

一文解析Kettle开源ETL工具!

ETL&#xff08;Extract, Transform, Load&#xff09;工具是用于数据抽取、转换和加载的软件工具&#xff0c;用于支持数据仓库和数据集成过程。Kettle作为传统的ETL工具备受用户推崇。本文就来详细说下Kettle。 一、Kettle是什么&#xff1f; Kettle 是一款开源的 ETL&#x…

IDEA使用HotSwapHelper进行热部署

目录 前言JDK1.8特殊准备DECVM安装插件安装与配置参考文档相关下载 前言 碰到了一个项目&#xff0c;用jrebel启动项目时一直报错&#xff0c;不用jrebel时又没问题&#xff0c;找不到原因&#xff0c;又不想放弃热部署功能 因此思考能否通过其他方式进行热部署&#xff0c;找…

使用无监督机器学习算法进行预测性维护

目录 一、说明 二、主成分分析&#xff08;PCA&#xff09; 三、 K-means方法 四、K-最近邻 (KNN) 五、密度的空间聚类 (DBSCAN) 六、更先进的预测性维护算法 6.1 独立成分分析 (ICA) 6.2 PCA 和 ICA 有什么区别&#xff1f; 6.3 OPTICS 聚类 6.4 自组织映射 (SOM) 6.5 局部敏…

Elasticsearch 进阶

核心概念 索引(Index) 一个索引就是一个拥有几分相似特征的文档的集合。比如说&#xff0c;你可以有一个客户数据的索引&#xff0c;另一个产品目录的索引&#xff0c;还有一个订单数据的索引。一个索引由一个名字来标识(必须全部是小写字母)&#xff0c;并且当我们要对这个索…

107.【C语言】数据结构之二叉树求总节点和第K层节点的个数

目录 1.求二叉树总的节点的个数 1.容易想到的方法 代码 缺陷 思考:能否在TreeSize函数内定义静态变量解决size的问题呢? 其他写法 运行结果 2.最好的方法:分而治之 代码 运行结果 2.求二叉树第K层节点的个数 错误代码 运行结果 修正 运行结果 其他写法 1.求二…

vue2 虚拟DOM 和 真实DOM (概念、作用、Diff 算法)

虚拟 DOM 和 真实DOM&#xff08;概念、作用、Diff 算法&#xff09; 1.1 概念 真实 DOM&#xff08;Document Object Model&#xff09;&#xff1a;是浏览器中用于表示文档结构的树形结构。 <h2>你好</h2>虚拟DOM&#xff1a;用 JavaScript 对象来模拟真实 DOM…

Spring AI 框架介绍

Spring AI是一个面向人工智能工程的应用框架。它的目标是将Spring生态系统的设计原则&#xff08;如可移植性和模块化设计&#xff09;应用于AI领域&#xff0c;并推广使用pojo作为AI领域应用的构建模块。 概述 Spring AI 现在(2024/12)已经支持语言&#xff0c;图像&#xf…

matlab 中的 bug

在matlab中绘图&#xff0c;设置 axe 的背景颜色 axes_in3.Color #00235B ;打印的时候 print(figure_handle1,-dpng,-r300,"merge_yt_ey") ;此时保存的图片无法识别背景颜色 原因在于 matlab 中的 InverseHardcopy 将 InvertHardcopy 设置成 off 则可以解决这个问…

【数据库系列】Liquibase 与 Flyway 的详细对比

在现代软件开发中&#xff0c;数据库版本控制是一个至关重要的环节。为了解决数据库迁移和变更管理的问题&#xff0c;开发者们通常会使用工具&#xff0c;如 Liquibase 和 Flyway。本文将对这两个流行的数据库迁移工具进行详细比较&#xff0c;从基础概念、原理、优缺点到使用…

DVWA靶场通关——DOM型XSS漏洞

一、DOM型XSS攻击概述 DOM型XSS&#xff08;DOM-based Cross-Site Scripting&#xff0c;DOM XSS&#xff09;是一种跨站脚本攻击&#xff08;XSS&#xff09;的变种&#xff0c;它与传统的反射型XSS&#xff08;Reflected XSS&#xff09;或存储型XSS&#xff08;Stored XSS&a…