【2023新教程】树莓派4B安装摄像头教程-树莓派4B配置CSI摄像头-使用libcamera操作-解决raspistill command not found问题-解决树莓派安装摄像头后VNC黑屏

本文首发于我的学习之路(https://liguang.wang)我的编程之路(https://wangliguang.cn),如果文章格式或图片有异常,请直接访问上述首发网站,搜索本文即可阅读。

注意:本教程仅用于libcamera操作。如果使用OpenCV操作,请勿配置本文第三节的内容!在完成第1、2、4节后,OpenCV可正常使用!

背景

最近为新买的树莓派4B安装摄像头。然而网上的教程非常老旧,仍然使用旧版系统进行配置,仍然使用raspistill命令来进行操作,这对于新版树莓派系统来说,会产生command not found报错。同时,网上关于无法使用新命令libcamera调用摄像头的排错教程异常缺乏,同时很多教程互相抄,也许能解决问题,但是多了很多额外配置,是否会对今后产生影响不明确。本教程旨在解决上述问题。
本文可解决以下问题:

  • 树莓派4B配置CSI摄像头
  • 使用libcamera命令操作树莓派摄像头
  • 解决raspistill command not found问题
  • 解决安装摄像头后VNC黑屏并显示Cannot currently show the desktop问题

1 安装摄像头

1、将摄像头安装到树莓派上
首先,查看排线最底部,会发现一面有蓝色胶带,另一面有纹路。
蓝色胶带一面:
有蓝色胶带一面

纹路一面:
有纹路一面

注意,本示意图为3B的示意图,4B的部件有所不同,请根据实际情况调整)找到红圈中的CSI接口,向上轻轻拉黑色的部分,打开CSI接口。然后将蓝色胶带一面朝向网线接口,有纹路一面朝向电源接口,插入到CSI接口中。如示意图所示:
示意图

其中,蓝圈1表示网线接口,蓝圈2右侧为电源接口(注意,本示意图为3B的示意图,4B的部件有所不同,请根据实际情况调整),中间红圈表示CSI接口

2 打开摄像头模块

1、在树莓派终端中输入以下命令,打开配置:

sudo raspi-config

效果如图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4XdRan4K-1692434560868)(https://wangliguang.cn/wp-content/uploads/2023/08/屏幕截图-2023-08-13-184640.png)]
然后选择上图中的第三项。
打开如下图所示的新界面,然后选择第一项,如图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DS5hy3Ph-1692434560868)(https://wangliguang.cn/wp-content/uploads/2023/08/屏幕截图-2023-08-13-184620.png)]
在新界面中选择Yes。返回后选择Finish,然后Reboot。此时摄像头已经打开,但还不能使用。

3 配置摄像头

注意:本教程仅用于libcamera操作。如果使用OpenCV操作,请勿配置本文第三节的内容!在完成第1、2、4节后,OpenCV可正常使用!
1、在终端中输入:

sudo nano /boot/config

在最下面添加下面的语句:

dtoverlay=ov5647

注意,上面的命令仅适用于用长长尾巴的CSI摄像头(如上面的图片),非此摄像头,在命令中替换成其他参数,如下表所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b7DiTcCC-1692434560869)(https://wangliguang.cn/wp-content/uploads/2023/08/屏幕截图-2023-08-19-163411.png)]
保存后重启。
重启后,在VNC下使用下面两个命令进行测试:

libcamera-hello
libcamera-jpeg -o test.jpg

其中第一个命令是检测摄像头,会打开界面,显示几秒摄像头拍摄内容后就关闭了。第二个命令是拍摄一张图片,保存在当前目录下面。

4 解决安装摄像头后VNC打不开的问题

使用如下命令

sudo nano /boot/config.txt

将hdmi_force_hotplug=1前面的#删掉即可。如图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BbQoA2ZB-1692434560869)(https://wangliguang.cn/wp-content/uploads/2023/08/屏幕截图-2023-08-19-163809.png)]
然后,输入以下命令进入配置:

sudo raspi-config

效果如图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hMIHtrP0-1692434560869)(https://wangliguang.cn/wp-content/uploads/2023/08/屏幕截图-2023-08-13-184640.png)]
然后选择上图中的第二项。进去后,将分辨率调到最大,然后保存后reboot树莓派,问题顺利解决。

<think>嗯,用户想了解如何在树莓派4B上使用CSI摄像头实现火焰识别和追踪的步骤。我需要先理清楚整个流程,然后分步骤解释。首先,用户可能对树莓派摄像头有一定的了解,但具体到火焰识别和追踪可能不太熟悉,所以得从基础开始。 第一步应该是硬件准备,树莓派4B和CSI摄像头是必须的,还有可能需要其他配件,比如散热风扇或者支架。这部分需要详细说明如何正确连接摄像头,因为用户可能第一次接触CSI接口,需要指导他们开启摄像头接口,可能还要提到raspi-config的设置。 接下来是环境配置安装操作系统和必要的库。树莓派通常用Raspbian系统,Python是主要的编程语言。需要安装OpenCV,这部分可能会遇到依赖问题,得提供详细的安装步骤,可能包括使用pip或者从源码编译。同时,CSI摄像头的驱动和测试命令也要提到,比如raspistill,确保摄像头正常工作。 然后是火焰识别的算法部分。用户可能需要了解火焰的特征,比如颜色、形状和动态变化。颜色识别用HSV空间比较有效,动态检测可能需要背景减除或者帧差法。这里可以建议使用OpenCV的函数,比如inRange、absdiff,还有轮廓检测。可能需要结合多个特征来提高准确率,避免误检。 接下来是代码实现步骤。需要分模块讲解:摄像头初始化、颜色过滤、动态检测、轮廓处理、追踪逻辑。代码示例要简洁,关键部分加上注释,方便用户理解。比如,如何设置HSV范围,如何结合颜色和动态检测结果,如何计算质心并追踪。 追踪实现部分可能需要舵机云台,这里可能需要硬件扩展,比如PCA9685驱动舵机。代码示例要包括控制舵机旋转的逻辑,根据火焰位置调整角度。这部分需要用户有一定的硬件连接能力,可能需要额外购买模块,得提醒用户注意兼容性和接线正确。 优化和改进部分,用户可能在实际应用中遇到误检或者性能问题。可以建议多线程处理、深度学习模型替换传统算法,或者加入报警功能。这些扩展内容帮助用户进一步提升项目的实用性。 最后,注意事项和常见问题,比如光照影响、性能瓶颈、硬件安全。用户可能在实施过程中遇到摄像头无法启动、颜色检测不准确等问题,需要给出排查建议,比如检查连接、调整HSV值、简化算法流程。 整个过程中,要确保步骤清晰,语言通俗,避免过于专业的术语,同时提供具体的命令和代码示例。用户可能需要从零开始,所以每个环节都要详细,尤其是环境配置和硬件连接部分。另外,考虑到火焰识别的准确性,可能需要强调多特征融合的重要性,避免单一颜色检测的局限性。</think>我将分步骤为您讲解树莓派4B通过CSI摄像头实现火焰识别与追踪的实现流程: 一、硬件准备 1. 树莓派4B(推荐4GB/8GB内存版本) 2. CSI摄像头模块(推荐IMX219传感器版本) 3. 摄像头云台套件(含舵机) 4. 散热风扇套件 5. 5V 3A电源适配器 二、环境配置 1. 安装Raspberry Pi OS(64位Lite版) ```bash sudo apt update && sudo apt upgrade -y sudo apt install python3-opencv libatlas-base-dev -y ``` 2. 启用CSI接口 ```bash sudo raspi-config # 选择Interface Options > Camera > Enable ``` 3. 测试摄像头 ```bash libcamera-still -o test.jpg ``` 三、火焰识别算法实现 1. 颜色空间转换(RGB→HSV) $$ \begin{bmatrix} H \\ S \\ V \end{bmatrix} = f_{RGB2HSV}(R,G,B) $$ 2. 火焰颜色阈值过滤 ```python lower_flame = np.array([0, 120, 200]) # H:0-20, S>120, V>200 upper_flame = np.array([20, 255, 255]) mask = cv2.inRange(hsv_frame, lower_flame, upper_flame) ``` 3. 动态特征检测 ```python # 使用帧间差分法 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) diff = cv2.absdiff(gray, prev_gray) _, motion_mask = cv2.threshold(diff, 25, 255, cv2.THRESH_BINARY) ``` 4. 形态学处理 ```python kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5,5)) mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel) ``` 四、追踪实现步骤 1. 云台控制电路连接 ``` 树莓派GPIO │ ├─ PCA9685舵机驱动板 │ ├─ 水平舵机(PWM0) │ └─ 垂直舵机(PWM1) ``` 2. 目标追踪逻辑 ```python # 计算火焰区域质心 M = cv2.moments(mask) cx = int(M["m10"] / M["m00"]) cy = int(M["m01"] / M["m00"]) # PID控制云台转动 error_x = cx - frame_center_x pwm_x += Kp * error_x + Ki * integral_x set_servo_angle(0, pwm_x) ``` 五、优化与改进 1. 多线程处理 ```python # 视频采集线程 class VideoThread(threading.Thread): def run(self): while True: ret, self.frame = cap.read() # 处理线程 class ProcessThread(threading.Thread): def run(self): while True: process_frame(video_thread.frame) ``` 2. 深度学习增强 ```python # 使用MobileNetV3进行火焰验证 model = tf.lite.Interpreter(model_path="fire_detect.tflite") input_details = model.get_input_details() output_details = model.get_output_details() ``` 六、注意事项 1. 实际HSV阈值需通过实验校准 2. 建议帧率控制在15-20FPS之间 3. 避免阳光直射导致的误识别 4. 使用热成像传感器可提高准确性 常见问题排查: 1. 摄像头无信号:检查CSI排线是否插紧 2. 颜色检测失效:调整HSV阈值范围 3. 云台抖动:降低PID参数或增加机械阻尼 4. 延迟过高:减少图像分辨率(建议640x480) 完整项目代码可参考GitHub开源项目: https://github.com/example/fire-detection-raspberrypi (注:实际部署时需注意消防安全规范,建议作为实验用途)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值