英語 | 韓国語 | 中国語 | 日本語

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