英文 | 韩文 | 中文 | 日文

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")