YOLOv8 本地目标检测 Demo 怎么给同事看?Gradio/Flask 跑通后用 cpolar 发外网演示链接
2026/6/5 14:20:07 网站建设 项目流程

YOLOv8 本地目标检测 Demo 怎么给同事看?Gradio/Flask 跑通后用 cpolar 发外网演示链接

你本地的 YOLOv8 图片检测 Demo 已经跑起来了,上传一张图,框也画出来了。问题来了:同事不在同一个局域网,手机也访问不到你电脑上的127.0.0.1:7860,总不能让对方远程到你电脑上看效果。

这篇就解决这个很具体的场景:本地用 Gradio 做一个最小可运行的 YOLOv8 目标检测页面,再用 cpolar 把本地端口映射成 HTTPS 外网演示链接。对方打开链接,上传公开测试图,就能看到检测结果。

这里不把 Gradio 的share=True当主方案。临时演示时,我更推荐“本地服务 + cpolar 隧道”这条链路,端口、开关、暴露范围都在自己手里,测试完关掉隧道就行。

1 什么是这套演示链路?

这篇里的角色分工很简单。

  • YOLOv8:负责图片目标检测,输入图片,输出检测框。
  • Gradio:负责把 Python 推理函数包装成一个网页,上传图片和查看结果都在浏览器里做。
  • cpolar:负责给本地 Gradio 端口生成一个 HTTPS 外网地址,方便异地同事、手机或临时客户测试。

重点不是训练模型,也不是搭一个正式系统。我们只做一个“能演示、能关闭、边界清楚”的轻量 Demo。

如果你已经有 Flask 页面,也不用推倒重来。后面 cpolar 映射端口的逻辑一样,只要把7860换成你的 Flask 端口,比如50008000。为了文章不写散,正文用 Gradio 做主线。

2 环境准备:建虚拟环境并安装依赖

建议单独建一个虚拟环境,别把模型演示依赖塞进系统 Python。后面排错也轻松:跑不起来就看这个环境里的包,不会牵连别的项目。

2.1 创建项目目录

找一个空目录放 Demo 文件:

mkdir yolov8-gradio-demo cd yolov8-gradio-demo

2.2 创建并启用 Python 虚拟环境

macOS / Linux 用这组命令:

python3 -m venv .venv source .venv/bin/activate python -m pip install --upgrade pip

Windows PowerShell 用这组命令:

py -m venv .venv .\.venv\Scripts\Activate.ps1 python -m pip install --upgrade pip

看到命令行前面出现(.venv),说明当前已经进入虚拟环境。这里别跳过,后面安装ultralyticsgradio都会落到这个环境里。

2.3 安装 ultralytics 和 Gradio

Ultralytics 官方快速开始文档给出的 pip 安装方式是pip install -U ultralytics。Gradio 官方文档也推荐用 pip 安装,并要求 Python 3.10 或更高版本。

直接执行:

pip install -U ultralytics gradio pillow

安装完成后看一下版本,确认命令能正常导入:

python -c "import ultralytics, gradio; print('ultralytics', ultralytics.__version__); print('gradio', gradio.__version__)"

如果这里报ModuleNotFoundError,先检查虚拟环境有没有启用;如果下载太慢,换一个稳定的 Python 包源再装。

3 写一个最小可运行的 YOLOv8 Gradio Demo

现在开始写页面。这个 Demo 只做一件事:上传图片,调用 YOLOv8 推理,返回带检测框的标注图。

在项目根目录新建app.py

from PIL import Image import gradio as gr from ultralytics import YOLO # 首次运行会自动下载官方预训练权重 yolov8n.pt model = YOLO("yolov8n.pt") def detect_objects(image: Image.Image) -> Image.Image: """输入 PIL 图片,返回 YOLOv8 标注后的 PIL 图片。""" if image is None: return None results = model.predict(source=image, conf=0.25, imgsz=640) annotated = results[0].plot() # numpy array, BGR/RGB 由 ultralytics 内部处理 return Image.fromarray(annotated) demo = gr.Interface( fn=detect_objects, inputs=gr.Image(type="pil", label="上传测试图片"), outputs=gr.Image(type="pil", label="检测结果"), title="YOLOv8 本地目标检测 Demo", description="上传一张公开测试图片,返回 YOLOv8 目标检测标注图。", flagging_mode="never", ) if __name__ == "__main__": demo.launch(server_name="127.0.0.1", server_port=7860)

这里有两个小提醒。

一是yolov8n.pt是 YOLOv8 的轻量预训练模型,适合演示链路。演示时先别上自己的大模型,等页面、端口、隧道都跑通后,再替换成你的权重文件。

二是server_name="127.0.0.1"表示 Gradio 只监听本机地址。我们后面只把7860这个 Demo 页面交给 cpolar 映射,不让它顺手暴露你的项目目录、训练数据或别的管理端口。

4 本地验证:先确认 7860 页面真的能用

运行 Demo:

python app.py

终端会显示本地访问地址。打开浏览器访问:

http://127.0.0.1:7860

页面里会看到一个图片上传框和一个检测结果区域。上传一张公开样例图,比如 COCO 数据集常见的街景、公交车、人物图片,点提交后,右侧会返回带框的检测图。

这一步不是为了“看起来能打开”而已,而是确认推理链路已经打通:浏览器能上传图片,Python 能拿到 PIL 图片,YOLOv8 能完成推理,Gradio 能把结果图渲染回来。

如果页面能打开但推理报错,先看终端日志。常见问题集中在三类:虚拟环境没启用、依赖没装完整、首次下载yolov8n.pt时网络不稳定。把本地验证做扎实,再往外网映射,后面少很多干扰项。

5 用 cpolar 生成 HTTPS 外网演示链接

本地7860跑通后,再开外网演示入口。cpolar 在这里只负责一件事:把你电脑上的127.0.0.1:7860映射成一个公网 HTTPS 地址。

5.1 安装并登录 cpolar

如果你还没安装 cpolar,先到官网下载页选择对应系统:

https://www.cpolar.com/download

macOS 可以用 Homebrew 安装:

brew tap probezy/core && brew install cpolar

Linux 可以用官方一键脚本安装:

curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash

安装后打开本地 Web UI:

http://127.0.0.1:9200

能打开后台后,按页面提示登录账号。纯命令行环境也可以使用cpolar authtoken绑定账号:

cpolar authtoken 你的认证Token

这里别把9200当成要发给同事的地址。9200是 cpolar 本地管理页面,演示时只给同事访问 Gradio Demo 对应的公网地址。

5.2 映射 Gradio 的 7860 端口

保持python app.py这个终端不要关,再开一个新终端,进入虚拟环境不是必需的,因为 cpolar 是独立命令。

执行:

cpolar http 7860

终端会输出 HTTP/HTTPS 公网地址。复制其中的 HTTPS 地址,发给同事或在手机浏览器里打开。

打开后看到的就是同一个 Gradio 页面。上传公开测试图,能返回检测结果,就说明“本地模型服务 → cpolar HTTPS 地址 → 异地浏览器访问”这条链路已经跑通。

如果外网地址打不开,按这个顺序查:

  • 本机http://127.0.0.1:7860是否仍然能访问;
  • python app.py终端有没有报错退出;
  • cpolar http 7860终端是否还在运行;
  • cpolar Web UI 的“状态 / 在线隧道列表”里是否显示隧道在线。

别一上来就改模型代码。外网打不开时,先确认本地端口和隧道状态,排错会快很多。

6 演示时的安全边界:只开放 Demo,不开放数据

临时演示最容易忽略的不是代码,而是边界。

这个 Demo 只应该开放 Gradio 页面,不要把模型目录、训练数据目录、Jupyter、数据库、服务器管理面板一起暴露出去。你给同事的是 cpolar 生成的 Gradio HTTPS 链接,不是你的 cpolar 管理后台,也不是项目所在机器的其他端口。

测试图片也要注意。演示阶段用公开样例图就够了,不要上传客户真实图片、合同截图、内部监控画面这类敏感素材。目标检测 Demo 看的是链路和效果,不需要拿真实业务数据冒险。

演示结束后,把两个终端都关掉:

# 在运行 Gradio 的终端按 Ctrl+C # 在运行 cpolar http 7860 的终端按 Ctrl+C

如果你要给固定团队长期试用,再去考虑固定二级子域名、访问控制、日志、鉴权、部署到正式服务器这些事。cpolar 免费随机公网地址在 24 小时内会变化;固定二级子域名需要基础套餐或以上。临时演示就按需开启,用完关闭,最省心。

7 Flask 用户怎么接这条链路?

如果你的模型 Demo 已经写成 Flask,不需要为了 cpolar 改成 Gradio。你只要确认 Flask 本地端口能访问,再映射对应端口。

比如 Flask 跑在5000

python app.py cpolar http 5000

比如你用的是8000

cpolar http 8000

思路不变:先本地浏览器验证,再开 cpolar 隧道,再把 HTTPS 地址发给别人。Gradio 的优势是上传图片、返回图片这类交互写起来更快;Flask 的优势是你对路由、鉴权、页面结构有更强控制。临时模型演示,我会先用 Gradio 把效果跑出来。

8 总结

到这里,我们已经把一个本地 YOLOv8 图片检测 Demo 变成了可远程访问的临时演示页面:本机跑 Gradio,7860端口负责图片上传和检测结果展示,cpolar 负责生成 HTTPS 外网地址,同事或手机打开链接就能测试。

关键步骤就三块:

  • 本地建虚拟环境,安装ultralyticsgradio,用yolov8n.pt跑通最小检测 Demo;
  • 先访问http://127.0.0.1:7860,确认上传图片、模型推理、结果返回都正常;
  • 再执行cpolar http 7860,把 HTTPS 演示链接发给异地同事,测试结束后关闭 Gradio 和 cpolar 隧道。

这条方案适合“临时给别人看效果”,不是正式生产部署。后续要扩展成团队长期试用版本,再补访问鉴权、固定域名、日志记录和正式部署流程。

你们更常用 Gradio 还是 Flask 做模型演示?如果端口访问、图片上传、YOLOv8 推理哪一步卡住了,可以把报错贴出来交流。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询