日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

作者:PRATEEK JOSHI

翻譯:張若楠

校對:吳金笛

本文長度為2600字,建議閱讀10分鐘

本文為一個從圖像預處理角度入手的無人駕駛車道識別實戰項目。

作者序

大約十年前,我瞥見了第一輛自動駕駛汽車,當時google仍在對初代無人車進行測試,而我立刻被這個想法吸引了。誠然,在將這些概念開源給社區之前,我必須等待一段時間,但是這些等待是值得的。

我最近嘗試了一些與計算機視覺有關的自動駕駛理念,其中包括車道檢測。設想一下,在設計任何自動駕駛汽車時,車道檢測都是一個非常核心的技術。我們將基于這段視頻搭建車道檢測系統:https://youtu.be/sYhZbhT-Smw。很酷對吧?我將使用OpenCV庫,通過計算機視覺,引導你進入車道檢測和自動駕駛這一領域。當然,在本教程中我們還將講解Python代碼。

對于任何深度學習或計算機視覺新手,請注意--如果你要入門,請查看以下課程及產品。這些資源可以很好的助力你開始計算機視覺之旅:

  • 深度學習基礎

https://courses.analyticsvidhya.com/courses/fundamentals-of-deep-learning

  • 使用深度學習的計算機視覺

https://courses.analyticsvidhya.com/courses/computer-vision-using-deep-learning-version2

目錄

1. 了解車道檢測的概念

2. 問題陳述

3. 什么是幀蒙版(Frame Mask)?

4. 用于車道檢測的圖像預處理

5. 在Python中使用OpenCV進行車道檢測實戰

車道檢測的概念

那么什么是車道檢測?維基百科是這樣定義車道的:“車道是道路(行車道)的一部分,專門用于單行車輛,以控制和引導駕駛員并減少交通沖突。”

無人駕駛項目實戰:使用OpenCV進行實時車道檢測

 

Figure 1:https://en.wikipedia.org/wiki/Lane

對此進行正式定義很重要,因為它使我們能夠在項目中使用固定的車道定義,這樣在構建系統時我們不會產生任何歧義。

如我之前提到的,車道檢測是自動駕駛的重要組成部分。它是推動場景理解的最重要的研究主題之一。一旦獲得車道位置,車輛將知道要去哪里,并避免駛入其他車道或離開道路的風險。這可以防止駕駛員/駕駛系統偏離行車軌道。

以下是一些隨機道路圖像(第一行)及其檢測到的車道(第二行):

無人駕駛項目實戰:使用OpenCV進行實時車道檢測

 

Figure 2 https://github.com/qinnzou/Robust-Lane-Detection

問題陳述

我們希望執行的任務是視頻中的實時車道檢測。我們可以通過多種方式做車道檢測。可以使用樣本訓練的方法,例如在帶有標注的視頻數據集上訓練深度學習模型,或者使用預先訓練好的模型。

但是,也有更簡單的方法來執行車道檢測。在本文中,我將向你展示如何在不使用任何深度學習模型的情況下做到這一點。我們將在Python中用到廣受歡迎的OpenCV庫。

以下是我們將要處理的視頻中的一幀:

無人駕駛項目實戰:使用OpenCV進行實時車道檢測

 

如圖片中所示,我們有四條用白色車道標記隔開的車道。因此要檢測一條車道,我們必須檢測到該車道兩側的白色標記。這就引出了關鍵問題 -- 我們如何檢測車道標記線?

除了車道線外,場景中還有很多其他對象。道路上有車輛,路旁的障礙物,路燈等。在視頻中,每一幀的場景都在變化。這很好地反映了現實生活中的駕駛情況。因此,在解決車道檢測問題之前,我們必須找到一種方法來忽略駕駛場景中的無關物體。我們可以直接上手的一件事就是縮小關注范圍。相較于使用整個幀,我們只使用畫面中的一部分。在下圖中,除車道標記外,其他所有內容都隱藏在該幀中。隨著車輛的移動,車道標記只會在該區域出現得更多或更少。

無人駕駛項目實戰:使用OpenCV進行實時車道檢測

 

在下一節,我將向你展示如何編輯視頻的邊框以選擇特定區域。此外你還將了解一些必要的圖像預處理操作。

什么是蒙版(Frame Mask)?

在這里,蒙版不過是一個NumPy數組。當我們想對圖像應用遮罩時,我們只需將圖像中所需區域的像素值更改為0或255,或任何其他數字。下面給出的是圖像遮罩的示例。圖像中某個區域的像素值已設置為0:

無人駕駛項目實戰:使用OpenCV進行實時車道檢測

 

這是一種非常簡單但有效的方法,可以從圖像中刪除不需要的區域和對象。

車道檢測的圖像預處理

我們將首先對輸入視頻中的所有幀應用蒙版。然后,我們將應用圖像閾值處理,然后進行霍夫線變換來檢測車道標記。

圖像閾值處理

在該方法中,我們基于一個閾值,將灰度圖像的像素值分配為黑色或者白色。如果像素的值大于閾值,則為其分配一個值(黑色或白色),否則為另一個顏色。

如你在上方所見,在對蒙版圖像應用閾值設置后,我們在輸出的圖像中只留下了車道標記。現在,我們可以借助霍夫線變換輕松地檢測到這些標記。

霍夫線變換

霍夫變換是一種檢測可以數學表示的形狀的技術。

例如,它可以檢測矩形,圓形,三角形或直線等形狀。而我們關注的對象是可以表示為線的車道標記。我非常建議你查閱霍夫變換的資料:

https://opencvpythontutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_houghlines/py_houghlines.html

在執行圖像閾值處理后,在圖像上應用霍夫線變換,我們將得到以下的輸出圖像:

無人駕駛項目實戰:使用OpenCV進行實時車道檢測

 

我們需要針對所有幀執行此過程,然后將生成的幀拼接到新視頻中。

在Python中使用OpenCV實現車道檢測

現在該用Python實現這個車道檢測項目了!我建議使用Google Colab,因為構建車道檢測系統將需要很大計算力。

首先,導入所需的庫:

import osimport reimport cv2import numpy as npfrom tqdm import tqdm_notebookimport matplotlib.pyplot as plt

讀取視頻幀

我已經從該YouTube視頻中采樣了一些視頻幀。您可以從此鏈接下載。

https://drive.google.com/file/d/1e4cc4zFFna3Owyym6aq7ZXoquHA2l95O/view

# get file names of framescol_frames = os.listdir('frames/')col_frames.sort(key=lambda f: int(re.sub('D', '', f)))# load framescol_images=[]

讓我們繪制其中一幀:

 # specify frame indexidx = 457# plot frameplt.figure(figsize=(10,10))plt.imshow(col_images[idx][:,:,0], cmap= "gray")
無人駕駛項目實戰:使用OpenCV進行實時車道檢測

 

創建幀蒙版

我們感興趣的區域是多邊形。我們要掩蓋除此區域以外的所有內容。因此,我們首先必須指定多邊形的坐標,然后使用它來準備蒙版:

# create a zero arraystencil = np.zeros_like(col_images[idx][:,:,0])# specify coordinates of the polygonpolygon = np.array([[50,270], [220,160], [360,160], [480,270]])# fill polygon with onescv2.fillConvexPoly(stencil, polygon, 1)# plot polygonplt.figure(figsize=(10,10))plt.imshow(stencil, cmap= "gray")plt.show()
無人駕駛項目實戰:使用OpenCV進行實時車道檢測

 

# Apply polygon as a mask on the frameimg = cv2.bitwise_and(col_images[idx][:,:,0], col_images[idx][:,:,0], mask=stencil)# plot masked frameplt.figure(figsize=(10,10))plt.imshow(img, cmap= "gray")plt.show()
無人駕駛項目實戰:使用OpenCV進行實時車道檢測

 

圖像預處理

我們必須對視頻幀執行幾個圖像預處理操作,以檢測所需的車道。預處理操作為:

1. 圖像閾值處理

2. 霍夫線變換

1.圖像閾值處理

# get file names of framescol_frames = os.listdir('frames/')col_frames.sort(key=lambda f: int(re.sub('D', '', f)))# load framescol_images=[]
無人駕駛項目實戰:使用OpenCV進行實時車道檢測

 

2. 霍夫線變換

lines = cv2.HoughLinesP(thresh, 1, np.pi/180, 30, maxLineGap=200)# create a copy of the original framedmy = col_images[idx][:,:,0].copy()# draw Hough linesfor line in lines:  x1, y1, x2, y2 = line[0]  cv2.line(dmy, (x1, y1), (x2, y2), (255, 0, 0), 3)# plot frameplt.figure(figsize=(10,10))plt.imshow(dmy, cmap= "gray")plt.show()
無人駕駛項目實戰:使用OpenCV進行實時車道檢測

 

現在,我們將所有這些操作應用于每個幀。我們還將結果幀保存在新目錄中:

cnt = 0for img in tqdm_notebook(col_images):  # apply frame mask  masked = cv2.bitwise_and(img[:,:,0], img[:,:,0], mask=stencil)  # apply image thresholding  ret, thresh = cv2.threshold(masked, 130, 145, cv2.THRESH_BINARY)  # apply Hough Line Transformation  lines = cv2.HoughLinesP(thresh, 1, np.pi/180, 30, maxLineGap=200)  dmy = img.copy()  # Plot detected lines  try:    for line in lines:      x1, y1, x2, y2 = line[0]      cv2.line(dmy, (x1, y1), (x2, y2), (255, 0, 0), 3)    cv2.imwrite('detected/'+str(cnt)+'.png',dmy)  except TypeError:     cv2.imwrite('detected/'+str(cnt)+'.png',img)  cnt+= 1

視頻預處理

# input frames pathpathIn= 'detected/'# output path to save the videopathOut = 'roads_v2.mp4'# specify frames per secondfps = 30.0from os.path import isfile, join# get file names of the framesfiles = [f for f in os.listdir(pathIn) if isfile(join(pathIn, f))]files.sort(key=lambda f: int(re.sub('D', '', f)))

接下來,我們將所有包含檢測到的車道的幀放入列表中:

frame_list = []for i in tqdm_notebook(range(len(files))):    filename=pathIn + files[i]    #reading each files    img = cv2.imread(filename)    height, width, layers = img.shape    size = (width,height)    #inserting the frames into an image array    frame_list.append(img)

最后,我們現在可以使用以下代碼將幀組合成視頻:

# write the videoout = cv2.VideoWriter(pathOut,cv2.VideoWriter_fourcc(*'DIVX'), fps, size)for i in range(len(frame_array)):    # writing to a image array    out.write(frame_array[i])out.release()

搞定!這就是你的Python車道檢測系統。

總結

在本教程中,我們介紹了一種簡單的車道檢測技術。我們沒有使用任何模型或復雜的圖像功能。相反,我們的解決方案僅基于某些圖像預處理操作。

但是,在許多情況下,此解決方案將不起作用。例如,當沒有車道標記或道路上的交通過多時,該系統將發生故障。在車道檢測中有更復雜的方法可以克服此類問題。如果你對自動駕駛汽車的概念感興趣,我希望你繼續探索這個話題。

原文標題:

Hands-On Tutorial on Real-Time Lane Detection using OpenCV (Self-Driving Car Project!)

原文鏈接:

https://www.analyticsvidhya.com/blog/2020/05/tutorial-real-time-lane-detection-opencv/

編輯:于騰凱

校對:呂艷芹

譯者簡介

無人駕駛項目實戰:使用OpenCV進行實時車道檢測

 

張若楠,UIUC統計研究生畢業,南加州傳媒行業data scientist。曾實習于國內外商業銀行,互聯網,零售行業以及食品公司,喜歡接觸不同領域的數據分析與應用案例,對數據科學產品研發有很大熱情。

 

分享到:
標簽:無人駕駛
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定