导入
方法
方法参考
Net.get(name, type=NetType.Webcam)
按名称获取一个摄像头 Net。
返回: 摄像头 Net 实例
start(box_ip)
启动一路摄像头视频串流。
返回: 一个
dict,包含以下键:
url- 完整的串流 URL(例如http://<BOX_IP>:8086/)port- 该串流的端口号already_running- 布尔值,表示该串流是否本就在运行
RuntimeError
stop()
停止该摄像头串流。
bool - 成功停止为 True,原本未运行为 False
get_info(box_ip)
获取该串流的信息。
返回:
dict 或 None - 串流信息字典;未运行时为 None。该字典包含以下键:
url- 完整的串流 URLport- 该串流的端口号video_device- 视频设备路径,例如/dev/video0source- 启动该串流的工具:本 Python API 为'api',lager webcam为'cli'。没有记录来源的串流为None。started_by- 启动工具所给出的用户。从本 Python API 启动的串流为None。
get_url(box_ip)
只获取该串流的 URL。
返回:
str 或 None - 串流 URL;未运行时为 None
is_active()
检查该串流当前是否正在运行。
bool - 串流正在运行为 True,否则为 False
snapshot(raw=False)
从运行中的串流取一帧 JPEG。
返回:
bytes - 该 JPEG
异常: 串流已停止,或 5 秒内没有帧时抛出 RuntimeError
frame(raw=True)
从运行中的串流取一帧,并解码以供分析。
返回:
numpy.ndarray - 高 x 宽 x 3,按 OpenCV 使用的 BGR 顺序
异常: 与 snapshot() 相同的 RuntimeError
在
lager python 脚本中请使用 frame(),不要用 cv2.VideoCapture 打开摄像头。串流运行时会占用摄像头,对同一设备的第二个采集得不到任何帧。controls()
摄像头的图像控制项,每项含当前值和范围。串流启动或停止时都可使用。
{"value", "min", "max", "step", "default"} 的 dict,只包含摄像头具备的控制项。名称见摄像头控制。有三个值带自动模式:exposure、white_balance_temperature 和 focus。它们还各有 auto:True、False,摄像头没有对应自动模式时为 None。power_line_frequency 还有 options,为 {"value", "label"} 列表。
set_control(name, value)
设置一个摄像头控制项,并为该 Net 保存。串流启动或停止时都可使用。
返回:
bool - 摄像头接受该值时为 True
异常: 名称不是摄像头控制项时抛出 ValueError
lock_controls(**overrides)
固定所有图像控制项,使画面在帧与帧之间、运行与运行之间可比较。关闭自动曝光、自动白平衡和自动对焦。除非您覆盖,其余控制项都保持当前值。全部为该 Net 保存,然后从摄像头读回。
返回:
dict,包含:
ok- 每个控制项读回的值都符合要求时为 Truecontrols- 摄像头每个控制项的{name: {"wanted", "actual"}}。超出摄像头范围的值会被限制,因此读回不同,ok为 False
RuntimeError;名称未知时抛出 ValueError
摄像头控制
每个范围都是摄像头自己的。例如亮度在某些摄像头上是 0 到 255,在另一些上是 -64 到 64。超出范围的值会被限制,Net 保存的是限制后的值。
手动曝光可能让帧率低于模式的帧率。摄像头仍接受该模式,因此
mode_error 为空:实际帧率请读取 /api/fps。例如,一台全局快门摄像头在 90 fps 模式下,exposure=312 时约为 60 fps,exposure=100 时约为 89 fps。
Lager 只更改您设置的控制项。启动串流时,其余控制项保持摄像头当前的值,因此用其他工具做的设置不受影响。通过 set_control、lock_controls 或查看页面设置的控制项会为该 Net 保存。每次启动其串流时,以及串流为新模式重新打开摄像头之后,都会重新应用它们。这也适用于断电后会忘记设置的摄像头:启动串流,或再次调用 lock_controls。
DirectShow 等 Windows 工具把曝光表示为以秒为单位的 2 的幂:-5 即 2-5 s,31.25 ms。Linux 的值为
10000 * 2**n,因此 -5 对应 exposure=312。示例
启动多台摄像头
串流管理
目视检查测试
摄像头发现与测试
检测串流是否已在运行
Web 界面
每一路串流在它的 URL 上提供一个查看页面。它的布局和配色与示波器页面(lager scope NET stream web)相同:
-
页头。其中的 Net 选择器可切换到 Box 上的另一路串流。页头显示摄像头的型号和设备,以及帧率、尺寸和变焦倍数。状态为
LIVE、STALLED(3 秒内没有帧)、WAITING(还没有帧)或OFFLINE(串流没有响应) - 实时画面,上面叠加时钟和变焦倍数。放大后,拖动画面或使用方向键即可平移。双击某一点可放大到该点;已放大时,双击则以该点为中心
-
侧边栏,包含:
- Resolution:尺寸和帧率,取自摄像头提供的模式。如果摄像头无法以所选尺寸串流,它会保持原来的模式,页面会说明原因。USB 带宽不足是原因之一
- View:变焦(滑块、Out、Reset、In)、用于平移的 Centre、Rotate(0、90、180 或 270 度)和 Flip(左右、上下)
- Focus:Auto 或 Manual,带距离滑块,使用摄像头自己的范围。只有带自动对焦的摄像头才显示该开关
- Image:曝光(Auto exposure 或带滑块的 Manual)、增益和亮度。还有白平衡(Auto white balance 或带色温的 Manual),以及其他图像控制项的滑块。每项只在摄像头具备时显示,并使用摄像头的范围。开启自动曝光时,增益由摄像头自行设置
- Full screen 只显示画面
-
Snapshot 把一帧保存为
<net>-<timestamp>.jpg - 侧边栏底部显示串流的启动者、设备和端口
SIGNED OUT,并提示运行 lager webcam url 获取新链接。
API 端点
硬件要求
lager nets add-all 会为以下摄像头提供 Net:
- Logitech BRIO、BRIO HD、BRIO 4K Stream、4K Pro、C930e、C925e、C922 Pro、C920、C615、C270 和 StreamCam
- ELP 全局快门摄像头(AR0234 传感器,USB ID
32e4:0234)
ELP 全局快门摄像头每一台都报告相同的序列号
01.00.00。Lager 会把同一 Box 上的两台列为一台摄像头,带两个视频设备。请手动添加第二台摄像头的 Net,并指定它自己的 /dev/video* 设备。说明
- 摄像头 Net 必须在 Lager Box 上配置,并指定视频设备路径
- 串流使用从 8086 开始的端口
- 每一路串流使用一个独立端口,由系统自动分配
- 串流会一直保持,直到被显式停止或其进程结束
- 已死亡的串流进程会被自动清理
- 同一时刻只能有一路串流使用某个视频设备
- 默认分辨率为 640x480,30 FPS。有些摄像头支持更高:ELP 全局快门摄像头在每种尺寸下都支持 90 FPS。Box 会重新编码每一帧,尺寸较大时可能跟不上。查看页面上的帧率显示实际送出的速度
- JPEG 质量设为 80,以平衡带宽和画质
- 串流通过 HTTP 在 Lager Box 的 IP 地址上提供。在访问受控的 Box 上,请求需要携带登录令牌,而
start()返回的url不带令牌。请用lager webcam url获取带有您令牌的链接 - 变焦是数字变焦(裁剪并缩放),不是光学变焦

