rk3588目标检测:Jupyter中OpenCV实时预览方法

传统的 plt.imshow 在循环中绘图会非常卡顿,而 ipywidgets.Image 组件允许我们直接将 OpenCV 编码后的字节流推送到浏览器前端,实现接近实时的丝滑预览。

1. 环境准备 (安装)

在你的 CLI 系统(服务器、树莓派等)终端执行:

shell 复制代码
# 确保安装了核心库
pipx install opencv-python jupyterlab ipywidgets

# 如果你使用的是较旧的 Jupyter Notebook (version < 6),可能需要执行以下插件启用命令:
# jupyter nbextension enable --py widgetsnbextension

pipx安装后需要激活一下路径

bash 复制代码
# 编辑 bash 配置文件 
nano ~/.bashrc

# 加入 pipx 安装的 JupyterLab 路径 
export PATH=$HOME/.local/bin:$PATH

# 保存(nano编辑器:按 Ctrl+O → 回车 → Ctrl+X) 
source ~/.bashrc

我用uv单独创建了一个虚拟环境

bash 复制代码
uv venv --python 3.12
source .vevn/bin/activate

2. 启动 Jupyter:

在服务器终端输入:

shell 复制代码
jupyter-lab --no-browser
# jupyter-lab --no-browser --allow-root

如果服务器有代理的话,会打印代理的端口,注意这个不是服务的端口

arduino 复制代码
Extensions will be fetched using proxy, proxy host and port: ('127.0.0.1', 'xxx')

正常启动后,会有提示服务真正的端口,以及token(后续使用)

shell 复制代码
http://xxxx:3129/lab?token=xxxx
http://127.0.0.1:3129/lab?token=xxxx

3. 局域网直连(内网)

启动命令必须包含 --ip=0.0.0.0

shell 复制代码
jupyter-lab --ip=0.0.0.0 --no-browser
# jupyter-lab --ip=0.0.0.0 --no-browser --allow-root

连接成功后:

  • 打开在浏览器并输入xxx.xxx.xxx.xxx:3129,xxx.xxx.xxx.xxx是服务器的ip
  • 输入服务器启动时生成的 token 即可进入。第一次登录时需要它

如果不加 --ip=0.0.0.0,Jupyter 默认会绑定在 localhost(即 127.0.0.1)上。这意味着:只有服务器"自己"能访问这个 Jupyter 服务。 即便你在同一办公室、同一 Wi-Fi 下,在本地浏览器输入 xxx.xxx.xxx.xxx:3129 也会显示 "拒绝连接"。因为 Jupyter 此时只听命于服务器内部的请求,对来自外部网卡的信号"充耳不闻"。

如果你没加这个参数,但又想在自己的电脑上看到界面,唯一的办法就是建立SSH 隧道。隧道的作用是欺骗 Jupyter,让它以为请求是从服务器内部发出的

3. 在本地电脑建立连接(SSH 隧道)

只有在局域网不通、防火墙严密或需要加密传输时才使用。 在你自己的电脑(Windows 命令行、Mac 终端或 Linux 终端)开启一个新的窗口,执行以下命令:

shell 复制代码
ssh -L 8888:localhost:3129 用户名@服务器IP地址
  • 8888:是你本地浏览器访问时用的端口(找一个未使用的就可以)。
  • 3128:是远程服务器上 Jupyter 运行的端口。
  • 用户名@服务器IP:替换为你的远程登录信息。

连接成功后:

  • 保持该终端窗口不要关闭。
  • 在本地浏览器地址栏输入:http://localhost:8888
  • 输入服务器启动时生成的 token 即可进入。

4. 测试opencv

1. 使用 IPython 内置组件(最简单、原汁原味)

如果你只是想打开一张现有的图片文件,不需要安装任何额外库:

python 复制代码
from IPython.display import Image, display
display(Image(filename='test.jpg'))

2. 结合 OpenCV 查看(最常用)

由于 OpenCV 读取的图片是 BGR 格式,而浏览器显示需要 RGB,所以必须转换一下,配合 matplotlib 显示:

python 复制代码
import cv2
import matplotlib.pyplot as plt

# 读取一张图片(请确保服务器上有这张图)
img = cv2.imread('test.png') 

if img is None:
    print("图片加载失败,请检查路径")
else:
    # OpenCV 是 BGR,Matplotlib 需要 RGB
    img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    plt.imshow(img_rgb)
    plt.axis('off')
    plt.show()

在 Jupyter 中用 OpenCV 时,千万不要写 cv2.imshow()。这会导致服务器尝试在后台开启窗口,由于没有显示器,Jupyter 内核(Kernel)会直接挂起或崩溃。

如果想要查看视频

shell 复制代码
from IPython.display import Video
Video("test.mp4")

或者

shell 复制代码
from IPython.display import HTML

HTML("""
    <video alt="test" controls>
        <source src="test.mp4" type="video/mp4">
    </video>
""")
相关推荐
杨凯凡1 天前
【021】反射与注解:Spring 里背后的影子
java·后端·spring
Ares-Wang1 天前
Flask》》 Flask-Bcrypt 哈希加密
后端·python·flask
小码哥_常1 天前
Spring Boot项目大变身:为何要拆成这六大模块?
后端
码事漫谈1 天前
兵临城下:DeepSeek-V4 的技术突围与算力“成人礼”
后端
三水不滴1 天前
SpringAI + SpringDoc + Knife4j 构建企业级智能问卷系统
经验分享·spring boot·笔记·后端·spring
玖玖passion1 天前
Windows 上部署 Hermes Agent 完整指南 - 让你的 AI 助手在 WSL2 中跑起来
前端·后端·github
Undoom1 天前
【腾讯位置服务开发者征文大赛】基于YOLOv8与腾讯地图的视障辅助Android应用——从模型训练到端侧部署全链路实践
后端
ltl1 天前
【大模型基础设施工程】03:CUDA 生态——cuBLAS、cuDNN、NCCL、Triton、CUTLASS
后端
wan_jm1 天前
Go Web 开发提速 3(gos):Filter 实战与变量注入 —— 通用逻辑复用与依赖解耦
后端