영어 | 한국어 | 중국어 | 일본어

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, 0부터 시작하는 사용자 정의 ID를 지정할 수 있습니다.

· 미리 정의된 시스템 이벤트 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")이나 16진수 표현("#ffff0000")을 사용할 수 있습니다.

· "#ffffff"와 같은 6자리 형식은 각각의 두 자리가 Red, Green, Blue 색상을 나타냅니다.

· "#ff000000"와 같은 8자리 형식은 앞 두 자리가 알파(투명도) 채널을 나타냅니다.

· "#fff"와 같은 3자리 형식은 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 Guide Shapes 섹션을 참조하세요.

🛠️ 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")이나 16진수 표현("#ffff0000")을 사용할 수 있습니다.

· "#ffffff"와 같은 6자리 형식은 각각의 두 자리가 Red, Green, Blue 색상을 나타냅니다.

· "#ff000000"와 같은 8자리 형식은 앞 두 자리가 알파(투명도) 채널을 나타냅니다.

· "#fff"와 같은 3자리 형식은 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")