智能相机上位机 Demo
需要在电脑端监看相机时,可使用智能相机上位机 Demo 发现相机、查看 MJPEG 实时画面和推理结果。先按智能相机使用在 CamOS 中设置相机和检测流程,再运行上位机接收结果;采集与推理由相机完成。
获取与启动
打开本页示例源码,取出完整 dlcvcam_demo 目录,保留其中的 dlcvcam 子目录和辅助文件。在包含 main.py 和 requirements.txt 的目录打开终端:
python -m pip install -r requirements.txt
python main.py
Windows 也可双击目录中的 start.bat,其启动入口为 python main.py。依赖包含 QtPy、PySide6、requests、websockets 和 psutil。
连接相机
- 点击“扫描相机”,从“已发现相机”选择设备;也可在“CamOS 地址”填写
http://<相机IP>:8000。 - 点击“连接”,程序自动登录并接收实时画面。
- 查看右侧 OK/NG、目标数、结果详情及运行日志。

main.py 使用源码中的 DEFAULT_USERNAME、DEFAULT_PASSWORD 自动登录。使用自定义账号时修改这两项,或使用下方接收账号参数的命令行入口。画面来自 MJPEG,检测结果来自 WebSocket;先在 CamOS 启用并运行检测流程,随后查看上位机结果。
查看实时画面和检测结果
连接后,左侧显示相机画面和目标框,右侧显示流程判定、目标数及检测详情。下图使用 logo 检测流程,检测到 1 个 logo,置信度为 0.999;当前流程将该目标判定为缺陷,整体结果为 NG。

命令行保存结果图
在同一目录运行,将地址、账号和密码替换为相机实际值。--duration 5 接收 5 秒后退出,--output 指定标注图保存位置。
python main_cli.py `
--url "ws://<相机IP>:8000/ws" `
--username "管理员账号" `
--password "管理员密码" `
--duration 5 `
--output "annotated_preview.jpg"
终端打印目标结果及保存路径。默认无窗口模式下,--duration 控制运行秒数,--max-results 控制接收结果组数,达到限制后退出。增加 --show 可打开实时窗口;该模式达到限制后停止结果订阅,窗口需手动关闭。完整参数使用 python main_cli.py --help 查看。
命令行保存结果示例:

在自己的 Python 程序中调用
在 dlcvcam_demo 目录运行以下代码,复用目录内的 dlcvcam 包。HTTP 会话自动维护登录 Cookie。示例将预览帧写入电脑的 frame.jpg,调用 capture() 时读取相机当前最新帧并强制保存;已启用且存在的流程参与推理。
import getpass
from pathlib import Path
from dlcvcam import DlcvCamClient
client = DlcvCamClient(input("CamOS 地址:").rstrip("/"))
client.login(input("管理员账号:"), getpass.getpass("管理员密码:"))
status = client.get_system_status()
print("CamOS 版本:", status.app_version)
frame = client.preview.get_frame()
Path("frame.jpg").write_bytes(frame.data)
print("图片帧号:", frame.frame_tag)
result = client.camera.capture()
if not result.ok:
raise RuntimeError("相机未取得可用图像,请检查采集状态")
if not result.inference_ok:
raise RuntimeError(result.inference_error or "未取得推理结果,请检查流程是否启用")
print("判定:", result.okng, "耗时(ms):", result.elapsed_ms)
print("检测框:", result.boxes)
print("相机端保存成功:", result.storage.saved)
get_frame() 获取调用时的 JPEG 帧;capture() 读取相机当前最新帧并强制保存,启用的流程存在时执行该流程。对本机图片调用指定模型时,使用模型测试接口。
| 能力 | Python 调用 | 服务路径 |
|---|---|---|
| 本地扫描 | client.discovery.discover_local(timeout=2.0) | GVCP 局域网广播 |
| 相机状态 | client.camera.get_status() | GET /debug/status |
| 单帧图像 | client.preview.get_frame() | GET /preview/frame |
| 实时图像 | client.preview.stream_frames() | GET /preview/stream |
| 拍照并保存,启用流程时执行 | client.camera.capture() | POST /api/capture |
| 实时结果订阅 | WsClient(client.base_url, client.access_token) | WS /ws |
示例程序 demo.py 展示基于 dlcvcam 包的 Qt 调用方式,详细类和方法见目录中的 docs/dlcvcam_api.md。