| 英文 | 韩文 | 中文 | 日文 |
APIs: live video
获取实时图像
您可以使用通道编号和子流索引来获取实时图像。
默认的子流索引是0,表示主码流。
🛠️ (frame_image, frame_info) = get_image(ch_no, sub_idx=idx)
↩️ frame_image: 视频图像的 numpy 数组
· 如果像素格式为 "BGR",则图像的形状为 (height, width, 3)。
↩️ frame_info: 包含视频图像信息的字典
· frame_info['timestamp']: Unix 时间戳
· frame_info['timestamp_msec']: 时间戳的毫秒部分
· frame_info['message']: 错误信息
您还可以通过以下 API 更改视频输出设置:
🛠️ set_image_size(width, height): 设置输出视频的尺寸。(默认: 原视频尺寸)
🛠️ set_pixel_format("PIXEL_FORMAT"): 设置输出视频格式。可选 "RGB" / "BGR" / "0RGB" / "0BGR"。(默认: "RGB")
live_video = vmspy.live_video()
if not live_video.init(address, port, access_id, access_pw):
print(live_video.get_error())
live_video.set_image_size(720, 480)
live_video.set_pixel_format("BGR")
(frame_image, frame_info) = live_video.get_image(1) # ch#1
启动直播流并接收视频
您可以使用通道编号和子流索引来启动和停止直播流。
默认的子流索引是0,表示主码流。
🛠️ start(ch_no, sub_idx=idx)
🛠️ stop()
您还可以通过以下 API 更改视频输出。
🛠️ set_image_size(width, height): 设置输出视频的尺寸。(默认: 原视频尺寸)
🛠️ set_pixel_format("PIXEL_FORMAT"): 设置输出视频格式。可选 "RGB" / "BGR" / "0RGB" / "0BGR"。(默认: "RGB")
🛠️ set_keyframe_only(Bool): 设置是否只发送 iFrame。(默认: False)
live_video.set_image_size(720, 480)
live_video.set_pixel_format("BGR")
live_video.set_keyframe_only(True)
live_video.start(1) # ch#1
# ...
live_video.stop()
启动后,您可以接收视频流。
🛠️ (frame_image, frame_info) = get_frame(): 接收视频图像和信息。
↩️ frame_image: 视频图像的 numpy 数组
· 如果像素格式为 "BGR",图像的形状为 (height, width, 3)。
↩️ frame_info: 包含视频图像信息的字典
· frame_info['timestamp']: Unix 时间戳
· frame_info['timestamp_msec']: 时间戳的毫秒部分
· frame_info['delay']: 延迟秒数
· frame_info['buffer_count']: 缓存帧数量
· frame_info['message']: 错误信息
live_video.start(1) # ch#1
while True:
(frame_image, frame_info) = live_video.get_frame()
if frame_image.size == 0:
print(frame_info['message'])
break
# 进行分析
# 报告检测结果和事件
live_video.stop()
报告检测结果和事件
作为分析的输出,您可以将检测结果和事件报告回 VMS 服务器。
🛠️ report_event(frame_info, x, y, w, h, duration, event_type_id, class_id, object_id)
➡️ x, y, w, h: 事件的位置,值按照宽度和高度归一化
➡️ duration: 事件的持续时间(秒)
➡️ event_type_id: 事件类型 ID,您可以自定义 ID(从0开始)。
· 预定义系统事件 ID: Motion(-1), Sensor(-2), Mobile(-3), Thermal(-4), Overparking(-5), Leakage(-6)
· 自定义事件可在 config.exe 中配置
➡️ class_id: AI 检测模型的类别 ID
➡️ object_id: AI 检测模型的对象 ID
检测结果可能有多个,因此可以多次输入结果并发送。
🛠️ inputDetectionResult(x, y, w, h, class_id, object_id, confidence)
➡️ x, y, w, h: 事件的位置,值按照宽度和高度归一化
➡️ class_id: AI 检测模型的类别 ID
➡️ object_id: AI 检测模型的对象 ID
➡️ confidence: 推理置信度
🛠️ sendDetectionResults(frame_info): 发送带有帧信息的输入结果
➡️ frame_info: 来自 get_frame() 的帧信息(需要时间戳)
for box in results[0].boxes:
xyxy = box.xyxy[0].tolist()
class_id = int(box.cls[0].item())
conf = box.conf[0].item()
x = xyxy[0]/640.0
y = xyxy[1]/640.0
w = (xyxy[2] - xyxy[0])/640.0
h = (xyxy[3] - xyxy[1])/640.0
live_video.inputDetectionResult(x, y, w, h, class_id=class_id, object_id=0, confidence=conf)
live_video.sendDetectionResults(frame_info)
更改检测框
您可以选择修改检测框的颜色、粗细和标题。
🛠️ set_detection_class(class_names): 设置类别名称字典
🛠️ set_detection_box(class_id, border_color, border_thickness): 更改框的颜色和粗细
➡️ class_id: 如果未定义,则设置的颜色和粗细应用于所有类别;如果定义,仅应用于该类别。
➡️ border_color: 此参数决定框的颜色。可使用颜色名称(如 "red")或十六进制(如 "#ffff0000")。
· 6位格式如 "#ffffff",每两位代表红、绿、蓝 (RGB)。
· 8位格式如 "#ff000000",前两位为透明度 (alpha)。
· 3位格式如 "#fff",会扩展为6位等效。
➡️ border_thickness: 此参数指定边框的像素粗细。
live_video.start("vms.address", 3300, 1, 0, "access_id", "access_pw")
class_names = {0: 'person', 1: 'bicycle', 2: 'car', 3: 'motorcycle', ...}
live_video.set_detection_class(class_names)
live_video.set_detection_box(border_color="black", border_thickness=2)
live_video.set_detection_box(class_id=1, border_color="red")
live_video.set_detection_caption(show_object_id=False, show_class_name=True, show_confidence=False)
绘制引导形状
您可以在视频上绘制引导形状。详细信息请参阅 绘制引导形状 部分。
🛠️ draw_line(x0, y0, x1, y1, border_thickness, border_color): 画一条线
🛠️ draw_rectangle(x, y, w, h, border_thickness, border_color): 画一个矩形
🛠️ draw_ellipse(x, y, w, h, border_thickness, border_color): 画一个椭圆
🛠️ draw_polygon(point_array, border_thickness, border_color): 画一个多边形
➡️ x, y, w, h, x0, y0, x1, y1: 事件的位置,值按宽度和高度归一化
➡️ point_array: 元组数组,每个元组为一个 x-y 坐标对。
➡️ border_color: 此参数决定边框颜色。可用颜色名称(如 "red")或十六进制(如 "#ffff0000")。
· 6位格式如 "#ffffff",每两位代表红、绿、蓝 (RGB)。
· 8位格式如 "#ff000000",前两位为透明度 (alpha)。
· 3位格式如 "#fff",会扩展为6位等效。
➡️ border_thickness: 此参数指定边框的像素粗细。
vms_video.drawLine(0.342592, 0.273927, 0.177778, 0.003300,
border_thickness=4.0, border_color="#FF008000")
vms_video.drawRectangle(0.427783, 0.689699, 0.248139, 0.191559,
border_thickness=2.0, border_color="#FF0000FF")
vms_video.drawEllipse(0.427783, 0.689699, 0.248139, 0.191559,
border_thickness=2.0, border_color="#FF0000FF")
polygon_points = [(0.337037, 0.326733),
(0.412963, 0.323432),
(0.392593, 0.907591),
(0.161111, 0.904290)]
vms_video.drawPolygon(polygon_points, border_thickness=4.0, border_color="#FFFF0000")


