| 영어 | 한국어 | 중국어 | 일본어 |
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")


