Files
Pine 1566477b97 feat(大屏): 视频识别直连 park-vision + 绑定轮询/二维码
- config.js 增 getVisionApiBase(),优先绑定下发的本园区 vision_api(经 tenant info)
- main.jsx bootstrap 读 /park/api/config 的 vision_api
- useVisionDetection 帧 POST 到独立 vision 服务;未配置识别整体禁用
- BindScreen 连接码轮询(无码5s/有码30min) + 渲染二维码(qrcode.react)、绑定后入园区
- 部署文档补 vision_api/识别服务说明
2026-08-25 01:52:53 +08:00

99 lines
4.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Windows 打包部署指南(免重打包改地址)
## 一、打包后在 exe 同目录放置 config.json(推荐)
打包安装后,在 exe 所在目录(如 `C:\Program Files\云超服昆创园OPC运营中心\`)新建 **`config.json`**
改地址**不需要重新打包**,重启应用即生效:
```json
{
"api_base": "http://192.168.1.9:8090/park",
"mqtt_url": "ws://192.168.1.3:8083/mqtt",
"mqtt_username": "dpm",
"mqtt_password": "123456",
"voice_url": "ws://192.168.1.3:8765/v1/realtime",
"vision_api": "http://192.168.1.9:8091"
}
```
- `api_base`server-core 统一入口园区地址(`http://<IP>:8090/park`;生产 `https://opc.pinesound.cn/park`),大屏 API/媒体/OTA 都走它
- `mqtt_url`EMQX Broker 的 **WebSocket** 地址(端口 8083
- `mqtt_username/password`Broker 鉴权账号(默认 dpm / 123456,与后端 .env 一致)
- `vision_api`:**可选**。视频识别独立服务(code/park-vision`http://<IP>:8091`)。不填=视频识别禁用(摄像头不开启)。也可经 server-core `/park/api/config` 下发(见「三、视频识别」)。
地址解析优先级:**config.json > 后端 /api/config > 构建默认(192.168.1.9**。
## 二、后端 /api/config 方式(同机部署自动生效)
后端 `.env`backend/.env)配置 Broker 后,展播端启动时自动从
`GET /api/config` 获取 MQTT 地址,**无需 config.json**
```
DPM_MQTT_HOST=192.168.1.3
DPM_MQTT_PORT=1883
DPM_MQTT_WS=ws://192.168.1.3:8083/mqtt # 展播端可访问的 WebSocket 地址
DPM_VOICE_WS=ws://192.168.1.3:8765/v1/realtime # s2s 语音 WS(可选,默认按主机推导)
MQTT_USERNAME=dpmserver
MQTT_PASSWORD=你的密码
```
> 若后端与 Broker 同机:后端默认 `MQTT_WS_URL=ws://localhost:8083/mqtt` 即可,
> 展播端连 `192.168.1.9` 也通;跨机必须显式配置上面的 IP。
## 三、构建期固定地址(不推荐,需重新打包)
在项目根目录(**构建机器上**)配置 `.env.local`(已被 gitignore):
```
VITE_API_BASE=http://192.168.1.9:8090/park
VITE_MQTT_URL=ws://192.168.1.3:8083/mqtt
VITE_MQTT_USERNAME=dpm
VITE_MQTT_PASSWORD=123456
```
然后 `yarn build:win`(脚本自动清理旧 exe 进程再打包)。
## 四、打包前必须确认
| 检查项 | 说明 |
|---|---|
| exe 未被运行 | `taskkill /f /im "昆明大学生创业园展播系统.exe"`,或直接用 `yarn build:win` |
| 后端已启动 | 浏览器打开 `http://<后端IP>:8090/park/api/health` 应返回 `{"ok":true,...}` |
| Broker WebSocket 已开 | EMQX 需开启 8083 端口 WS 监听,且账号密码与 config.json 一致 |
| Windows 防火墙 | 首次运行允许,或放行出站 8090/8083(大屏经 8090 调 server-core |
## 五、常见排查
```
# 测试后端连通(展播机 PowerShell
Invoke-WebRequest http://192.168.1.9:8090/park/api/health
# 测试 Broker WS 端口
Test-NetConnection 192.168.1.3 -Port 8083
# 看前端启动日志(bootstrap 会打印 MQTT 地址来源)
打开应用后按 F12(WebView2 开发者工具)→ Console
```
- 应用日志打印 `[bootstrap] config.json MQTT -> ...` = config.json 生效
- 打印 `[bootstrap] /api/config MQTT -> ...` = 后端下发
- 两者都没有 = 两个来源都不可达,请检查 IP/防火墙
## 三、视频识别(可选,独立 park-vision 服务)
视频识别能力已从 server-core 剥离为**独立项目 `code/park-vision`**YOLO 帧识别 + LLM 场景语义),
server-core `/park` 不再承接识别请求(`/park/api/vision/frame|llm` 已移除,仅保留遥测 `/api/vision/event`)。
**配置方式(二选一)**,未配置则视频识别整体禁用(摄像头不开启、页面显示「手势识别未启用」):
1. **config.json(部署机)**`"vision_api": "http://<IP>:8091"`
2. **server-core 全局(admin 端)**:运营端「视频识别服务」页启用+填地址 → 写 `park_settings`
大屏启动时从 `GET /park/api/config``vision_api`enabled=1 才下发)
**部署完整识别链路**
```bash
# 独立识别服务(需 torch/ultralytics + 模型 yolov8n-face.pt / yolov8n-pose.pt 置于 models/
cd code/park-vision && uv sync && uv run uvicorn app.main:app --host 0.0.0.0 --port 8091
# 放模型后再启动;缺模型时 /vision/frame 返回「模型未加载」
```