| 英語 | 韓国語 | 中国語 | 日本語 |
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" の場合、画像の形状は (高さ, 幅, 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")で指定できます。
· 6桁フォーマット(例: "#ffffff")では、各2桁がそれぞれ赤、緑、青(RGB)の色を表します。
· 8桁フォーマット(例: "#ff000000")では、最初の2桁が透明度のアルファチャンネルを示します。
· 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")または16進数表記(例: "#ffff0000")で指定できます。
· 6桁フォーマット(例: "#ffffff")では、各2桁がそれぞれ赤、緑、青(RGB)の色を表します。
· 8桁フォーマット(例: "#ff000000")では、最初の2桁が透明度のアルファチャンネルを示します。
· 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")


