精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

動態 ROI 區域監控與實例分割

開發
本教程展示了如何使用Roboflow Inference實現實時區域監控。分割模型允許動態檢測圖像場景中的感興趣區域,從而在持續變化的環境中實現區域監控。

區域監控是計算機視覺中的一個熱門應用,它通過監控一段時間內進入和離開特定區域的實體數量來實現。常見的區域監控應用場景包括建筑工地安全、病人監控和禁區控制。

這個區域,通常被稱為感興趣區域(ROI),通常由用戶設置為一個靜態的多邊形形狀,覆蓋攝像機捕捉到的場景的一部分。雖然這種方法在固定位置的攝像機上效果良好,但在感興趣區域或攝像機本身移動的情況下,如自動駕駛車輛或機器人應用中,可能就不太適用。

在本文中,我們考慮專用車道監控的問題。城市中通常有為自行車、公交車和拼車車輛等類型車輛指定的車道。然而,執法限制常常導致錯誤車輛使用或阻塞這些車道。為了解決這個問題,我們將開發一個可以在車輛儀表盤攝像頭上使用的專用車道監控應用。

訓練模型

為了檢測專用車道,我們使用Roboflow訓練一個自定義分割模型。Roboflow是一個在線平臺,幫助用戶快速創建、訓練和部署計算機視覺模型。他們的入門教程是學習平臺關鍵功能的好起點。

與生成邊界框預測的目標檢測模型不同,分割模型預測目標物體的精確像素邊界,提供關于其形狀和大小的更豐富信息。除了物理物體外,它們在檢測空間區域(如專用車道)方面也非常有效。

將我們的數據集上傳到新的Roboflow項目后,我們使用智能多邊形工具來標注專用車道。

我們創建第二個Roboflow項目,這次選擇“目標檢測”作為項目類型。這個模型將檢測車輛。使用邊界框工具上傳并標注圖像數據集。

一旦兩個數據集都被標注并分割為訓練/驗證/測試集,就可以使用Roboflow訓練和托管模型。

過濾檢測結果

除了我們的計算機視覺模型外,我們還需要編寫程序邏輯來過濾檢測結果,只包括在專用車道內行駛的車輛。讓我們用一個簡單的Python腳本來實現這一點。

下面的代碼將我們在Roboflow上托管的模型下載到本地機器,并使用它們對輸入圖像進行推理。

from inference import get_model
import cv2

# load hosted models from Roboflow

vehicle_model = get_model("sg-vehicles/1")
lane_model = get_model("sg-bus-lanes/1")

# process an image

image = cv2.imread("/your/image.png")

vehicle_results = vehicle_model.infer(image)[0]
lane_results = lane_model.infer(image)[0]

我們使用Supervision庫來可視化我們的預測。

import supervision as sv

# convert predictions into supervision detection objects
vehicle_detections = sv.Detections.from_inference(vehicle_results)
lane_detections = sv.Detections.from_inference(lane_results)

# initialize annotators
bounding_box_annotator = sv.BoxAnnotator()
mask_annotator = sv.MaskAnnotator()
label_annotator = sv.LabelAnnotator()

# annotate image
image = bounding_box_annotator.annotate(scene=image, detections=vehicle_detections)
image = label_annotator.annotate(scene=image, detections=vehicle_detections)

image = mask_annotator.annotate(scene=image, detections=lane_detections)
image = label_annotator.annotate(scene=image, detections=lane_detections)

# show image
cv2.imshow("output", image)

如上圖所示,雖然總共檢測到四輛車,但實際上只有一輛車在專用車道內行駛。過濾不需要的車輛的一種方法是只考慮其邊界框與專用車道分割掩碼相交的檢測結果。我們使用以下函數來實現這一點,該函數簡單地檢查掩碼的任何像素是否位于給定窗口內:

import numpy as np

def filter_detection_by_mask(detection, mask):

  num_objects = len(detection)
  filter_mask = np.empty(num_objects, dtype='bool')

  for idx in range(num_objects):
    bbox = detection.xyxy[idx].astype(int)
    filter_mask[idx] = np.any(mask[bbox[1]:bbox[3], bbox[0]:bbox[2]])

  return detection[filter_mask]
# filter detections by mask

lane_mask = lane_detections.mask
lane_mask = np.any(lane_mask, axis=0)
vehicle_detections = filter_detection_by_mask(vehicle_detections, lane_mask)

可視化過濾后的檢測結果,我們觀察到只有白色貨車保留下來。

跟蹤區域入侵

為了測量每輛錯誤車輛在專用車道內行駛的時間長度,我們需要跟蹤其在各幀中的位置。我們使用ByteTrack來實現這一點,ByteTrack是一種多目標跟蹤算法,它在后續幀之間匹配目標檢測并為每個檢測分配一個唯一的跟蹤ID。

我們定義以下函數,該函數接受過濾后的檢測結果、一個ByteTrack實例和一個記錄唯一檢測結果出現幀數的Python字典。在一定幀數后未被檢測到的跟蹤對象將被移除。

import supervision as sv

# ByteTrack 
tracker = sv.ByteTrack()

# dict of python tuples 
# [0: number of detections, 1: frames since last detection]
tracked_objects = {} 

def track_detections(detections, tracker, tracked_objects):
  detections = tracker.update_with_detections(detections)

  # remove old detections
  max_misses = fps
  expired_ids = []
  for id in tracked_objects:
    tracked_objects[id][1] += 1
    if tracked_objects[id][1] > max_misses:
      expired_ids.append(id)
  for id in expired_ids:
    tracked_objects.pop(id)

  # add or modify based on current detections
  for id in list(detections.tracker_id):
    if id in tracked_objects:
      tracked_objects[id][0] += 1
      tracked_objects[id][1] = 0
    else:
      tracked_objects[id] = [1, 0]

  return detections
vehicle_detections = track_detections(vehicle_detections)

我們修改我們的標注腳本,以打印專用車道內每輛車的跟蹤ID和持續時間。總時間可以通過將車輛被跟蹤的幀數乘以視頻幀率(FPS)來計算。

使用Roboflow管道進行視頻推理

現在我們的代碼可以在圖像上運行了,讓我們修改它以處理視頻文件。我們首先將代碼轉換為一個單一的Python類。

class LaneIntrusionModel:
  def __init__(self):
    self.vehicle_model = get_model("sg-vehicles/1")
    self.lane_model = get_model("sg-bus-lanes/1")

    self.tracker = sv.ByteTrack()
    self.tracker.reset()
    self.tracked_objects = {}
    self.fps = 30

    self.bounding_box_annotator = sv.BoxAnnotator()
    self.mask_annotator = sv.MaskAnnotator()
    self.label_annotator = sv.LabelAnnotator()

  # public methods
  def infer(self, image):
    vehicle_results = self.vehicle_model.infer(image)
    lane_results = self.lane_model.infer(image)

    return list(zip(vehicle_results, lane_results))

  def process_inference(self, image, vehicle_results, lane_results):
    vehicle_detections, lane_detections = self.get_detections(image, vehicle_results, lane_results)
    vehicle_detections = self.track_detections(vehicle_detections)
    annotated_image = self.annotate_frame(image, vehicle_detections, lane_detections)

    return annotated_image

  ## private methods
  def get_detections(self, image, vehicle_results, lane_results):

    vehicle_detections = sv.Detections.from_inference(vehicle_results)
    lane_detections = sv.Detections.from_inference(lane_results)

    lane_mask = lane_detections.mask
    if lane_mask is None or lane_mask.shape[0] == 0:
      return vehicle_detections[vehicle_detections.class_id == -1], lane_detections

    lane_mask = np.any(lane_mask, axis=0)
    vehicle_detections = filter_detection_by_mask(vehicle_detections, lane_mask)

    return vehicle_detections, lane_detections

  def track_detections(self, detections):
    detections = self.tracker.update_with_detections(detections)

    # remove old detections
    max_misses = self.fps
    expired_ids = []
    for id in self.tracked_objects:
      self.tracked_objects[id][1] += 1
      if self.tracked_objects[id][1] > max_misses:
        expired_ids.append(id)
    for id in expired_ids:
      self.tracked_objects.pop(id)

    # add or modify based on current detections
    for id in list(detections.tracker_id):
      if id in self.tracked_objects:
        self.tracked_objects[id][0] += 1
        self.tracked_objects[id][1] = 0
      else:
        self.tracked_objects[id] = [1, 0]

    return detections

  def annotate_frame(self, image, vehicle_detections, lane_detections):

    if len(vehicle_detections):
      labels = []
      for id in list(vehicle_detections.tracker_id):
        time_tracked = self.tracked_objects[id][0]/self.fps
        labels.append(f"vehicle:#{id} time:{time_tracked:.2f}s")

      image = self.bounding_box_annotator.annotate(scene=image, detections=vehicle_detections)
      image = self.label_annotator.annotate(scene=image, detections=vehicle_detections, labels=labels)

    if len(lane_detections):
      image = self.mask_annotator.annotate(scene=image, detections=lane_detections)
      image = self.label_annotator.annotate(scene=image, detections=lane_detections)

    return image

由于深度學習模型的計算需求,實時處理可能具有挑戰性,通常需要專門的硬件(如GPU)。Roboflow提供了InferencePipeline工具包(https://inference.roboflow.com/using_inference/inference_pipeline/),通過在單獨的線程上運行預處理、推理和后處理,并支持批量推理,來提高處理時間。我們首先定義以下回調函數:

from inference.core.interfaces.camera.entities import VideoFrame
from inference import InferencePipeline
from typing import Union, List, Optional, Any

model = LaneIntrusionModel()

def on_video_frame(video_frames: List[VideoFrame]) -> List[Any]:
  images = [v.image for v in video_frames]

  return model.infer(images)

def on_prediction(
  predictions: Union[dict, List[Optional[dict]]], 
  video_frame: Union[VideoFrame, List[Optional[VideoFrame]]]
) -> None:

  if not issubclass(type(predictions), list):
      # this is required to support both sequential and batch processing with single code
      # if you use only one mode - you may create function that handles with only one type
      # of input
      predictions = [predictions]
      video_frame = [video_frame]

  for result, frame in zip(predictions, video_frame):
    annotated_image = model.process_inference(frame.image, result[0], result[1])

    cv2.imshow("output", annotated_image)
    cv2.waitKey(1)

然后,我們使用以下腳本在視頻文件上運行管道:

pipeline = InferencePipeline.init_with_custom_logic(
  max_fps=out_fps,
  video_reference="/your/video.mp4",
  on_video_frame=on_video_frame,
  on_prediction=on_prediction,
)

# start the pipeline
pipeline.start()
# wait for the pipeline to finish
pipeline.join()

得到以下結果:

結論

總之,本教程展示了如何使用Roboflow Inference實現實時區域監控。分割模型允許動態檢測圖像場景中的感興趣區域,從而在持續變化的環境中實現區域監控。

除了專用車道監控外,動態區域監控的其他應用場景可能包括:

  • 送貨無人機掃描著陸區的包裹
  • 閉路電視攝像機監控高低潮之間的海岸線游泳者

實時視頻處理的限制通常將這些應用中的模型類型限制為快速、單階段的檢測器,如YOLO和SSD,這些模型需要強大的訓練數據才能有效。未來的ML優化和硬件工作可能需要將動態區域監控能力引入零樣本檢測模型。

責任編輯:趙寧寧 來源: 小白玩轉Python
相關推薦

2011-09-14 09:42:17

虛擬化ROI

2024-10-10 14:56:39

2011-03-31 09:36:35

Cacti監控

2011-04-13 13:14:41

EIGRP STUB

2023-09-08 14:48:41

動態共享包HSP

2023-11-15 13:20:14

Python圖像分割

2009-07-15 13:11:25

ibatis動態查詢

2011-04-02 16:36:52

NAT

2009-07-21 18:53:31

無線監控系統艾克賽爾

2021-11-26 06:06:10

Clip-pathCSS動態區域裁剪

2013-02-28 10:49:42

2009-12-30 13:31:34

IP-VPN

2009-09-15 09:45:23

Linq動態條件

2010-04-14 12:51:04

Oracle動態

2011-07-06 16:15:46

iPhone 圖片

2009-09-17 18:14:05

C#動態數組

2010-09-26 14:55:46

JVM內存監控

2024-12-18 16:47:31

計算機視覺圖像分割

2009-09-01 18:32:32

C#動態數組

2019-09-10 13:58:57

動態路由路由器網絡
點贊
收藏

51CTO技術棧公眾號

亚洲一级黄色av| 欧美视频中文字幕在线| 99蜜桃在线观看免费视频网站| 欧美黄色一级网站| 网友自拍区视频精品| 91久久精品一区二区| 日本美女爱爱视频| 青青九九免费视频在线| 狠狠色综合播放一区二区| 欧美激情喷水视频| 国产黄色录像视频| 欧美大胆视频| 欧美欧美欧美欧美首页| 国产美女主播在线播放| 亚洲成人三级| 26uuu色噜噜精品一区| 成人午夜一级二级三级| 无码人妻丰满熟妇区bbbbxxxx| 在线看片不卡| 色av中文字幕一区| 人人妻人人澡人人爽人人精品| 久久精品免视看国产成人| 欧洲中文字幕精品| www.av中文字幕| 先锋影音在线资源站91| 国产精品久线观看视频| 欧美激情一区二区三区在线视频 | 久久久国产精品无码| 欧美久久久网站| 日本久久精品电影| 91精品国产91| 色综合久久久888| 波多野吉衣中文字幕| www.成人网| 56国语精品自产拍在线观看| 国产超碰在线播放| 色网在线免费观看| 午夜精彩视频在线观看不卡| 青草全福视在线| 日本韩国在线视频爽| 久久精品人人做人人综合| 久久99精品久久久久久秒播放器 | 一区二区三区的久久的视频| 男人的天堂在线免费视频| av不卡一区二区三区| 国产精品一 二 三| 亚洲精品97久久中文字幕| 国产一区二区久久| 国产主播喷水一区二区| 一女二男一黄一片| 久草在线在线精品观看| 国产乱人伦真实精品视频| 中文字幕在线播出| 美女网站色91| 成人免费激情视频| 国产xxxx在线观看| 国产成人日日夜夜| 国产成人成网站在线播放青青| 亚洲国产精品一| 高清不卡一区二区| 国产免费一区二区三区| 蜜桃av鲁一鲁一鲁一鲁俄罗斯的| 懂色av一区二区三区免费观看| 国产66精品久久久久999小说| 成人免费公开视频| 91浏览器在线视频| 日本午夜精品一区二区三区| av在线天堂| 日韩久久一区二区| 99久久99久久精品| 擼擼色在线看观看免费| 欧美性极品xxxx娇小| 性生活免费在线观看| 综合久草视频| 亚洲国产精品999| 真实乱视频国产免费观看 | 国产一区av在线| 国产精品1区2区3区4区| 中文字幕免费一区二区| 97热精品视频官网| 无码人妻丰满熟妇区五十路| 精品一区二区三区在线观看| 97人人模人人爽人人喊38tv| 三级小视频在线观看| 久久久久久久久99精品| 尤物国产精品| 成人福利电影| 91福利精品第一导航| 亚洲第一成肉网| 欧美a大片欧美片| 日韩中文视频免费在线观看| 玖玖爱免费视频| 视频在线观看91| 亚洲在线观看视频| 蜜桃免费在线| 一区二区三区四区av| 国产真实乱子伦| 国产午夜亚洲精品一级在线| 精品一区二区三区四区| 最新一区二区三区| 国产亚洲高清视频| 91亚洲精品一区二区| 色视频免费在线观看| 亚洲欧洲日韩综合一区二区| 国产极品粉嫩福利姬萌白酱 | 国产精品播放| 91免费在线| 精品日本美女福利在线观看| 亚洲怡红院在线| 性人久久久久| 欧美日韩xxxxx| 中文字幕乱码在线观看| 成+人+亚洲+综合天堂| 亚洲精品在线视频观看| 中文字幕 在线观看| 日韩午夜电影在线观看| av电影网站在线观看| 亚洲人成人一区二区三区| 91精品在线播放| 国产污视频在线| 精品国产福利在线| 精品国产一二区| 久久香蕉国产| 国产精品久久久久久影视| 手机在线精品视频| 亚洲一区二区三区激情| 中文字幕在线观看日| 成人免费电影网址| 日本视频久久久| 亚洲欧美高清视频| 亚洲欧美日韩系列| 日韩精品aaa| 99热国内精品| 国产欧美一区二区三区久久| yjizz视频网站在线播放| 欧美小视频在线观看| 国产精品九九视频| 伊人影院久久| 国产精品香蕉视屏| 黄色污网站在线观看| 亚洲国产精品国自产拍av秋霞| 欧美在线视频第一页| 精品一区二区三区欧美| 亚洲欧美日产图| 青青青国产精品| www.亚洲一区| 国产视频在线观看视频| 亚洲欧美日韩一区二区| 人妻换人妻仑乱| 欧美韩日精品| 国产精品二区三区四区| 波多野结衣乳巨码无在线观看| 日韩欧美在线影院| 国产精品7777777| 99久久综合精品| 日韩欧美视频网站| 九九在线精品| 91精品国产综合久久香蕉的用户体验 | 男女激情免费视频| 精品自拍偷拍| 国产极品jizzhd欧美| 国产在线视频福利| 欧美日韩aaaaa| 免费成年人视频在线观看| 国产91精品精华液一区二区三区| 僵尸世界大战2 在线播放| 日韩精品丝袜美腿| 国产精品入口免费视| 色三级在线观看| 精品国产乱码久久久久久老虎| 自拍偷拍欧美亚洲| 国产色婷婷亚洲99精品小说| 中文字幕 日韩 欧美| 欧美日韩p片| 久久亚裔精品欧美| 国产精品99久久久久久董美香 | 色多多在线观看| 国产一区二区av| 亚洲第一色视频| 日韩欧美在线免费| 婷婷激情四射网| 91污在线观看| 91免费视频污| 亚洲一区二区免费看| 一区二区三区国产福利| 久久大胆人体视频| 国产欧美日韩免费| 成人福利电影| 日韩视频一区在线| 四虎影视精品成人| 欧美日韩国产乱码电影| 黄色片视频网站| 中文字幕日本不卡| 麻豆av免费观看| 国产福利一区在线| 狠狠热免费视频| 亚洲性图久久| 在线看成人av电影| 中文有码一区| 国产成人精品日本亚洲11| 日韩制服一区| 97久久精品人人澡人人爽缅北| 老司机在线看片网av| 亚洲精品国产免费| 国产草草影院ccyycom| 欧美午夜在线观看| 青青草av在线播放| 亚洲自拍偷拍综合| 一本在线免费视频| 久久免费视频一区| 性色av蜜臀av浪潮av老女人| 精品一区二区三区久久| 欧美精品第三页| 亚洲激情自拍| 轻点好疼好大好爽视频| 99精品全国免费观看视频软件| 欧美国产综合视频| 蜜臀av一区| 国产精品伊人日日| 无码国模国产在线观看| 国产一区二区在线免费视频| 蜜桃成人精品| 日本在线精品视频| 亚洲性色av| 97在线视频精品| 不卡av免费观看| 久久久久久久爱| a视频在线观看| 久久综合五月天| 黄色网址在线免费| 久久久www成人免费精品| 在线免费黄色| 色777狠狠综合秋免鲁丝| www.在线视频.com| 在线视频一区二区| 成人在线视频成人| 色老头一区二区三区| 成年人视频在线免费观看| 亚洲日韩欧美视频一区| 男女视频在线观看免费| 亚洲欧美999| 毛片在线免费| 国产一区二区三区网站| 北岛玲一区二区三区| 一本色道久久综合亚洲精品小说 | 黄色精品在线看| 青青草av在线播放| 色综合天天在线| 男人的天堂av网站| 欧美视频第二页| 91成品人影院| 欧美一区二区日韩一区二区| 国产精品无码天天爽视频| 欧美午夜片在线看| 一级做a爱片久久毛片| 欧美一区二区三区系列电影| 国产黄a三级三级看三级| 欧美成人乱码一区二区三区| 人妻夜夜爽天天爽| 亚洲欧美综合另类中字| 2019中文字幕在线视频| 久久亚洲国产精品| 久色国产在线| 欧美一级淫片丝袜脚交| 色综合天天色| 51成人做爰www免费看网站| 一区二区三区四区高清视频 | 色综合久久天天| 伊人久久中文字幕| 欧美一区二区精品久久911| 欧美熟妇另类久久久久久不卡 | 欧美精品久久天天躁| 国产xxxx孕妇| 亚洲欧美中文日韩在线v日本| 1024免费在线视频| 欧美激情精品久久久久久免费印度| 国产伦理精品| 国产在线拍偷自揄拍精品| 亚洲码欧美码一区二区三区| 免费精品视频一区二区三区| 日韩久久久久| 霍思燕三级露全乳照| 日韩av电影天堂| av电影在线播放| 中文字幕不卡的av| 久久精品无码人妻| 在线视频你懂得一区| www视频在线| 国产午夜一区二区| 国产又色又爽又黄刺激在线视频| 国产91在线播放九色快色| 高清一区二区中文字幕| 久久99精品国产一区二区三区| 91久久久精品国产| 国产aaa一级片| 国产成人精品亚洲777人妖| 偷拍夫妻性生活| 亚洲激情在线激情| 中文在线观看免费高清| 亚洲成年人在线播放| 麻豆传媒视频在线观看免费| 欧美一区二区三区……| 亚洲三级av| 亚洲一区3d动漫同人无遮挡| 香蕉久久久久久久av网站| 国产乱淫av麻豆国产免费| 国产精品丝袜一区| 欧美精品韩国精品| 精品国产91久久久久久久妲己 | 欧美肉体xxxx裸体137大胆| 久久国产午夜精品理论片最新版本| 蜜桃视频在线一区| 无码熟妇人妻av| 精品久久香蕉国产线看观看亚洲 | 26uuu国产在线精品一区二区| 青青草原在线免费观看| 欧美美女bb生活片| 福利成人在线观看| 欧美亚洲午夜视频在线观看| 爱高潮www亚洲精品| 色乱码一区二区三区熟女 | 国产欧美日韩精品专区| 亚洲自拍电影| 777久久久精品一区二区三区| 成人国产电影网| 久草中文在线视频| 日韩无一区二区| 丝袜美女在线观看| 91久久精品美女| 久久精品影视| 粉色视频免费看| 综合在线观看色| 国产精品高潮呻吟av| 日韩视频精品在线| 日本成人在线网站| 一区二区不卡视频| 久久国产精品第一页| 国产黄色片在线| 欧美日韩色一区| 麻豆网站在线看| 国产综合视频在线观看| 久久久久久免费视频| 激情久久综合网| 亚洲精品国产第一综合99久久| 国产成年妇视频| 欧美激情国产精品| 农村少妇一区二区三区四区五区| 欧美成人免费在线观看视频| 99久久99久久精品免费观看| 中文字幕亚洲高清| 亚洲欧美在线一区二区| 欧美韩国亚洲| 一区二区三区在线观看www| 精品亚洲国产成人av制服丝袜| 午夜免费激情视频| 欧美成人a视频| 毛片电影在线| 日韩一区免费观看| 久久电影国产免费久久电影| 日本aⅴ在线观看| 精品国产免费一区二区三区香蕉| 擼擼色在线看观看免费| 日产国产精品精品a∨| 精品一二线国产| 欧美黄色免费看| 亚洲精品影视在线观看| 欧美97人人模人人爽人人喊视频| 成人手机视频在线| 成人福利视频网站| 波多野结衣绝顶大高潮| www.欧美精品| 国产伦精品一区二区三区在线播放 | 成码无人av片在线观看网站| 91入口在线观看| 久久久精品日韩| 精品人妻伦九区久久aaa片| 亚洲国产日韩欧美综合久久 | 欧美日韩国产不卡| 青青在线视频| 日韩高清国产精品| 国产精品性做久久久久久| aaa人片在线| 日韩一区二区三区xxxx| 久久精品国产亚洲5555| 欧美伦理片在线观看| 亚洲午夜在线电影| 成av人电影在线观看| 999精品视频一区二区三区| 国产毛片久久| 国产精品 欧美激情| 亚洲男人天堂2019| 亚洲国产高清在线观看| 亚洲视频在线a| 亚洲一区二区三区四区的| 2017亚洲天堂1024| 久久国产精品久久| 国产一区二区日韩精品| 伊人久久中文字幕| 91国产在线精品| 欧美成人日本|