【树莓派】1.树莓派公网监控

CLIP-GmP-ViT-L-14编码模型

CLIP-GmP-ViT-L-14编码模型` 是一个图文双塔编码模型,适合做图文匹配、零样本分类和跨模态检索演示。本镜像已经完成 Web 部署,打开页面即可上传图片并测试图文表征能力

[树莓派] 1.树莓派公网监控

纯净界面:只显示画面 + 时间/帧率
目标:在树莓派上用 OpenCV + Flask 搭一个极简监控网页。
特点:纯黑背景、全屏自适配、右下角时间+FPS、无任何按钮和多余元素

项目总结

利用树莓派和摄像头实现局域网监控
利用内网穿透实现公网显示



一、后续操作

直接复制粘贴

1.无开机自启操作步骤

在配置完之后只需要输入这几行命令即可。
树莓派开机进入

cd ~/camera_monitor

激活虚拟环境

source camera_env/bin/activate

插上摄像头,直接运行(用系统Python)

python3 camera_monitor.py

在这里插入图片描述
在同一局域网的设备上,打开浏览器访问:

http://树莓派IP地址:5000

在这里插入图片描述
如需修改

nano camera_monitor.py

进入py文件,修改帧率和像素。
在这里插入图片描述
完成后按 Ctrl + O ,
然后回车保存,按 Ctrl + X 退出。


二、树莓派监控配置及实现

0.硬件准备

  1. 树莓派
  2. 摄像头模块或USB摄像头
  3. MicroSD卡、稳定电源、网络连接

1.系统准备

1.1 烧录系统

使用 Raspberry Pi Imager 将最新 Raspberry Pi OS 烧录到SD卡,
(在我上一篇文章里讲过了)

1.2 启用官方摄像头模块

(新版本有修改,或者不用修改)
(现在在设置里找不到了,可能是默认开启了,不用设置)
如果是老版本系统:

sudo raspi-config
# 选择 Interface Options -> Camera -> Enable
#然后重启
sudo reboot
#这是关机命令
sudo shutdown -h now

1.3 系统更新与基础依赖

五个命令总览,依次运行。

sudo apt update && sudo apt upgrade -y
sudo apt install -y python3-pip python3-dev
sudo apt install -y libjpeg-dev libpng-dev libv4l-dev v4l-utils
sudo apt install -y cmake build-essential pkg-config
sudo apt autoremove -y && sudo apt autoclean

第1个命令

sudo apt update && sudo apt upgrade -y

在这里插入图片描述
等待
在这里插入图片描述
OK
在这里插入图片描述
第2个命令

sudo apt install -y python3-pip python3-dev

在这里插入图片描述
第3个命令

sudo apt install -y libjpeg-dev libpng-dev libv4l-dev v4l-utils

在这里插入图片描述
第4个命令

sudo apt install -y cmake build-essential pkg-config

在这里插入图片描述
第5个命令

sudo apt autoremove -y && sudo apt autoclean

在这里插入图片描述


2.安装Python依赖

2.1 系统包下载管理

sudo apt install -y python3-opencv python3-flask python3-numpy

在这里插入图片描述
验证安装

python3 -c "import cv2, flask, numpy; print('✅ 环境准备完成')"

在这里插入图片描述

2.2 测试摄像头

python3 -c "
import cv2
cap = cv2.VideoCapture(0)
print('✅ 摄像头正常' if cap.isOpened() else '❌ 摄像头失败')
cap.release()
"

在这里插入图片描述


3.部署程序

3.1 创建项目目录

mkdir -p ~/camera_monitor
cd ~/camera_monitor

删除旧环境,创建支持系统包的新环境

rm -rf camera_env
python3 -m venv camera_env --system-site-packages
source camera_env/bin/activate

在这里插入图片描述
建py文件

touch camera_monitor.py

进py文件

nano camera_monitor.py

将代码保存在 ~/camera_monitor/camera_monitor.py
(这里只是步骤展示,代码太长了,有需要的私信我)
在这里插入图片描述
输入Python 代码后,
完成后按 Ctrl + O ,
然后回车保存,按 Ctrl + X 退出。

如果输入错误,需要删文件

cd Desktop      #文件位置
ls
rm 文件名
rm camera_monitor.py

3.2 直接测试运行

cd ~/camera_monitor

激活虚拟环境

source camera_env/bin/activate

插上摄像头,直接运行

python3 camera_monitor.py

你就可以看见了
在这里插入图片描述
Ctrl+c是结束。
在这里插入图片描述
这行的网址就是监控网址

*  Running on http://192.168.137.32:5000

同一局域网设备打开浏览器,访问:
http://树莓派IP地址:5000
在我这也就是 http://192.168.137.32:5000
在电脑热点设置里(连接电脑热点是最方便的)
在这里插入图片描述

或者提前用如下命令行看树莓派ip

hostname -I

在这里插入图片描述

3.3最终效果

利用如下硬件:
在这里插入图片描述
树莓派zero2w+摄像头

实现监控画面如下:
在这里插入图片描述
因为我要放在其他项目里
(比如我发布的【开发项目】 1.Seaclear海洋垃圾识别项目展示
这里仅需要干净的视频流,越干净越方便改动。


4.自定义设置

只需修改代码 __init__ 方法顶部的两行:

# ============ 在这里修改设置 ============
self.fps = 15                    # 帧率设置 (1-30)
self.resolution = (640, 480)     # 分辨率设置 (宽, 高)

# 常用分辨率选项:
# (320, 240)   # 小尺寸 - 显示 "月-日 时:分"
# (640, 480)   # 标准尺寸 - 显示 "月-日 时:分"
# (800, 600)   # 中等尺寸 - 显示完整时间
# (1024, 768)  # 大尺寸 - 显示完整时间
# (1280, 720)  # HD 720p - 显示完整时间
# (1920, 1080) # Full HD 1080p - 显示完整时间
# ========================================

分辨率与时间显示格式对应关系:

分辨率时间格式适用场景
320×240月-日 时:分省流量,手机访问
640×480月-日 时:分标准,默认推荐
800×600年-月-日 时:分:秒中等画质
1024×768年-月-日 时:分:秒清晰画质
1280×720年-月-日 时:分:秒HD,局域网推荐
1920×1080年-月-日 时:分:秒全高清,录像用

带宽参考估算:

配置估算带宽
320×240 @ 10fps~0.5 Mbps
640×480 @ 15fps~1-2 Mbps
1280×720 @ 15fps~3-5 Mbps
1920×1080 @ 15fps~5-8 Mbps

修改后重启服务生效:

sudo systemctl restart camera-monitor.service

5.故障排除

遇到的问题都有解决方案,不行就问问AI。

故障1: 读取帧失败,稍后重试

# 查看摄像头设备
v4l2-ctl --list-devices

# 查看支持的格式
v4l2-ctl --list-formats-ext -d /dev/video0

# 用ffmpeg直接测试能否抓帧
ffmpeg -f v4l2 -i /dev/video0 -frames:v 1 /tmp/test.jpg 2>&1 | tail -5

出现如下代码:

asuna@raspberrypi:~/camera_monitor $ ffmpeg -f v4l2 -i /dev/video0 -frames:v 1 /tmp/test.jpg 2>&1 | tail -5 libpostproc 56. 6.100 / 56. 6.100 
[video4linux2,v4l2 @ 0x1deeb60] ioctl(VIDIOC_G_PARM): Inappropriate ioctl for device 
[video4linux2,v4l2 @ 0x1deeb60] Time per frame unknown 
[video4linux2,v4l2 @ 0x1deeb60] ioctl(VIDIOC_STREAMON): Invalid argument /dev/video0: Invalid argument

/dev/video0 是树莓派官方摄像头的 unicam CSI 原始接口,它输出的是 Bayer RAW 格式,OpenCV 和 ffmpeg 无法直接读取。

真正可用的处理后视频设备是 /dev/video13(bcm2835-isp 输出)。

再测试一下

(camera_env) asuna@raspberrypi:~/camera_monitor $ python3 -c " import cv2 # 测试 ISP 输出设备 for dev in [13, 14, 15, 16, 20, 21]: cap = cv2.VideoCapture(dev, cv2.CAP_V4L2) if cap.isOpened(): ret, frame = cap.read() print(f'/dev/video{dev}: isOpened=True, read={ret}') cap.release() else: print(f'/dev/video{dev}: 无法打开') "
出现如下代码:
 [ WARN:0@0.728] global ./modules/videoio/src/cap_v4l.cpp (902) open VIDEOIO(V4L2:/dev/video13): can't open camera by index /dev/video13: 无法打开 
 [ WARN:0@10.759] global ./modules/videoio/src/cap_v4l.cpp (1013) tryIoctl VIDEOIO(V4L2:/dev/video14): select() timeout. /dev/video14: isOpened=True, read=False 
 [ WARN:0@20.787] global ./modules/videoio/src/cap_v4l.cpp (1013) tryIoctl VIDEOIO(V4L2:/dev/video15): select() timeout. /dev/video15: isOpened=True, read=False 
 [ WARN:0@20.792] global ./modules/videoio/src/cap_v4l.cpp (902) open VIDEOIO(V4L2:/dev/video16): can't open camera by index /dev/video16: 无法打开 
 [ WARN:0@20.792] global ./modules/videoio/src/cap_v4l.cpp (902) open VIDEOIO(V4L2:/dev/video20): can't open camera by index /dev/video20: 无法打开
 [ WARN:0@30.813] global ./modules/videoio/src/cap_v4l.cpp (1013) tryIoctl 
  VIDEOIO(V4L2:/dev/video21): select() timeout. /dev/video21: isOpened=True, read=False 

先安装并测试:

sudo apt install -y python3-picamera2

python3 -c "
from picamera2 import Picamera2
cam = Picamera2()
cam.start()
import time; time.sleep(1)
frame = cam.capture_array()
print('✅ picamera2 读帧成功, shape:', frame.shape)
cam.stop()
"

再运行就可以观察到问题解决了

python3 ~/camera_monitor/camera_monitor.py

故障2: 摄像头颜色问题

如果颜色不对,比如
现实里的黄色在画面里是蓝色,
现实里的红色在画面里是蓝色,
现实里的蓝色是红色,

frame = self.camera.capture_array()
# frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)  # 注释掉这行

问题1:摄像头无法识别

# 检查设备节点是否存在
ls /dev/video*

# 将当前用户加入 video 组
sudo usermod -a -G video $USER
sudo reboot

# USB摄像头:查看设备信息
v4l2-ctl --list-devices

问题2:网页无法访问

# 确认程序正在运行
ps aux | grep camera_monitor

# 确认端口正在监听
sudo ss -tlnp | grep 5000

# 查看防火墙
sudo ufw status

问题3:画面延迟/卡顿

  • 降低帧率(改为 10 FPS)
  • 降低分辨率(改为 640×480)
  • 降低JPEG质量(将代码中 85 改为 70
  • 检查网络质量

问题4:服务启动失败

# 查看详细错误信息
sudo journalctl -u camera-monitor.service -n 30

# 手动测试能否直接运行
python3 /home/pi/camera_monitor/camera_monitor.py

问题5:GPU内存不足(画面异常)

sudo raspi-config
# Advanced Options -> Memory Split -> 设置为 128 或 256

三、实现公网访问

用你申请的公网ip或者使用内网穿透即可实现。
这里不做详细介绍,只需要配置好,然后把局域网网址和端口输入进去即可实现。
(没开通,还得先花钱开通,后面做项目开通了补上图片)
很好实现的。


下期预告:树莓派监控接入其他网页或者应用


您可能感兴趣的与本文相关的镜像

CLIP-GmP-ViT-L-14编码模型

CLIP-GmP-ViT-L-14编码模型

图像识别
CLIP

CLIP-GmP-ViT-L-14编码模型` 是一个图文双塔编码模型,适合做图文匹配、零样本分类和跨模态检索演示。本镜像已经完成 Web 部署,打开页面即可上传图片并测试图文表征能力

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值