精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

www.射射射| 国内精品久久影院| 五月天开心婷婷| 中文国产字幕在线观看| 99久久久无码国产精品| 国产精品美女主播| 国产乡下妇女做爰毛片| 日本一区二区在线看| 日韩欧美久久久| 日韩免费毛片视频| 色呦呦在线资源| 中文字幕精品—区二区四季| av资源站久久亚洲| 中文字幕一区二区三区四区免费看 | 欧美日韩中文字幕日韩欧美| 最新欧美日韩亚洲| 青青青草原在线| 国产福利一区在线观看| 国产精品美女主播在线观看纯欲| 日本污视频在线观看| 五月婷婷亚洲| 亚洲无限av看| 久久影院午夜片一区| 91成人天堂久久成人| 在线免费看av网站| 欧洲激情综合| 亚洲精品v欧美精品v日韩精品| 无尽裸体动漫2d在线观看| 伊人久久av| 亚洲电影一级黄| 最新黄色av网站| 日本最黄一级片免费在线| 久久久国产精华| 国产综合18久久久久久| 亚洲精品一区二区三区新线路 | 污污网站在线观看视频| 三级成人黄色影院| 激情成人中文字幕| 日韩免费在线观看av| 国产精品久久久久久福利| 国产欧美视频一区二区| 欧美日韩在线精品| 欧美老女人性开放| 99久久精品久久久久久清纯| 国产乱码精品一区二区三区中文| 亚洲国产精品久久久久久久| 国产在线视频一区二区三区| 成人免费视频a| 91丨porny丨在线中文| 蜜臀av一级做a爰片久久| 国产精品三级久久久久久电影| 久久久久久不卡| 久久精品一本| 国产精品一区二区三区久久 | 精品亚洲aⅴ乱码一区二区三区| 国产精品99久久99久久久二8| 在线免费观看国产精品| 美腿丝袜一区二区三区| 国产噜噜噜噜噜久久久久久久久| 中文字幕 国产| 美女视频黄 久久| 91热精品视频| 亚洲精品一区二区三区不卡| 99天天综合性| 日本在线播放一区| 三区四区在线视频| 一区二区视频在线| 国产中文字幕在线免费观看| 周于希免费高清在线观看| 91久久精品一区二区三| 亚洲天堂2018av| 久久丁香四色| 日韩大陆欧美高清视频区| 成人免费av片| 日韩在线欧美| 电影在线高清| 国产精品二区不卡| 久久久国产精品免费| 国产一区在线免费| 免费在线观看毛片网站| 日韩女优在线观看| 国产视频一区在线观看一区免费| 欧美资源在线观看| 在线观看不卡的av| 国产精品一区二区在线观看网站| 国产一级特黄a大片99| 青青草视频在线免费观看| 中文字幕乱码日本亚洲一区二区| 婷婷视频在线播放| 美女高潮在线观看| 欧美视频一区二区三区四区 | 色偷偷男人天堂| 在线一区电影| 欧美在线中文字幕| 国产模特av私拍大尺度| 91网站在线播放| 亚洲视频欧美在线| 久久电影网站| 欧美三级午夜理伦三级中视频| 欧美体内she精高潮| 日韩a级大片| 久久五月天色综合| 国产日产精品一区二区三区| 国产精品一二二区| 丝袜美腿玉足3d专区一区| 国模雨婷捆绑高清在线| 欧美日韩精品久久久| 制服丝袜第二页| 重囗味另类老妇506070| 国产精品老女人视频| 乱精品一区字幕二区| 国产精品拍天天在线| 黄色免费视频大全| 日韩一二三区在线观看| 中文字幕欧美日韩在线| 日韩三级视频在线播放| 国产精品一区专区| 亚洲精品高清视频| 久久电影tv| 日韩av有码在线| 一区二区三区免费高清视频| 精品一区二区在线看| 日本欧美色综合网站免费| 国产亚av手机在线观看| 91精品国产综合久久精品性色| 亚洲性猛交xxxx乱大交| 一区二区久久| 国产超碰91| 性爱视频在线播放| 欧美军同video69gay| 成人午夜剧场视频网站| 国产亚洲一区在线| 精品国产中文字幕| 亚洲精品影院| 91麻豆一二三四在线| 欧美日韩精品三区| 国产91精品网站| 国产在线视频你懂的| 激情久久五月天| 国产精品美女在线播放| 久久天堂影院| 深夜福利日韩在线看| 中国女人一级一次看片| 国产视频一区不卡| 人人干人人视频| 残酷重口调教一区二区| 国产精品日韩一区| eeuss影院www在线播放| 欧美视频在线播放| 精品一区二区在线观看视频| 蜜臀av性久久久久蜜臀av麻豆| 亚州欧美一区三区三区在线| 78精品国产综合久久香蕉| 亚洲欧洲在线观看| 波多野结衣视频观看| 国产欧美精品日韩区二区麻豆天美| 国产一区视频免费观看| 国产91一区| 国产精品国产三级国产aⅴ浪潮 | 久久97久久97精品免视看秋霞| 国产精品v亚洲精品v日韩精品| 555www成人网| 久久久久久青草| 在线精品视频免费播放| 啪啪一区二区三区| 国产乱码字幕精品高清av| 日韩国产小视频| 六月丁香久久丫| 日韩av电影在线播放| yw193.com尤物在线| 欧美日本韩国一区二区三区视频| 中文字幕电影av| 成人深夜在线观看| 国产成人av影视| 亚洲欧美色图| 狼狼综合久久久久综合网| 日韩不卡在线| 久久久久久久久久久成人| 深夜视频在线免费| 欧美日韩亚洲综合在线| 久久人人爽人人爽人人| 久久毛片高清国产| 一级 黄 色 片一| 夜夜精品视频| 中文字幕一区二区三区最新| 国产福利资源一区| 日韩美女免费视频| 在线免费观看污| 亚洲图片欧美午夜| www黄色网址| 色婷婷av一区二区三区之一色屋| 国产精品99久久久久久成人| 99精品久久99久久久久| 少妇网站在线观看| 亚洲国产一区二区精品专区| 天堂资源在线亚洲视频| 精品国内亚洲2022精品成人| 国产精品久久久久久影视 | 国产精品亚洲人成在99www| 91免费综合在线| 日韩欧美精品电影| 国语自产精品视频在线看抢先版图片| 成人午夜影视| 日韩av一区二区在线| 国产激情视频在线播放| 欧美三级电影网| 久久国产精品免费看| 一区二区三区av电影 | 亚洲成a人在线观看| 亚洲一级理论片| 91美女福利视频| 日批免费观看视频| 国内精品久久久久影院色| 北条麻妃在线一区| 最新亚洲一区| 国产精品自拍合集| 91精品电影| 亚洲一卡二卡三卡| 狠狠综合久久av一区二区蜜桃| 国产日本一区二区三区| 日本在线视频一区二区三区| 91精品久久久久久久久不口人| 三级成人黄色影院| 欧美一区二区三区免费观看| 国产探花在线观看| 欧美日本精品在线| wwwav在线| 久久精品视频网站| 欧美69xxx| 中文字幕欧美亚洲| 在线激情小视频| 在线电影中文日韩| 国产女人在线视频| 亚洲人成电影在线播放| 日韩大胆视频| 亚洲人成在线播放| 国产高清视频在线播放| 亚洲精品色婷婷福利天堂| 欧美孕妇性xxxⅹ精品hd| 日韩激情第一页| 欧美色视频免费| 亚洲精品一区二区在线| 欧美女v视频| 中文字幕日韩欧美精品在线观看| 成a人v在线播放| 色婷婷综合成人av| 精品国产白色丝袜高跟鞋| 久久视频在线免费观看| av网址在线播放| 欧美精品激情blacked18| 99riav视频在线观看| 97超级碰碰碰久久久| 亚洲天堂手机| 国产精品天天狠天天看| 日韩国产大片| 97在线资源站| 日韩系列在线| 先锋影音一区二区三区| 四季av一区二区凹凸精品| 国产美女视频免费| 亚洲一级黄色| 久久久久久久少妇| 九色|91porny| 成年人小视频在线观看| 91在线丨porny丨国产| 免费看黄色av| 亚洲日本电影在线| 国产一级生活片| 欧美午夜视频一区二区| 亚洲午夜无码久久久久| 欧美一二三四在线| 免费国产精品视频| 亚洲社区在线观看| 超鹏97在线| 欧美在线亚洲一区| 在线成人免费| 精品国产综合久久| 久久在线电影| 成人免费aaa| 美女性感视频久久| 中国极品少妇xxxx| 国产精品剧情在线亚洲| 国产精品99无码一区二区| 91国偷自产一区二区三区成为亚洲经典 | 国产剧情av在线播放| 国产精品久久久久久久久| 精品三级国产| 视频一区免费观看| 国内精品久久久久久久97牛牛 | 久久久伦理片| 伊人久久大香线蕉精品| 亚洲理伦在线| 亚洲乱码日产精品bd在线观看| 亚洲一区有码| 久久精品五月婷婷| 98精品视频| 免费欧美一级视频| 国产在线精品不卡| 国产熟妇久久777777| 国产精品的网站| 国产毛片aaa| 欧美一级爆毛片| 成人综合影院| 91成品人片a无限观看| 精品视频在线观看网站| 日本在线一区| 日韩午夜av在线| 国产精品igao网网址不卡| 国产片一区二区| 国产午夜在线播放| 日韩欧美国产wwwww| av一区在线观看| 奇米成人av国产一区二区三区| 中文在线综合| 无码人妻aⅴ一区二区三区日本| 玖玖玖国产精品| 国产又黄又粗又猛又爽的视频 | 欧美激情亚洲天堂| 日本不卡的三区四区五区| 亚洲第九十七页| 亚洲高清视频在线| 精品国产无码一区二区三区| 日韩视频在线一区| 亚洲a∨精品一区二区三区导航| 另类欧美小说| 国产精品入口| 无码精品一区二区三区在线播放| 亚洲免费资源在线播放| 91超薄丝袜肉丝一区二区| 国产一区二区三区久久精品| 欲香欲色天天天综合和网| 精品中文字幕一区| 国产视频亚洲| 亚洲国产第一区| 精品高清美女精品国产区| 五月婷婷免费视频| 98精品国产高清在线xxxx天堂| 精品国产乱子伦一区二区| 国产精品久久中文字幕| 成人性生交大片免费看视频在线 | 亚洲自拍高清视频网站| 日韩欧美在线中字| 四季av一区二区| 亚洲国产精品99久久久久久久久| 久久久久久在线观看| 亚洲欧洲激情在线| 免费高清视频在线一区| 天堂一区二区三区| 久久精品国产免费| 国产尤物在线播放| 日韩精品一区二区三区中文不卡 | 成人毛片av在线| 97超级碰碰| 亚洲大片在线| 久久精品国产亚洲av麻豆| 色综合久久中文字幕| 国产福利片在线| 国产免费亚洲高清| 欧美日韩国产探花| 中文字幕人妻一区二区三区| 精品久久在线播放| 国产视频福利在线| 91在线高清视频| 亚洲视频综合| 欧美成人免费一级人片100| 91成人在线| 91九色国产ts另类人妖| 国产99久久久精品| 国产午夜在线播放| 国产麻豆9l精品三级站| www中文在线| 欧美一级专区免费大片| 1024在线看片你懂得| 久久婷婷人人澡人人喊人人爽| 美女精品一区| 日本一级特级毛片视频| 亚洲高清av在线| 国产经典一区| 少妇久久久久久被弄到高潮| 不卡大黄网站免费看| 国产一级片一区二区| 九九热这里只有在线精品视| 亚洲+小说+欧美+激情+另类 | 无码小电影在线观看网站免费| 欧美性大战久久久久| 国产精品自在欧美一区| 国产免费av一区| 欧美成人免费网| 视频一区中文| 亚洲欧洲日韩综合| 日本韩国欧美在线| 第四色日韩影片| 中文字幕一区综合| 久久这里只精品最新地址| 精品国产18久久久久久| 国产极品jizzhd欧美| 亚洲小说欧美另类婷婷| 天天操夜夜操av| 亚洲人成在线观看| 国产三级精品三级在线观看国产|