跳到主要内容

智能相机上位机 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。

连接相机​

  1. 点击“扫描相机”,从“已发现相机”选择设备;也可在“CamOS 地址”填写 http://<相机IP>:8000。
  2. 点击“连接”,程序自动登录并接收实时画面。
  3. 查看右侧 OK/NG、目标数、结果详情及运行日志。

扫描相机、填写地址和连接的入口

登录与流程

main.py 使用源码中的 DEFAULT_USERNAME、DEFAULT_PASSWORD 自动登录。使用自定义账号时修改这两项,或使用下方接收账号参数的命令行入口。画面来自 MJPEG,检测结果来自 WebSocket;先在 CamOS 启用并运行检测流程,随后查看上位机结果。

查看实时画面和检测结果​

连接后,左侧显示相机画面和目标框,右侧显示流程判定、目标数及检测详情。下图使用 logo 检测流程,检测到 1 个 logo,置信度为 0.999;当前流程将该目标判定为缺陷,整体结果为 NG。

智能相机上位机 Demo 的真实画面、目标框和检测详情

命令行保存结果图​

在同一目录运行,将地址、账号和密码替换为相机实际值。--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。