- 人工智能
- 深度学习
- 计算机视觉
- 科研
【免费下载链接】DeepLabCut
Official implementation of DeepLabCut: Markerless pose estimation of user-defined features with deep learning for all animals incl. humans
本指南以 DeepLabCut-live-GUI(dlclivegui)官方用户手册中的Configure Cameras相机配置对话框为核心,系统讲解如何在实时姿态估计实验中添加相机、调整采集参数、校验实时预览,以及为 Basler / GenTL 工业相机配置硬件触发与多相机工作流。读完本文,你将掌握相机后端选择、设备身份管理、分辨率/帧率/曝光/增益的"请求值 vs 探测值"机制、单色输出保留、触发角色配置和完整的多相机排障方法。
一、Configure Cameras 对话框:功能定位与打开方式
Configure Cameras对话框是 DeepLabCut-live-GUI 管理相机资源的唯一入口,它承担三类职责:
- 添加相机:把检测到的设备加入当前应用配置;
- 调整采集设置:修改分辨率、帧率、曝光、增益、旋转、裁剪与触发参数;
- 实时校验:通过活动相机的实时预览确认画面与后端上报的各项数值。
在主窗口左侧Controls 面板的Camera区域,点击Configure Cameras…即可打开该对话框。对话框内部包含三个主要区域:
| 区域 | 作用 |
|---|---|
| Active cameras(活动相机) | 已纳入当前应用配置的相机列表 |
| Available cameras(可用相机) | 针对当前所选后端发现到的设备列表 |
| Camera settings and preview(设置与预览) | 针对当前选中活动相机的参数、探测值、触发控制与实时预览 |
需要注意一个重要前提:打开相机配置对话框之前,必须先停止主窗口的实时预览。否则相机资源可能被预览占用,导致配置对话框无法正常工作。
在动手配置之前,可以先阅读 GUI 总览 了解主窗口的 Controls 面板、Video 面板与 Stats 区域,以及从"配置相机 → 启动预览 → 启动姿态推理 → 录制"的完整实验工作流。
二、先选对相机后端(Backend)
对话框中的Backend下拉框决定当前发现的是哪一类相机。DeepLabCut-live-GUI 支持四种相机后端,各自对应不同的硬件与安装方式,详见 Camera support 页面:
- OpenCV:通用摄像头后端,适合网络摄像头与普通 USB 相机,全平台可用,但相机控制能力与性能受限(
docs/dlc-live/dlc-live-gui/user_guide/cameras_backends/opencv_backend.md); - GenTL:通过 Harvesters 库接入 GenICam/GenTL 工业相机(Windows、Linux),需要厂商提供的
.ctiProducer 文件(docs/dlc-live/dlc-live-gui/user_guide/cameras_backends/gentl_backend.md); - Aravis:接入 GenICam/GigE Vision 工业相机(Linux,macOS 实验性),通过系统包管理器即可安装(
docs/dlc-live/dlc-live-gui/user_guide/cameras_backends/aravis_backend.md); - Basler:通过 pypylon 对接 Basler 官方 pylon SDK,全平台可用(
docs/dlc-live/dlc-live-gui/user_guide/cameras_backends/basler_backend.md)。
不同后端的控制能力差异很大,下表来自官方 Camera support 对比表:
| 特性 | OpenCV | GenTL | Aravis | Basler (pypylon) |
|---|---|---|---|---|
| 曝光控制 | 否 | 是 | 是 | 是 |
| 增益控制 | 否 | 是 | 是 | 是 |
| Windows | ✅ | ✅ | ❌ | ✅ |
| Linux | ✅ | ✅ | ✅ | ✅ |
| macOS | ✅ | ❌ | ⚠️ 实验性 | ✅ |
平台选型建议(来自官方文档):
- Windows:网络摄像头/简单 USB 相机首选 OpenCV;工业相机(如 The Imaging Source)推荐 GenTL 后端并配合厂商 CTI 文件;Basler 相机可用 GenTL 或 pypylon 后端;
- Linux:网络摄像头用 OpenCV(Video4Linux 驱动);GenICam/GigE Vision 工业相机推荐 Aravis(安装简单、Linux 支持优于 GenTL);GenTL 仅在厂商提供 Linux CTI 文件时作为备选;
- macOS:OpenCV 用于摄像头;Aravis 对 GenICam/GigE Vision 相机属于实验性支持,需要 Homebrew 与 PyGObject,功能取决于相机型号。
快速安装示例(详见后端文档):
# Aravis(Linux/Ubuntu) sudo apt-get install gir1.2-aravis-0.8 python3-gi # Aravis(macOS) brew install aravis pip install pygobject # GenTL:安装厂商驱动与 SDK,CTI 文件通常位于 # C:\Program Files\The Imaging Source Europe GmbH\IC4 GenTL Driver\bin\后端也可以直接写入应用配置文件(JSON)中的camera节点:
{ "camera": { "backend": "aravis" } }选择后端时会自动触发一次新的设备发现扫描,对话框中显示的可用设备都属于当前选中的后端。相机能力因后端、相机型号与驱动而异,GUI 会根据后端上报的能力自动启用、禁用或标记"尽力而为(best-effort)"的控件。
三、发现相机:刷新、设备身份与设备索引
3.1 刷新设备列表
点击Refresh可对当前所选后端重新执行扫描。更换后端、插拔相机或安装驱动后,建议先刷新再选择设备。
3.2 设备身份(Device Identity)与索引(Index)
当后端支持时,应用会存储稳定的设备身份,例如序列号或设备 ID。这保证了即使设备枚举顺序发生变化,配置也能重新关联到同一台物理相机。
- 以 Basler 后端为例,稳定身份就是相机序列号(
device_id),配置 JSON 中形如:
{ "camera": { "backend": "basler", "index": 0, "properties": { "basler": { "device_id": "40312345" } } } }- GenTL 后端则使用
serial:<SERIAL>或fp:<指纹>作为稳定身份,并在打开相机后自动持久化(见docs/dlc-live/dlc-live-gui/user_guide/cameras_backends/gentl_backend.md)。
如果后端无法提供稳定身份,则会回退使用设备索引(index)。需要特别警惕:设备索引并不永久有效。连接、断开或重排设备都会改变枚举顺序,因此在硬件变更后务必重新核对当前选中的物理相机是否与预期一致。从源码设计上看,Basler 与 GenTL 后端都实现了"按device_id优先、回退到index"的选择顺序,并会在打开成功后把当前索引写回settings.index以提升 UI 稳定性。
四、管理活动相机(Active Cameras)
4.1 添加相机
在Available cameras列表中选中检测到的设备,点击Add Camera即可加入活动相机列表;更快捷的方式是直接双击设备。
4.2 启用 / 禁用
勾选或取消Enabled复选框即可切换所选活动相机的启用状态。应用当前最多允许四台启用相机。
4.3 移除相机
选中活动相机后点击Remove Camera,相机会从当前工作配置中删除(之后仍可重新添加)。
4.4 调整顺序
使用上移 / 下移控件改变活动相机顺序。相机顺序会影响 GUI 中的呈现顺序,包括多相机平铺预览(tiled preview)的排布。
4.5 活动相机标签含义
活动相机列表会用标签汇总关键状态:
| 标签 | 含义 |
|---|---|
✓ | 该相机已启用 |
○ | 该相机已禁用 |
[external]/[follower]/[master] | 当前启用的触发角色 |
[DLC] | 当前选中用于姿态推理的相机 |
[Mono] | 该相机保留了单色输出 |
需要说明的是:姿态推理相机是在主窗口单独配置的(Inference Camera),与这里的触发角色标签无关;所有启用相机都可以参与预览与录制。
五、相机身份信息与"探测值(Detected Values)"
设置区域会以只读方式展示所选相机的身份与探测信息,常见字段包括:
- 相机名称(Camera name)
- 设备 ID(Device ID)
- 设备索引(Device index)
- 后端(Backend)
- 探测分辨率(Detected resolution)
- 探测帧率(Detected frame rate)
- 相机像素 / 输出格式(Pixel/output format)
应用会主动**探测(probe)**所选相机以获取可用的运行时信息。这里有一个贯穿全篇的关键概念:
探测值描述的是后端实际报告的情况,可能与可编辑控件中请求的值不一致。
某个探测值为空或不可用,并不一定意味着相机无法使用——部分后端与驱动并不能可靠地暴露所有运行时属性。例如 GenTL 后端通过 GenApi 节点映射尝试读取ResultingFrameRate作为actual_fps遥测值,但若相机未实现该节点,探测值就会缺失。
5.1 请求值(Requested)与探测值(Detected)的差异
- 可编辑字段表示请求配置(requested configuration);
- 探测标签表示打开相机后上报的实际值(detected values)。
典型差异包括:
- 请求的帧率可能被调整为相邻的受支持值;
- 请求的分辨率可能受相机增量(increment)或支持模式约束;
- 帧率为
0表示Auto,即后端不强制指定数值。
因此在应用设置之后,务必核对探测值与实时预览。以 Basler 后端为例,官方文档明确:若请求的Width/Height违反相机约束,后端会尽力按最近的有效增量向下取整并钳制到 min/max,同时记录警告日志;GenTL 后端也有同样的钳制与增量对齐行为。
六、采集设置(Capture Settings)详解
6.1 分辨率(Resolution)
使用Width与Height请求采集分辨率。值为0表示Auto或使用设备默认值。后端可能根据支持范围与增量对请求尺寸进行钳制或调整。
**录制要求帧尺寸恒定。** 录制过程中请勿在外部更改相机分辨率,否则录制器可能进入错误状态导致编码失败(详见 [GUI 总览](https://link.gitcode.com/i/93b059305f3bf3e06df82329e37daedd) 中关于 frame_size 不匹配的警告)。6.2 帧率(FPS)
使用FPS请求相机帧率:
- 正值请求特定帧率;
0将帧率选择权交给相机或后端。
后端上报实际帧率后,配置预览会相应调整刷新节奏;若上报值与请求值不同,GUI 可能显示设备支持的值。后端实现上(Basler / GenTL)通常是先尝试启用AcquisitionFrameRateEnable,再设置AcquisitionFrameRate节点,并尽量回读实际帧率用于遥测。
6.3 曝光(Exposure)
使用Exposure请求曝光。值为0表示曝光自动或保持不变(依后端而定)。曝光单位与支持范围取决于后端与相机型号——对受支持的 Basler 与 GenTL 相机,曝光通常以**微秒(microseconds)**表示。
底层行为(可参考docs/dlc-live/dlc-live-gui/user_guide/cameras_backends/gentl_backend.md):当曝光值 > 0 时,后端会尝试先把ExposureAuto设为Off,再依次尝试ExposureTime/Exposure节点;节点缺失或只读时记录警告并继续。
**长曝光会限制可达帧率。** 当请求的帧率无法达到时,请先确认曝光时长是否短于目标帧间隔。6.4 增益(Gain)
使用Gain请求相机增益。值为0表示增益自动或保持不变。较高的增益可以提亮图像,但也可能增加图像噪声,请务必在配置预览中确认效果。底层同样遵循"先关闭GainAuto,再写Gain节点"的尽力而为策略。
6.5 旋转(Rotation)
使用Rotation旋转帧,用于显示与下游处理。旋转由应用层执行,无需重开相机预览即可更新。注意:主 GUI 预览在后端支持时可能使用 SDK 原生旋转与裁剪。
6.6 裁剪坐标(Crop Coordinates)
使用x0、y0、x1、y1定义矩形裁剪区域:
x0、y0:左上角;x1、y1:右下角。
合法裁剪要求x1 > x0且y1 > y0。预览过程中坐标会被钳制到当前帧尺寸内。
在坐标输入值上左右拖拽可逐像素调整;按住 **Ctrl** 可加快调整,按住 **Shift** 可放慢调整。七、保留单色输出(Preserve Mono Output)
启用Preserve mono frames后,受支持的单色相机将输出二维灰度帧,而不是扩展为三通道彩色。这一点对高帧率/高分辨率多相机场景尤为重要,因为转彩色会拖慢采集流水线。官方建议:
- 使用灰度相机且后端支持时,务必启用单色保留;
- 使用彩色相机时,务必禁用单色保留。
探测过程检测到单色相机且后端支持单色输出时,可能会主动推荐启用该选项。若单色相机在高 FPS 下录制丢帧,第一排查项就是开启本选项,避免后端为兼容性把帧转为三通道格式。
八、触发设置(Trigger Settings):实现多相机硬件同步
对于支持触发功能的相机后端,选中已配置的相机后点击Trigger Settings…即可进入触发配置。触发相机的价值在于获得精确的相机同步或与其他设备的协调——让相机跟随外部信号而非自身内部时钟,从而在多相机或其他设备之间实现更紧密的同步。
触发配置目前仅对Basler与GenTL后端开放,且可用字段因相机与驱动而异。
8.1 四种触发角色
| 角色 | 行为 |
|---|---|
| Off / Free-run | 禁用触发,连续自由采集 |
| External trigger | 等待所选输入源上的硬件脉冲 |
| Master output | 相机保持自由运行,同时为其他相机/设备输出信号 |
| Follower | 相机作为同步输入端,跟随外部触发源(概念上类似 External trigger) |
活动相机列表会以[external]、[follower]、[master]标签显示当前配置的角色。
8.2 External trigger / Follower 的配置字段
- Trigger selector:通常为面阵相机的
FrameStart; - Trigger source:选择
auto或输入相机支持的源,如Line1、Line2; - Activation:信号条件,如
RisingEdge、FallingEdge; - Read timeout:单帧最大等待秒数。后端可能使用更短的独立等待以保证预览关闭的响应性。
Read timeout 是**单帧的最大等待时间**。若相机在时限内未收到有效触发信号,后端会结束当前等待并报告超时错误,但**不会禁用触发配置,也不会永久停止相机**。8.3 Master output 的配置字段
- Output line:相机输出线,如
Line2; - Output source:路由到该线的信号,如
ExposureActive; - GenTL strobe options:兼容的 GenTL 相机还可配置 strobe 极性、操作、持续时间与延迟;Default表示不设置持续时间或延迟。
8.4 严格模式(Strict Mode)
触发对话框提供的是**后端层面的建议,并不保证所选相机支持其中每一个显示值**。- 启用Strict mode:当缺失或不支持必需触发特性时,阻止相机打开,让问题显性暴露;
- 禁用 Strict mode:后端按尽力而为应用支持的设置,并可能禁用不支持的触发配置。
修改触发设置后,建议启动相机预览验证配置——外部触发相机在收到有效脉冲前可能一直等待或超时。若预览迟迟无画面,这可能是正常行为而非相机故障,请检查触发设置、接线与信号源。
九、应用、重置与预览设置
9.1 Apply Settings(应用设置)
点击Apply Settings校验并存储当前相机设置。在切换相机、添加相机、启动预览或点击OK关闭对话框前,待处理的编辑会自动应用。若校验失败,界面会停留在当前相机,请修正报错设置项后再试。
9.2 自动化预览重启(Automated Preview Restart)
以下相机侧改动要求后端重新打开相机,因此配置预览会自动重启:
- 宽度或高度
- 帧率
- 曝光
- 增益
- 单色保留模式
- 触发设置
相反,旋转与裁剪由预览路径应用,不需要重开相机(但主 GUI 预览可能在后端支持时改用 SDK 原生旋转与裁剪)。
9.3 Reset Settings(重置设置)
点击Reset Settings清除已请求的采集设置。
重置会**更新工作相机配置**(working camera configuration),而非仅重置 UI 中的未提交编辑。9.4 配置预览(Configuration Preview)
点击Start Preview打开所选活动相机。预览在加载时会显示状态消息,并上报诸如请求 vs 实际分辨率、设备身份、像素格式、后端输出格式等信息。用完点击Stop Preview;若相机启动过慢或疑似挂起,可用Cancel Loading取消加载。
十、保存或放弃配置:OK 与 Cancel
OK
点击OK应用所有待处理编辑,并把工作相机配置返回给主窗口。若添加了相机但没有一台启用,对话框会要求你至少启用一台相机,或移除全部相机。
Cancel
点击Cancel(或直接关闭对话框)丢弃未接受的更改,并停止活动的预览、发现与探测工作。
十一、多相机场景实践建议
官方文档为可靠的多相机设置给出了七条建议:
- 逐台添加并预览每台相机;
- 在支持时确认稳定设备身份;
- 视实验需要使用一致的分辨率与帧率目标;
- 保持曝光时长足够短,以适配目标采集帧率;
- 在启动主预览前核实触发接线与角色;
- 仅启用本次会话需要的相机(上限四台);
- 保存完整的应用配置以保证实验可复现。
用于姿态推理的相机在主窗口单独配置;所有启用相机仍可参与预览与录制。另外,从 GUI 总览 可以了解到:多相机模式下预览会自动变为平铺视图,录制会为每台活动相机分别生成文件;若需要逐帧时间戳用于后续对齐 DLC 姿态结果或外部传感器数据,可参考 视频时间戳格式文档。
十二、故障排查(Troubleshooting)
12.1 检测不到相机
- 确认相机已通电并连接;
- 确认选择了正确的后端;
- 安装并配置厂商 SDK / 传输层以及驱动文件;
- 若 GenTL 设备在 OpenCV 中可见但在 GenTL 后端中不可见,请检查厂商 CTI 文件是否已安装且可访问;
- 更改连接或驱动设置后点击Refresh重新扫描;
- 关闭可能独占相机的其他应用。
后端级的具体安装与排障指引见 Camera support 页面 及各后端专页。常见诱因还包括:GenTL 的GENICAM_GENTL64_PATH/GENICAM_GENTL32_PATH未设置或未包含 Producer 目录、Producer 位数(32/64 位)不符,以及多个已安装 CTI 中存在不兼容项(可查看properties.gentl.cti_files_failed定位)。
12.2 相机能打开但无画面
- 自由运行相机:检查曝光、帧率与采集模式;
- 触发相机:确认有效触发脉冲到达所选输入端;
- 查看预览状态中的超时或后端错误信息;
- 重置相机设置并用设备默认值测试。
12.3 请求值未精确生效
相机或后端可能把值约束到支持的范围、增量或采集模式内。请对比请求设置与探测值及预览状态。OpenCV 控件尤其依赖操作系统驱动与相机实现,表现差异明显。
12.4 单色相机高 FPS 录制丢帧
若后端与相机支持原生单色输出,请启用Preserve mono frames;否则后端可能为兼容性将帧转为三通道格式,显著增加流水线负担。同时可尝试主窗口录制设置中更快的编码预设(如libx264的preset=ultrafast、tune=zerolatency)。
12.5 触发设置被忽略或禁用
- 确认后端在 SDK和GUI 层面都支持触发(若你的相机需要触发而 GUI 未暴露该能力,可向项目反馈以改进支持);
- 确认所选相机暴露了所请求的触发节点与取值;
- 先关闭严格模式测试尽力而为行为;
- 需要设置不支持时显式失败,再启用严格模式;
- 查阅相机厂商文档确认线分配与电气要求。
十三、相关文档导航
以下是与相机配置紧密关联的官方页面(均为仓库内相对路径):
- Camera support:支持的后端、安装与后端限制,以及 OpenCV、GenTL、Aravis、Basler 后端专页;
- 视频时间戳格式:随视频记录的软件/硬件时间戳;
- 录制输出路径与命名规则(位于 GUI 总览的 Recording 一节);
- DeepLabCut Live 推理文档,了解 DLCLive 实时姿态估计引擎如何与配置好的相机协同工作。
- 人工智能
- 深度学习
- 计算机视觉
- 科研
【免费下载链接】DeepLabCut
Official implementation of DeepLabCut: Markerless pose estimation of user-defined features with deep learning for all animals incl. humans
相关推荐
DeepLabCut-live-GUI Basler 相机后端指南:pypylon 接入、稳定身份绑定与高级采集配置
DeepLabCut live GUI Basler 相机后端指南:pypylon 接入、稳定身份绑定与高级采集配置 DeepLabCut live GUI(
人工智能深度学习计算机视觉科研3 步上手 Mermaid Live Editor:用文本画流程图、时序图的在线图表编辑器
3 步上手 Mermaid Live Editor:用文本画流程图、时序图的在线图表编辑器 给技术文档补一张系统架构图时,最耗时的往往不是画图本身,而是在截图、
前端开发者工具数据可视化PX4 相机外设接入与触发控制指南:三种相机方案、参数配置与底层源码解析
PX4 相机外设接入与触发控制指南:三种相机方案、参数配置与底层源码解析 本指南以 PX4 官方相机外设文档( docs/en/camera https://l
嵌入式物联网机器人自动驾驶智能硬件
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考