国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

【深度學(xué)習(xí)】實(shí)戰(zhàn)教程 | 車道線檢測(cè)項(xiàng)目實(shí)戰(zhàn),霍夫變換 & 新方法 Spatial CNN

共 19151字,需瀏覽 39分鐘

 ·

2021-05-15 16:16

此文按照這樣的邏輯進(jìn)行撰寫。分享機(jī)器學(xué)習(xí)、計(jì)算機(jī)視覺的基礎(chǔ)知識(shí),接著我們以一個(gè)實(shí)際的項(xiàng)目,帶領(lǐng)大家自己動(dòng)手實(shí)踐。最后,分享更多學(xué)習(xí)資料、進(jìn)階項(xiàng)目實(shí)戰(zhàn),這部分屬于我CSDN上的專欄,最后會(huì)按照順序給出相應(yīng)的鏈接,供大家選擇學(xué)習(xí)。

理論篇:算法基礎(chǔ)(可選擇后看)

本專欄所涉及的項(xiàng)目所需機(jī)器學(xué)習(xí)/圖像處理知識(shí)并不深入,但我之前在CSDN也開設(shè)了《機(jī)器學(xué)習(xí)算法講解與Python實(shí)現(xiàn)》《計(jì)算機(jī)視覺前沿論文研讀》兩個(gè)專欄。一個(gè)更偏算法理論,一個(gè)則關(guān)注于計(jì)算機(jī)視覺頂會(huì)的前沿論文成果,解讀新的方法和Idea。

《機(jī)器學(xué)習(xí)算法講解與Python實(shí)現(xiàn)》

該專欄分類講解機(jī)器學(xué)習(xí)算法原理,深度解析決策樹、貝葉斯算法、邏輯回歸、梯度下降、集成學(xué)習(xí)、k最近鄰、支持向量機(jī)等,并給出Python實(shí)現(xiàn)源程序,同時(shí)分享以實(shí)戰(zhàn)為導(dǎo)向的Kaggle進(jìn)階指南。

  • 專欄鏈接 https://blog.csdn.net/charmve/category_9657673.html


《計(jì)算機(jī)視覺前沿論文研讀》

研讀計(jì)算機(jī)視覺頂會(huì)論文,CVPR、ECCV、ICCV等,也有部分項(xiàng)目開源到Github上,論文、源碼、數(shù)據(jù)集。

鏈接:https://github.com/Charmve/Mirror-Glass-Detection

  • 專欄鏈接 https://blog.csdn.net/charmve/category_10281912_2.html


計(jì)算機(jī)視覺實(shí)戰(zhàn) | 練手項(xiàng)目,開放源碼

知乎上收到了太多人給我的私信,想找可以具體操作的機(jī)器視覺項(xiàng)目,回復(fù)的時(shí)候總是零零散散,我經(jīng)過大半年的收集整理,現(xiàn)完成此專欄。例如手寫字識(shí)別、人臉識(shí)別、表情識(shí)別、圖像分割、表面缺陷檢測(cè)、車道線檢測(cè)、車輛可通行區(qū)域檢測(cè)等項(xiàng)目,提供完整指導(dǎo)文檔和開源代碼…

  • 專欄鏈接 https://blog.csdn.net/charmve/category_10595130.html

實(shí)戰(zhàn)案例(本文核心)

為什么說上述兩個(gè)關(guān)于機(jī)器學(xué)習(xí)基礎(chǔ)的專欄可以跳過?我的考慮是,如果對(duì)于機(jī)器學(xué)習(xí)剛?cè)腴T的同學(xué),直接上手算法理論,公式推導(dǎo)很容易消耗我們的學(xué)習(xí)熱情和積極性;另外,對(duì)于一些非研究人員,我們做項(xiàng)目的直接目的是能跑出實(shí)驗(yàn)結(jié)果,一開始就帶著工程思維去學(xué)習(xí),效率會(huì)很高,學(xué)習(xí)的積極性也容易保持。這也是當(dāng)前很多模型都已在相應(yīng)的深度學(xué)習(xí)框架下集成了模塊和函數(shù)庫(kù)。而對(duì)于剩余一部分,可能需要重新回顧上述兩章內(nèi)容,深入理解算法原理,對(duì)算法性能的提升、模型的壓縮優(yōu)化都是很有必要的。

在某些情況下,直接調(diào)用已經(jīng)搭好的模型可能是非常方便且有效的,比如Caffe、TensorFlow工具箱,但這些工具箱需要的硬件資源比較多,不利于初學(xué)者實(shí)踐和理解。因此,為了更好的理解并掌握相關(guān)知識(shí),最好是能夠自己編程實(shí)踐下。本文將展示計(jì)算機(jī)時(shí)如何識(shí)別車道線的。

Waymo的自動(dòng)駕駛出租車服務(wù)本月已經(jīng)上路,但是自動(dòng)駕駛汽車是如何工作的?道路上的線條向駕駛員指示了車道所在的位置,并作為相應(yīng)方向引導(dǎo)車輛的方向的指導(dǎo)性參考,并約定了車輛代理如何在道路上和諧地行駛。 同樣,識(shí)別和跟蹤車道的能力對(duì)于開發(fā)無(wú)人駕駛車輛算法至關(guān)重要。

在本教程中,我們將學(xué)習(xí)如何使用計(jì)算機(jī)視覺技術(shù)來編寫車道線實(shí)時(shí)檢測(cè)程序。我們將通過兩種不同的方法來完成這項(xiàng)任務(wù),從實(shí)際的算法編寫流程帶領(lǐng)大家從實(shí)現(xiàn)到優(yōu)化的過程。

方法1:霍夫變換

大多數(shù)車道的設(shè)計(jì)都相對(duì)簡(jiǎn)單明了,不僅可以鼓勵(lì)交通秩序井然,還可以使駕駛員更輕松地以恒定的速度駕駛車輛。因此,我們的直觀方法可能是首先通過邊緣檢測(cè)特征提取技術(shù)來檢測(cè)攝像機(jī)饋送中的突出直線。我們將使用OpenCV(一種計(jì)算機(jī)視覺算法的開源庫(kù))來實(shí)現(xiàn)。下圖是我們算法流程的概述。

1.設(shè)置環(huán)境

如果您尚未安裝OpenCV,請(qǐng)打開“終端”并運(yùn)行以安裝它:

pip install opencv-python

現(xiàn)在,通過運(yùn)行以下命令來clone本項(xiàng)目的實(shí)踐代碼:

git clone https://github.com/Charmve/Awesome-Lane-Detection.git

接下來,進(jìn)入lane-detector文件夾

cd lane-detector

使用文本編輯器打開detector.py。我們將在此Python文件中編寫本節(jié)的所有代碼。

2.處理視頻

我們將以10毫秒為間隔的一系列連續(xù)幀(圖像)輸入用于車道檢測(cè)的示例視頻。我們也可以隨時(shí)按“ q”鍵退出程序。

import cv2 as cv
# The video feed is read in as a VideoCapture objectcap = cv.VideoCapture("input.mp4")while (cap.isOpened()): # ret = a boolean return value from getting the frame, frame = the current frame being projected in the video ret, frame = cap.read() # Frames are read by intervals of 10 milliseconds. The programs breaks out of the while loop when the user presses the 'q' key if cv.waitKey(10) & 0xFF == ord('q'): break
# The following frees up resources and closes all windowscap.release()cv.destroyAllWindows()

3.應(yīng)用Canny Detector

Canny Detector是為快速實(shí)時(shí)邊緣檢測(cè)而優(yōu)化的多階段算法。該算法的基本目標(biāo)是檢測(cè)亮度的急劇變化(大梯度),例如從白色到黑色的變化,并在給定一組閾值的情況下將它們定義為邊緣。

Canny算法有四個(gè)主要階段:

A.降噪

與所有邊緣檢測(cè)算法一樣,噪聲是一個(gè)關(guān)鍵問題,通常會(huì)導(dǎo)致錯(cuò)誤檢測(cè)。應(yīng)用5x5高斯濾波器對(duì)圖像進(jìn)行卷積(平滑),以降低檢測(cè)器對(duì)噪聲的敏感度。這是通過使用正態(tài)分布數(shù)的內(nèi)核(在本例中為5x5內(nèi)核)在整個(gè)圖像上運(yùn)行來完成的,將每個(gè)像素值設(shè)置為等于其相鄰像素的加權(quán)平均值。

 

5x5高斯核,星號(hào)“*”表示卷積運(yùn)算。

B.強(qiáng)度梯度

然后使用平滑化的圖像沿x軸和y軸應(yīng)用Sobel,Roberts或Prewitt內(nèi)核(OpenCV中使用了Sobel),以檢測(cè)邊緣是水平,垂直還是對(duì)角線。(在這里你可以先不用管Sobel,Roberts或Prewitt內(nèi)核,他們是什么。) 

 

Sobel內(nèi)核,用于計(jì)算水平和垂直方向的一階導(dǎo)數(shù)

C.非最大抑制

非最大抑制可應(yīng)用于削“薄(thin)”并有效銳化邊緣。對(duì)于每個(gè)像素,檢查該值是否在先前計(jì)算的漸變方向上是局部最大值。 

 

三點(diǎn)非最大抑制

A在具有垂直方向的邊緣上。由于梯度垂直于邊緣方向,因此將B和C的像素值與A的像素值進(jìn)行比較,以確定A是否為局部最大值。如果A是局部最大值,則對(duì)下一個(gè)點(diǎn)測(cè)試非最大值抑制;否則,將A的像素值設(shè)置為零,并抑制A。

D.磁滯閾值

在非最大抑制之后,確認(rèn)強(qiáng)像素位于邊緣的最終貼圖中。但是,應(yīng)進(jìn)一步分析弱像素,以確定其構(gòu)成為邊緣還是噪聲。應(yīng)用兩個(gè)預(yù)定義的minVal和maxVal閾值,我們?cè)O(shè)置強(qiáng)度梯度大于maxVal的任何像素為邊緣,強(qiáng)度梯度小于minVal的任何像素都不為邊緣并丟棄。如果亮度梯度介于minVal和maxVal之間的像素連接到強(qiáng)度梯度大于maxVal的像素,則僅將其視為邊緣。

  

圖1 兩行磁滯閾值示例

邊緣A高于maxVal,因此被視為邊緣。邊緣B在maxVal和minVal之間,但未連接到maxVal以上的任何邊緣,因此將其丟棄。邊緣C在maxVal和minVal之間,并連接到邊緣A,即maxVal之上的邊緣,因此被視為邊緣

對(duì)于該算法流程,我們首先要對(duì)視頻幀進(jìn)行灰度處理,因?yàn)槲覀冎恍枰糜跈z測(cè)邊緣的亮度通道,并應(yīng)用5 x 5高斯模糊來減少噪聲以減少虛假邊緣。

# import cv2 as cv
def do_canny(frame): # Converts frame to grayscale because we only need the luminance channel for detecting edges - less computationally expensive gray = cv.cvtColor(frame, cv.COLOR_RGB2GRAY) # Applies a 5x5 gaussian blur with deviation of 0 to frame - not mandatory since Canny will do this for us blur = cv.GaussianBlur(gray, (5, 5), 0) # Applies Canny edge detector with minVal of 50 and maxVal of 150 canny = cv.Canny(blur, 50, 150) return canny
# cap = cv.VideoCapture("input.mp4")# while (cap.isOpened()):# ret, frame = cap.read()
canny = do_canny(frame)
# if cv.waitKey(10) & 0xFF == ord('q'):# break
# cap.release()# cv.destroyAllWindows()

4.分割車道區(qū)域

我們將手工制作一個(gè)三角形的蒙版,以分割車道區(qū)域,并丟棄車架中無(wú)關(guān)的區(qū)域,以提高我們后期的效率。  三角形遮罩將由三個(gè)坐標(biāo)定義,用綠色圓圈表示。

# import cv2 as cvimport numpy as npimport matplotlib.pyplot as plt
# def do_canny(frame):# gray = cv.cvtColor(frame, cv.COLOR_RGB2GRAY)# blur = cv.GaussianBlur(gray, (5, 5), 0)# canny = cv.Canny(blur, 50, 150)# return canny
def do_segment(frame): # Since an image is a multi-directional array containing the relative intensities of each pixel in the image, we can use frame.shape to return a tuple: [number of rows, number of columns, number of channels] of the dimensions of the frame # frame.shape[0] give us the number of rows of pixels the frame has. Since height begins from 0 at the top, the y-coordinate of the bottom of the frame is its height height = frame.shape[0] # Creates a triangular polygon for the mask defined by three (x, y) coordinates polygons = np.array([ [(0, height), (800, height), (380, 290)] ]) # Creates an image filled with zero intensities with the same dimensions as the frame mask = np.zeros_like(frame) # Allows the mask to be filled with values of 1 and the other areas to be filled with values of 0 cv.fillPoly(mask, polygons, 255) # A bitwise and operation between the mask and frame keeps only the triangular area of the frame segment = cv.bitwise_and(frame, mask) return segment
# cap = cv.VideoCapture("input.mp4")# while (cap.isOpened()):# ret, frame = cap.read() # canny = do_canny(frame)
# First, visualize the frame to figure out the three coordinates defining the triangular mask plt.imshow(frame) plt.show() segment = do_segment(canny)
# if cv.waitKey(10) & 0xFF == ord('q'):# break
# cap.release()# cv.destroyAllWindows()

5.霍夫變換

在笛卡爾坐標(biāo)系中,通過將y相對(duì)于x繪制,可以將一條直線表示為y = mx + b。但是,我們也可以通過將b相對(duì)于m繪制,將該線表示為Hough Space 霍夫空間中的單個(gè)點(diǎn)。例如,在霍夫空間中,具有等式y(tǒng) = 2x +1的線可以表示為(2,1)。

現(xiàn)在,如果要代替直線,我們必須在笛卡爾坐標(biāo)系中繪制一個(gè)點(diǎn)。有許多可能的線可以通過此點(diǎn),每條線的參數(shù)m和b的值均不同。例如,可以通過y = 2x + 8,y = 3x + 6,y = 4x + 4,y = 5x + 2,y = 6x來傳遞 (2,12) 點(diǎn)。這些可能的線可以在Hough空間中繪制為(2,8),(3,6),(4,4),(5,2),(6,0)。請(qǐng)注意,這會(huì)在Hough空間中針對(duì)b坐標(biāo)生成一條m線。

每當(dāng)我們看到笛卡爾坐標(biāo)系中的一系列點(diǎn)并且知道這些點(diǎn)由某條線連接時(shí),我們就可以通過首先將笛卡爾坐標(biāo)系中的每個(gè)點(diǎn)繪制到Hough空間中的對(duì)應(yīng)線上,然后找到該線的方程。在霍夫空間中找到交點(diǎn)。霍夫空間中的交點(diǎn)表示連續(xù)通過序列中所有點(diǎn)的m和b值。

由于通過Canny Detector的幀可以簡(jiǎn)單地解釋為代表我們圖像空間中邊緣的一系列白點(diǎn),因此我們可以應(yīng)用相同的技術(shù)來識(shí)別這些點(diǎn)中的哪些連接到同一條線上,以及它們是否已連接,它的等式是什么,以便我們可以在框架上繪制這條線。

為了簡(jiǎn)化說明,我們使用笛卡爾坐標(biāo)來對(duì)應(yīng)霍夫空間。但是,這種方法存在一個(gè)數(shù)學(xué)缺陷:當(dāng)直線垂直時(shí),漸變?yōu)闊o(wú)窮大,無(wú)法在霍夫空間中表示。 為了解決這個(gè)問題,我們將使用極坐標(biāo)。除了在霍夫空間中將m相對(duì)于b繪制之外,該過程仍然相同,我們將r相對(duì)于θ進(jìn)行繪制。

例如,對(duì)于極坐標(biāo)系上x = 8y = 6,x = 4y = 9,x = 12y = 3的點(diǎn),我們可以繪制相應(yīng)的霍夫空間。 

我們看到,霍夫空間中的線在θ= 0.925r = 9.6處相交。由于極坐標(biāo)系中的一條線由r =xcosθ+ysinθ給出,因此我們可以得出一條穿過所有這些點(diǎn)的單線定義為9.6 = xcos0.925 + ysin0.925

通常,在霍夫空間中相交的曲線越多,意味著該相交所代表的線對(duì)應(yīng)于更多的點(diǎn)。對(duì)于我們的實(shí)現(xiàn),我們將在霍夫空間中定義一個(gè)最小閾值交叉點(diǎn)以檢測(cè)一條線。因此,霍夫變換基本上可以跟蹤幀中每個(gè)點(diǎn)的霍夫空間相交。如果交叉點(diǎn)的數(shù)量超過定義的閾值,我們將確定一條具有相應(yīng)θ和r參數(shù)的線。

我們應(yīng)用霍夫變換來識(shí)別兩條直線,這將是我們的左右車道邊界。

import cv2 as cv# import numpy as np# # import matplotlib.pyplot as plt
# def do_canny(frame):# gray = cv.cvtColor(frame, cv.COLOR_RGB2GRAY)# blur = cv.GaussianBlur(gray, (5, 5), 0)# canny = cv.Canny(blur, 50, 150)# return canny
# def do_segment(frame):# height = frame.shape[0]# polygons = np.array([# [(0, height), (800, height), (380, 290)]# ])# mask = np.zeros_like(frame)# cv.fillPoly(mask, polygons, 255)# segment = cv.bitwise_and(frame, mask)# return segment
# cap = cv.VideoCapture("input.mp4")# while (cap.isOpened()):# ret, frame = cap.read()# canny = do_canny(frame)# # plt.imshow(frame)# # plt.show()# segment = do_segment(canny)
# cv.HoughLinesP(frame, distance resolution of accumulator in pixels (larger = less precision), angle resolution of accumulator in radians (larger = less precision), threshold of minimum number of intersections, empty placeholder array, minimum length of line in pixels, maximum distance in pixels between disconnected lines) hough = cv.HoughLinesP(segment, 2, np.pi / 180, 100, np.array([]), minLineLength = 100, maxLineGap = 50)
# if cv.waitKey(10) & 0xFF == ord('q'):# break
# cap.release()# cv.destroyAllWindows()

6.可視化

車道顯示為兩個(gè)淺綠色,線性擬合的多項(xiàng)式,這些多項(xiàng)式將覆蓋在我們的輸入框中。

# import cv2 as cv# import numpy as np# # import matplotlib.pyplot as plt
# def do_canny(frame):# gray = cv.cvtColor(frame, cv.COLOR_RGB2GRAY)# blur = cv.GaussianBlur(gray, (5, 5), 0)# canny = cv.Canny(blur, 50, 150)# return canny
# def do_segment(frame):# height = frame.shape[0]# polygons = np.array([# [(0, height), (800, height), (380, 290)]# ])# mask = np.zeros_like(frame)# cv.fillPoly(mask, polygons, 255)# segment = cv.bitwise_and(frame, mask)# return segment
def calculate_lines(frame, lines): # Empty arrays to store the coordinates of the left and right lines left = [] right = [] # Loops through every detected line for line in lines: # Reshapes line from 2D array to 1D array x1, y1, x2, y2 = line.reshape(4) # Fits a linear polynomial to the x and y coordinates and returns a vector of coefficients which describe the slope and y-intercept parameters = np.polyfit((x1, x2), (y1, y2), 1) slope = parameters[0] y_intercept = parameters[1] # If slope is negative, the line is to the left of the lane, and otherwise, the line is to the right of the lane if slope < 0: left.append((slope, y_intercept)) else: right.append((slope, y_intercept)) # Averages out all the values for left and right into a single slope and y-intercept value for each line left_avg = np.average(left, axis = 0) right_avg = np.average(right, axis = 0) # Calculates the x1, y1, x2, y2 coordinates for the left and right lines left_line = calculate_coordinates(frame, left_avg) right_line = calculate_coordinates(frame, right_avg) return np.array([left_line, right_line])
def calculate_coordinates(frame, parameters): slope, intercept = parameters # Sets initial y-coordinate as height from top down (bottom of the frame) y1 = frame.shape[0] # Sets final y-coordinate as 150 above the bottom of the frame y2 = int(y1 - 150) # Sets initial x-coordinate as (y1 - b) / m since y1 = mx1 + b x1 = int((y1 - intercept) / slope) # Sets final x-coordinate as (y2 - b) / m since y2 = mx2 + b x2 = int((y2 - intercept) / slope) return np.array([x1, y1, x2, y2])
def visualize_lines(frame, lines): # Creates an image filled with zero intensities with the same dimensions as the frame lines_visualize = np.zeros_like(frame) # Checks if any lines are detected if lines is not None: for x1, y1, x2, y2 in lines: # Draws lines between two coordinates with green color and 5 thickness cv.line(lines_visualize, (x1, y1), (x2, y2), (0, 255, 0), 5) return lines_visualize
# cap = cv.VideoCapture("input.mp4")# while (cap.isOpened()):# ret, frame = cap.read()# canny = do_canny(frame)# # plt.imshow(frame)# # plt.show()# segment = do_segment(canny)# hough = cv.HoughLinesP(segment, 2, np.pi / 180, 100, np.array([]), minLineLength = 100, maxLineGap = 50)
# Averages multiple detected lines from hough into one line for left border of lane and one line for right border of lane lines = calculate_lines(frame, hough) # Visualizes the lines lines_visualize = visualize_lines(frame, lines) # Overlays lines on frame by taking their weighted sums and adding an arbitrary scalar value of 1 as the gamma argument output = cv.addWeighted(frame, 0.9, lines_visualize, 1, 1) # Opens a new window and displays the output frame cv.imshow("output", output)
# if cv.waitKey(10) & 0xFF == ord('q'):# break
# cap.release()# cv.destroyAllWindows()

現(xiàn)在,打開Terminal并運(yùn)行pythondetector.py來測(cè)試您的簡(jiǎn)單車道檢測(cè)器!如果您錯(cuò)過任何代碼,這是帶有注釋的完整解決方案:

import cv2 as cvimport numpy as np# import matplotlib.pyplot as plt
def do_canny(frame): # Converts frame to grayscale because we only need the luminance channel for detecting edges - less computationally expensive gray = cv.cvtColor(frame, cv.COLOR_RGB2GRAY) # Applies a 5x5 gaussian blur with deviation of 0 to frame - not mandatory since Canny will do this for us blur = cv.GaussianBlur(gray, (5, 5), 0) # Applies Canny edge detector with minVal of 50 and maxVal of 150 canny = cv.Canny(blur, 50, 150) return canny
def do_segment(frame): # Since an image is a multi-directional array containing the relative intensities of each pixel in the image, we can use frame.shape to return a tuple: [number of rows, number of columns, number of channels] of the dimensions of the frame # frame.shape[0] give us the number of rows of pixels the frame has. Since height begins from 0 at the top, the y-coordinate of the bottom of the frame is its height height = frame.shape[0] # Creates a triangular polygon for the mask defined by three (x, y) coordinates polygons = np.array([ [(0, height), (800, height), (380, 290)] ]) # Creates an image filled with zero intensities with the same dimensions as the frame mask = np.zeros_like(frame) # Allows the mask to be filled with values of 1 and the other areas to be filled with values of 0 cv.fillPoly(mask, polygons, 255) # A bitwise and operation between the mask and frame keeps only the triangular area of the frame segment = cv.bitwise_and(frame, mask) return segment
def calculate_lines(frame, lines): # Empty arrays to store the coordinates of the left and right lines left = [] right = [] # Loops through every detected line for line in lines: # Reshapes line from 2D array to 1D array x1, y1, x2, y2 = line.reshape(4) # Fits a linear polynomial to the x and y coordinates and returns a vector of coefficients which describe the slope and y-intercept parameters = np.polyfit((x1, x2), (y1, y2), 1) slope = parameters[0] y_intercept = parameters[1] # If slope is negative, the line is to the left of the lane, and otherwise, the line is to the right of the lane if slope < 0: left.append((slope, y_intercept)) else: right.append((slope, y_intercept)) # Averages out all the values for left and right into a single slope and y-intercept value for each line left_avg = np.average(left, axis = 0) right_avg = np.average(right, axis = 0) # Calculates the x1, y1, x2, y2 coordinates for the left and right lines left_line = calculate_coordinates(frame, left_avg) right_line = calculate_coordinates(frame, right_avg) return np.array([left_line, right_line])
def calculate_coordinates(frame, parameters): slope, intercept = parameters # Sets initial y-coordinate as height from top down (bottom of the frame) y1 = frame.shape[0] # Sets final y-coordinate as 150 above the bottom of the frame y2 = int(y1 - 150) # Sets initial x-coordinate as (y1 - b) / m since y1 = mx1 + b x1 = int((y1 - intercept) / slope) # Sets final x-coordinate as (y2 - b) / m since y2 = mx2 + b x2 = int((y2 - intercept) / slope) return np.array([x1, y1, x2, y2])
def visualize_lines(frame, lines): # Creates an image filled with zero intensities with the same dimensions as the frame lines_visualize = np.zeros_like(frame) # Checks if any lines are detected if lines is not None: for x1, y1, x2, y2 in lines: # Draws lines between two coordinates with green color and 5 thickness cv.line(lines_visualize, (x1, y1), (x2, y2), (0, 255, 0), 5) return lines_visualize
# The video feed is read in as a VideoCapture objectcap = cv.VideoCapture("input.mp4")while (cap.isOpened()): # ret = a boolean return value from getting the frame, frame = the current frame being projected in the video ret, frame = cap.read() canny = do_canny(frame) cv.imshow("canny", canny) # plt.imshow(frame) # plt.show() segment = do_segment(canny) hough = cv.HoughLinesP(segment, 2, np.pi / 180, 100, np.array([]), minLineLength = 100, maxLineGap = 50) # Averages multiple detected lines from hough into one line for left border of lane and one line for right border of lane lines = calculate_lines(frame, hough) # Visualizes the lines lines_visualize = visualize_lines(frame, lines) cv.imshow("hough", lines_visualize) # Overlays lines on frame by taking their weighted sums and adding an arbitrary scalar value of 1 as the gamma argument output = cv.addWeighted(frame, 0.9, lines_visualize, 1, 1) # Opens a new window and displays the output frame cv.imshow("output", output) # Frames are read by intervals of 10 milliseconds. The programs breaks out of the while loop when the user presses the 'q' key if cv.waitKey(10) & 0xFF == ord('q'): break# The following frees up resources and closes all windowscap.release()cv.destroyAllWindows()


方法2:Spatial CNN

方法1中這種相當(dāng)手工制作的傳統(tǒng)方法似乎運(yùn)行得很好……至少對(duì)于清晰的直行道路而言,是的。

但是,此方法也很明顯,它會(huì)在彎道或急轉(zhuǎn)彎時(shí)立即中斷。此外,我們注意到,由車道上的直線組成的標(biāo)記(如涂上的箭頭標(biāo)志)的存在可能會(huì)不時(shí)使車道檢測(cè)器感到困惑,這從演示渲染中的毛刺中可以明顯看出。克服此問題的一種方法可能是將三角形蒙版進(jìn)一步細(xì)化為兩個(gè)單獨(dú)的更精確的蒙版。 但是,這些相當(dāng)隨意的蒙版參數(shù)根本無(wú)法適應(yīng)各種變化的道路環(huán)境。另一個(gè)缺點(diǎn)是,帶點(diǎn)標(biāo)記或根本沒有清晰標(biāo)記的車道也會(huì)被車道檢測(cè)器忽略,因?yàn)椴淮嬖跐M足霍夫變換閾值的連續(xù)直線。最后,影響線路可見度的天氣和照明條件也可能是一個(gè)問題。

1.Architecture

盡管卷積神經(jīng)網(wǎng)絡(luò)(CNN)已被證明是識(shí)別較低圖像層的簡(jiǎn)單特征(例如邊緣,顏色漸變)以及更深層次的復(fù)雜特征和實(shí)體(例如對(duì)象識(shí)別)的有效架構(gòu),但它們常常難以代表這些特征和實(shí)體的“姿勢(shì)”——也就是說,CNN非常適合從原始像素中提取語(yǔ)義,但是在捕獲幀中像素的空間關(guān)系(例如旋轉(zhuǎn)和平移關(guān)系)時(shí)表現(xiàn)不佳。但是,這些空間關(guān)系對(duì)于車道檢測(cè)任務(wù)很重要,在車道檢測(cè)中,先驗(yàn)形狀較強(qiáng),而外觀連貫性較弱。

例如,很難通過提取語(yǔ)義特征來確定交通標(biāo)志,因?yàn)榻煌?biāo)志缺乏明顯和連貫的外觀提示,并且經(jīng)常被遮擋。 

左上方圖像右側(cè)的汽車和左下方圖像右側(cè)的摩托車遮擋了右側(cè)車道標(biāo)記,并對(duì)CNN結(jié)果產(chǎn)生負(fù)面影響

但是,由于我們知道交通信號(hào)桿通常表現(xiàn)出相似的空間關(guān)系,例如垂直站立并放置在道路的左右兩側(cè),因此我們看到了增強(qiáng)空間信息的重要性。接下來是檢測(cè)車道的類似情況。

為了解決這個(gè)問題,Xingang Pan, Jianping Shi等人提出了一種架構(gòu)Spatial CNN(SCNN)“將傳統(tǒng)的深層逐層卷積概括為特征圖中的逐層卷積”。這是什么意思?在傳統(tǒng)的逐層CNN中,每個(gè)卷積層都從其前一層接收輸入,進(jìn)行卷積和非線性激活,然后將輸出發(fā)送到下一層。SCNN通過將各個(gè)要素地圖的行和列視為“”,進(jìn)一步采取了這一步驟,并依次應(yīng)用了相同的過程(其中順序表示切片僅在從先前切片接收到信息之后才將信息傳遞給后續(xù)切片),允許像素信息在同一層內(nèi)的神經(jīng)元之間傳遞消息,從而有效地增加了對(duì)空間信息的重視。

SCNN還相對(duì)較新,發(fā)布于2018年,但已經(jīng)跑贏了ReNet(RNN),MRFNet(MRF + CNN),更深入的ResNet架構(gòu)之類,并以96.53% 的準(zhǔn)確性在TuSimple基準(zhǔn)測(cè)試車道檢測(cè)挑戰(zhàn)賽中排名第一。

此外,除了SCNN的發(fā)布之外,作者還發(fā)布了CULane Dataset,這是一個(gè)大規(guī)模數(shù)據(jù)集,帶有帶有立方棘刺的行車道注釋。CULane數(shù)據(jù)集還包含許多具有挑戰(zhàn)性的場(chǎng)景,包括遮擋和變化的照明條件。

2.模型

車道檢測(cè)需要精確的像素識(shí)別和車道曲線預(yù)測(cè)。SCNN的作者沒有直接訓(xùn)練車道的存在并隨后進(jìn)行聚類,而是將藍(lán)色,綠色,紅色和黃色的車道標(biāo)記視為四個(gè)單獨(dú)的類。該模型為每個(gè)曲線輸出概率圖(概率圖),類似于語(yǔ)義分割任務(wù),然后將概率圖通過一個(gè)小型網(wǎng)絡(luò)傳遞,以預(yù)測(cè)最終的立方棘。該模型基于DeepLab-LargeFOV模型變體。

  • GitHub 鏈接 | https://github.com/XingangPan/SCNN 

對(duì)于存在值超過0.5的每個(gè)車道標(biāo)記,將以20行間隔搜索對(duì)應(yīng)的概率圖,以找到響應(yīng)度最高的位置。為了確定是否檢測(cè)到車道標(biāo)記,計(jì)算地面真相(正確標(biāo)簽)和預(yù)測(cè)之間的“聯(lián)合路口”(IoU),其中將高于設(shè)置閾值的IoU評(píng)估為“真陽(yáng)性”(TP),以計(jì)算精度和記起。

3.測(cè)試和訓(xùn)練

全部代碼已經(jīng)上傳至Github上,您可以按照此倉(cāng)庫(kù)在SCNN論文中重現(xiàn)結(jié)果,或使用CULane數(shù)據(jù)集測(cè)試您自己的模型。

?? 車道線檢測(cè)項(xiàng)目論文和數(shù)據(jù)集 https://github.com/Charmve/Awesome-Lane-Detection


總結(jié)

就是這樣!??希望本教程向您展示了如何使用涉及許多手工功能和微調(diào)的傳統(tǒng)方法來構(gòu)建簡(jiǎn)單的車道檢測(cè)器,并且還向您介紹了一種替代方法,該方法遵循了解決幾乎所有類型的車輛的最新趨勢(shì)。計(jì)算機(jī)視覺問題:您可以為此添加卷積神經(jīng)網(wǎng)絡(luò)!


更多精彩學(xué)習(xí)資料,承諾大家的,一個(gè)也不會(huì)少,我分類整理好并附上鏈接。

  • GitHub上開源:https://github.com/Charmve/computer-vision-in-action


往期精彩回顧





本站qq群851320808,加入微信群請(qǐng)掃碼:

瀏覽 73
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)
評(píng)論
圖片
表情
推薦
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 中文字幕乱码免费综合久久| 秋霞丝鲁片一区二区三区手机在绒免| 国产一精品| 99国产精品99久久久久久| 欧美三级欧美成人高清| 操逼视频网址| 精品亚洲一区二区三区四区五区| 亚洲欧美在线视频免费| 狠狠肏视频| 天天干天天操综合| 午夜亚洲| 青娱乐亚洲领先| 免费一级做a爱片毛片A片小说 | 婷婷五月免费视频| 国产毛片一照区| 伊人毛片| 伊人久久大香| 亚州精品人妻一二三区| 最新中文字幕免费MV第一季歌词| 欧美黄色三级视频| 国产五月天婷婷| yjizz视频网| 色综合九九| 黄色精品久久| 黑人又粗又大XXXXOO| 爽好紧别夹喷水欧美| 色女人天堂| 亚洲人妻无码在线| 青春草在线观看国产| 337P人体美鮑高清| 亚洲GV成人无码久久精品 | 乱伦综合网| 国产精品久久久久久精| 欧美成人免费在线| 色欲AV秘无码一区二区三区| 88AV在线观看| 国产1区在线观看| 国产乱伦精品视频| 亚洲AV无码乱码AV| 五月天婷婷操逼视频| 中文字幕无码不卡| 91搞搞| 国产无码激情| 成人AAA片| 久久精品女人| 天天日天天添| 91香蕉网站| 日韩精品一区二区三区四区蜜桃视频 | 搡bbb| 久久免费视频播放| 无码人妻在线| 中文字幕一区二区二三区四区| 探花在线综合| 中文字幕av免费观看| 91麻豆精品在线观看| 国精产品一二三区| 国产成人片在线观看| 操逼视频下载| 大香蕉青青| 色五月婷婷小说| 国产精品欧美性爱| 91网在线观看| 久久日韩无码| 中文字幕人成人乱| 一级黄色影院| 国产无遮挡又黄又爽又| 国产91黄色| 国产女人18毛片水真多18| 青青草做爱视频| 国产精品视频一区二区三区在线观看 | 国产一区在线看| 色色五月天网站| 99黄网| 亚洲天堂在线观看免费视频| gogogo日本免费观看高清电视剧的注意 | 国产a一级a毛一级视频| 日韩99热| 久久成人在线视频| 你懂的在线视频观看| 天天日夜夜撸| 在线免费AV片| 久久九九国产精品怡红院| 日本家庭乱伦视频| 黄色美女毛片| 亚洲成人h| 欧一美一婬一伦一区?| 最新亚洲无码在线观看| 国产综合无码| 亚洲在线一区二区| 免费在线观看A| 动漫一区二区| 美女乱伦视频| 国产黄色视屏| 激情五月天在线观看| 亚洲欧美日韩色图| 春宵福利导航| 欧美成人在线网站| 伊人自拍| 国产福利91精品一区二区三区| 国产高清无码视频在线观看| 日本中文在线| 黄色视频免费在线观看| 健身房被教练3p喷水了| 亚洲啊V| 一级视频免费观看| 国产伦精品一区二区三区色大师| 日韩黄色激情| 欧美一级黃色A片免费看蜜桃熟了| 在线观看精品视频| 亚洲一级二级三级片| 国产免费无码视频| 一本色综合亚洲精品| 91热热| 亚洲欧美国产毛片在线| 麻豆国产精品一区| 成人无码免费| 一级爱爱| 亚洲黄色电影| 国产绿奴09-01| av天天av无码av天天爽| 欧美一区二区精品| 国产午夜精品一区二区三区四区| 免费看操逼逼| 91狠狠色丁香婷婷综合久久精品| 男人天堂手机在线| 亚洲免费小视频| 淫香淫色综合网| 青青伊人网| 超碰中文字幕| 国产无码成人电影| 精品色片| 午夜亚洲AⅤ无码高潮片苍井空| 久久无码专区| 激情综合网五月| 操逼com| 99热99在线| 在线观看的av| 91精品又粗又猛又爽| 欧美日p| 国产精品无码成人AV电影| 三级片AV在线| 91丨九色丨老熟女探花| 成人黄色性爱视频| 91精品国产麻豆国产自产在线| 久久精品国产亚洲| 亚洲电影在线观看| 另类老妇性BBBWBBW| 色色视频免费看| 亚洲无码理论片| 国产亚洲99久久精品熟女| 亚洲日韩欧美中在线| 奇米97| 精品成人A片久久久久久不卡三区 免费看成人A片无码照片88hⅤ | 免费一级黄色毛片| 四虎无码视频| 亚洲vs无码秘蜜桃| 91超碰久久在线| 欧美不卡一区二区三区| 亚洲性爱自拍| 一级黄色A片| 青草午夜| 青青精品| 亚洲精品在线视频观看| 大香蕉免费在线观看| 毛片在线观看视频| 日韩精品久久| 亚洲免费观看| 欧美成人五月天| 蜜桃人妻无码AV天堂二区| 少妇搡BBBB搡BBB搡HD(| 美日韩免费视频| 永久免费视频| 99热久| 99热中文字幕在线观看| 久久先锋| 91色秘乱码一区二区| 久草青青草| 国产性爱AV| 亚洲美女喷水视频| 不卡视频一区二区| 波多野成人无码精品视频| 日韩一级网站| 无码av无码AV| www亚洲| 自拍偷拍激情视频| 青草青在线视频| 搞搞爱| 91AV在线播放| 无码成人在线观看| 超碰综合| 神马午夜秋霞不卡| 高清国产mv在线观看| 三级网站在线| 肉色超薄丝袜脚交一区二区| 久久久久久五月天| 欧美亚洲一区二区三区| 日韩一区二区三区在线| 欧美日韩国产不卡视频| 91女色| 久草青| 蜜臀久久| 亚洲天堂免费视频| 亚洲另类av| 在线视频一区二区| 欧美性爱五月天| www.高清无码| 懂色一区二区三区免费| 国产成人片在线观看| 欧美在线日韩| 精品国产91| 成人片天天看片欧美一级| AV婷婷在线| 97精品欧美91久久久久久久| 亚洲无码精品一区二区| 黄色三级片网站| 色天堂色男人| 91精品久久久久久久久久久久| 青青草免费观看视频| 91拍真实国产伦偷精品| 99re6热在线精品视频功能| 欧美成人综合一区| 中文在线字幕免费观看| 99视频内射三四| 成人免费毛片果冻日本| 蜜桃人妻无码AV天堂三区| 三级片网站在线播放| 国产在线第一页| 天天精品无码| eeuss在线| 美女天堂网| 亚洲欧美中文字幕| 啪啪啪网址| 免费黄色视频在线| 成人小视频在线观看| 久久亚洲日韩天天做日日做综合亚洲| 亚洲天堂国产视频| 18禁黄色免费网站| 国产www| 尤物看片| 久久精品无码视频| 操逼一级片| 成人午夜A片免费看| 怡春院院成人免费视频| 黑人无码AV黑人天堂无码AV| 久久精彩偷拍视频| 99高清国产| 黄色激情在线| a在线观看| 18禁AV在线| 亚洲国产精品成人综合| 最近中文字幕免费mv第一季歌词強上| www.黄色在线| 精品www| 国产av影视| 中国人妻HDbute熟睡| 精产国品一区二区三区| 日本操逼网站| 乱子伦一区二区三区视频在线观看| 亚洲秘无码一区二区三区| 操逼视频在线看| 亚洲色播放| 伊人大香蕉视频在线观看| 99久在线精品99re8热| 91国黄色毛片在线观看| 久久久高清无码视频| Chinese搡老女人| 日韩理论片| 亚洲在线观看免费| 啪啪毛片| 色94色.欧美.setu| 91在线视频免费| jjzz亚洲| 在线观看免费欧美操逼视频| 草逼动态图| 豆花AV| 青娱乐国产精品| 草莓av| 韩国成人啪啪无码高潮| 午夜老湿机| 在线18禁| 亚洲成人毛片| 青青草原国产视频| 国产精品卡一卡二| 国产av一二三区| 毛茸茸BBBBBB毛茸茸| 波多野结衣AV在线播放| 内射学生妹J亅| 国产男女无套免费视频| 91视频导航| 大香蕉偷拍视频| 热久久中文字幕| 中文字幕淫乱视频欧美| 一级大片免费看| 超碰成人免费| AV在线大香蕉| 四季AV一区二区夜夜嗨| 女人特级毛片18| 狠狠操2019| 亚洲精品视频无码| 青青操色| 日韩国产一区二区| 人妻性爱| 国产精品视频99| 国产av福利| 亚洲中文免费观看| av无码观看| 猫咪亚洲AV成人无码电影| 欧美V∧| 久久福利导航| 亚洲最大网站| 亚洲精品蜜桃| 黄色一级电影网| 亚洲无码精品一区二区| 日韩高清久久| 婷婷丁香一区二区三区| 91成人做爰A片| 日本一级特黄大片AAAAA级| 91丨九色丨东北熟女| 三级毛片网站| 麻豆视频国产| 999国产精品视频| 日韩伊人网| 午夜做爱福利视频| 奇米影视77777| 亚洲成人一区| jlzzzjlzzz国产免费观看| 搡BBBB搡BBB搡五十| 四虎亚洲无码| 亚洲AV激情无码专区在线播放| 日本精品在线观看视频| 色拍拍视频| 九九视屏| 操逼福利视频| 国产A片录制现场妹子都很多| 精品永久免费| 一区二区三区欧美| a无码视频在线观看| 猛操美女| 日韩黄色电影视频| 国产中文字幕在线播放| 天天干天天肏| 日韩中文字幕无码| 青青草视频91| 日韩黄页网站| AA视频网站| 亚洲中文AV| 四虎成人精品永久免费AV九九 | 亚洲高清无码视频在线播放| 亚洲精品免费观看| 爱搞视频| 麻豆免费视频| 免费观看黄色AV| 成人国产综合| 操鸡视频在线观看| 亚洲成人无码电影| 男人天堂无码视频| 插吧插吧网| 国产欧美综合一区二区| 亚洲无码一| 免费高清无码| 超碰97在线精品国产| 夜夜欢天天干| 男人手机天堂| 中文丰满亲子伦| 中文字幕丰满的翔田千里| 九九热热| 亚洲国产综合AV在线| 色五月天婷婷| 成人国产片| 俺也去网| 另类一区| 亚洲一级黄色大片| 欧美一区二区在线观看| 四川BBB嫩BBBB爽BBBB| 国产小视频在线| 天天日,天天干,天天操| 草久美女| 成人在线A片| 婷婷丁香人妻天天爽| 亚洲日韩欧美视频| 无码人妻精品一区二区三区温州 | a无码| 亚洲男人的天堂视频网在线观看+720P | 俺来了俺去了www色官网| 淫色五月| 亚洲1234区| 日韩精品一二三区| 揉BBB搡BBB搡BBB| 国产高清无码免费| 午夜乱轮| 国产91视频| 国产成人无码AⅤ片免费播放| 啪视频网站国产馆| 色综合久久天天综合网| 亚洲色香蕉| 特级无码| 国产做爰XXXⅩ久久久骚妇| 99热这里有精品| 亚洲一级视频在线观看| 黄色精品久久| 色色毛片| 无码蜜桃一区二区| 水蜜桃视频在线观看| 日韩性爱A片| brazzers疯狂作爱| 夜夜夜影院| 欧美一区二区精品| 亚洲三级片在线播放| 激情爱爱网| 天天撸天天干天天日| 欧美综合精品| 西西人体444www| 午夜国产在线| 亚洲男人的天堂视频网在线观看+720P | 色一本| 五月婷婷亚洲| www.99热视频| 网址你懂的| 国产一级二级视频| 午夜老湿机| 九哥操逼视频| aaa成人| 女人自慰网站在线观看| 最近2019中文字幕mv第三季歌词 | 国产精品扒开腿| 91狠狠综合久久久久久| 亚洲一级黄色大片| 日韩一级一片内射视频4K| 免费A网站| 在线播放a| 香蕉成人A片视频| 青青草成人电影| 国产伊人自拍| 91探花视频精选在线播放| 一个人看的www日本高清视频| 熟女探花精选| 一级a片免费观看| 午夜无码福利在线观看| 日韩成人电影| 手机在线观看av| AV高清无码在线观看| 91你懂的| 亚洲无码1区| 亚洲黄色av网站| 国产精品无码一区二区在线欢| 亚洲欧美影院| 国产精品探花熟女| 嫩草视频| 日韩视频网址| 婷婷在线影院| 亚洲日韩精品中文字幕| 日韩成人视频在线| 国产超级无码高清在线视频观看 | 日本欧美在线播放中文| 东京热网站在线观看| 国产日韩精品无码去免费专区国产 | 97中文字幕| 超碰性爱| 高清在线无码视频| 久久久一区二区| 在线黄色av| 91啦丨熟女露脸| 91成人电影| 国产天堂网| 免费伊人大香蕉| 欧美日综合| 第一福利视频导航| 一级二级三级视频| 中日韩中文字幕一区二区区别| 国产精品一二三区| www.日韩无码| 黄色视频大全在线观看| 午夜乱伦| 日韩色区| 色老板在线观看视频| 久久免费成人| 操B视频网站| 美女福利在线| 天天爽夜夜爽夜夜爽| 日韩一级| 超碰人人射| 午夜av在线免费观看| 蝌蚪窝视频网| 国产a视频| 思思热在线观看视频| 久久久久久少妇| 999高清无码| 亚洲成人精品在线观看| 中文无码熟妇人妻| 奇米av在线| 日韩精品在线免费视频| 91aaa在线观看| 亚洲伊人综合| 91精品少妇| 亚洲免费在线视频| 欧美夜夜操| 日本中文字幕亚洲| 亚洲精品无码一区| 68久久久| 国产精品一区二区毛片A片婊下载| 亚洲国产欧美日韩在线| 五月天黄色电影网站| 六月婷婷五月丁香| 尤物网在线| 黑人一区二区| 国产成人午夜视频| 欧美视频免费操逼图。| 大香伊人久久| 久久久精品午夜人成欧洲亚洲韩国| 美女福利导航| 无码人妻日韩精品一区二区三| 精品人妻一区二区免费蜜桃视频| 91青青草在线| 无码欧精品亚洲日韩一区| 懂色av粉嫩AV蜜臀AV| 影音先锋成人av| 国产做受91一片二片老头| 亚洲日韩在线看| 日韩黄色免费视频| 青娱乐国产在线| 亲子伦一区二区三区| 五月婷婷六月婷婷| 欧美色图狠狠干| 人人做人人爽| 欧美性爱中文字幕| 国产操比| 一本道综合网| 亚州不卡| 美女视频黄a视频全免费不卡| 国产高清无码免费| 18禁一区| 欧美日韩亚洲天堂| 日韩黄色电影网| 操逼91视频| 激情五月婷婷| 成人毛片| 日本色婷婷| 囯产精品一区二区三区AV做线| 黄色a片在线观看| 韩日无码| 成人无码区免费AV毛片| 伊人天天操| 久久久精品久久久| 伊人久久AV| 欧美在线观看网站18| 欧美口爆| 自拍AV在线| 蜜芽成人网| 99久久久无码国产精品性波多| 69AV网站| 欧美成人性爱网址| 久久免费高清视频| 无码123| 亚洲AV无码乱码国产精品蜜芽| 亚洲成人免费在线| 色欲AV秘无码一区二区三区| 伊人激情影院| 丝袜美女足交| 色人人| 国产精品V| 东京热在线视频观看| 色婷婷久综合久久一本国产AV | JUY-579被丈夫的上司侵犯后的第7天,我 | 日韩无码A级片| 日韩黄在线| 秋霞福利| 国产免费黄色电影| 精品人妻二区中文字幕| 久久亚洲综合| 又色又爽| 在线观看中文字幕一区| 日韩AV电影网| 丁香五月激情中文字幕| 免费播放片色情A片| 四川少扫搡BBw搡BBBB| 一区二区成人电影| 国产乱码一区二区三区的区别| 波多野结衣久久精品| 伊人色色色| 欧美插插插| 一级A片免费黄色视频| 中文无码在线播放| 91人妻人人爽人人爽| 国产精品欧美一区二区三区苍井空 | 国产在线一区二区| 亚洲精品a| 麻豆成人无码精品视频| 91视频国产精品| 亚洲无码视频专区| 国产性色AV| www.青草视频| 大鸡巴操小逼视频| 成人精品A片免费网站| 黄色视频在线观看亚洲一区二区三区免费| 亚洲AV成人无码网天堂| 色香蕉视频| 七十路の高齢熟妇无码| 91成人在线免费视频| 在线看91| 男女操逼视频网站| 激情综合视频| av网站免费在线观看| av无码av天天av天天爽| 丁香花免费高清视频小说完整| 亚洲AV色香蕉一区二区三区| 五月天av在线观看| 亚洲国产三级| 先锋影音在线资源| 夜夜操天天干| 丁香五月婷婷色| 蜜桃BBwBBWBBwBBw| 国产真实乱婬A片三区高清蜜臀 | 国产免费一区二区三区| 欧美四区| 精品国产无码怀孕| 好吊看视频| 国产理论电影在线观看| 特逼视频| 久久亭亭| 91超碰免费| 国产一道本| 男女啪网站| 日韩不卡免费| 久久99影院| 搡BBB搡BBBB搡BBBB-百度| 91在线资源| 国产传媒在线观看| av免费播放| 久久99精品久久久水蜜桃| 91麻豆精品国产91久久久吃药| 麻豆黄色电影| 一二三区| 操美女一区二区| 激情内射| 性视频人人| 国产毛片一照区| 蜜桃秘一二三区最新| 五月丁香久久| 69久蜜桃人妻无码精品一区| 在线免费看a片| 粉嫩小泬BBBB免费看-百度| 欧美成人在线免费视频| 国产综合一区二区| 91无码成人| 人妻AV一区| 日韩欧美在线中文字幕| 东方av在线播放| 成人精品免费无码毛片| 国产欧美成人在线| 一区黄片| 国产69精品久久| 色综合久久88色综合| 日韩精品中文无码| 久久大香蕉91| 欧美高清一级| 99黄色电影| 69国产精品视频免费观看| 超碰成人欧美| 啊啊啊啊啊在线观看| 99免费热视频在线| 特级西西444www无码视频免费看| 高清无码视频免费在线观看| 国产亚洲精品久久久久久桃色| 一区二区无码av| 最近最经典中文MV字幕| 国产三级视频在线| 乱伦小视频| AV免费网址| 亚洲无码精品一区二区三区| 九九精品99| 影音先锋av资源在线| 特级艺体西西444WWw| 亚洲AV偷拍| 国产aⅴ激情无码久久久无码 | 亚洲美女视频在线| 久久国产精品伦子伦| 久艹在线观看视频| 成人做爱黄片| 99re视频在线播放| 九久久| WWW.99热| 国內精品久久久久久久| 成人理伦A级A片在线论坛| 无码日韩人妻精品久久蜜桃| 特级西西444www大精品 | 成人黄片免费看| 欧美黄片在线免费观看| 成人精品一区二区三区| 99性爱视频| a网站免费观看| 色人阁人妻中文字幕| 久久舔| 婷婷色片| 欧美va视频| 亚洲不卡一区二区三区| 日韩熟妇无码| 国产一级a毛一级a毛视频在线网站? | 大香蕉尹人在线| 黄色一区二区三区| 亚洲AⅤ欧美AⅤ| 亚洲北条麻妃一级A片| 久久艹综合网| 日本三区视频| 天堂在线网| 亚洲免费成人网| 中国免费一级无码成人片| 夜夜夜撸| 国产精品秘麻豆免费版现看视频| 色婷五月天| 啪啪啪啪网站| 详情:绿帽夫妻多人运动开淫啪-91n| 人妻少妇91精品一区黑人| 91人妻一区二区三区无不码超满 | 老鸭窝久久久| 97婷婷五月天| 婷婷午夜精品久久久久久性色| 91视频在线网站| 91精品丝袜久久久久久久久粉嫩| 久久黄色网址| 人人插人人操| 人人妻人人骑| 奶大丰满一乱一视频一区二区三区在 | 欧洲精品码一区二区三区免费看| 久久手机电影| 亚洲国产成人精品激情在线 | 内射视频在线观看| 伊人成人网站| 性猛交╳XXX乱大交| 免看一级a一片| 俄罗斯老熟妇与子伦| 国产精品99视频| 91jiujiu| 国产黄| 500部大龄熟乱4K视频| 亚洲成人在线| 超碰C| AV在线资源观看| 亚洲日韩在线免费观看| 日本九九视频| 美女啪啪视频| 黄色视频网站在线| 午夜亚洲国产一区视频网站| 中国人妻HDbute熟睡| 男人的天堂视频在线| 中文字幕第72页| 91视频在线免费看| 视色网| 天天日综合| 国产日韩性爱视频| 亚洲二区无码| 亚洲免费天堂| 国产多人搡BBBB槡BBBB| 日韩性爱视频在线观看| 日韩第一页| 殴殴美日韩在线| 51一区二区三区| 玖玖爱综合| 日本一级婬片免费放| 你懂得在线观看| 91资源在线| 日韩中文字幕无码| 国产免费成人在线观看| 男女一区二区三区| 欧美A在线观看| 亚洲国产婷婷香蕉A片| 日本A片在线观看| 淫乱骚穴| 日本三级片中文字幕| 色色三区| 成人A片免费视频| www.国产在线观看| 波多野结衣AV在线| 国产成人在线精品| 国精产品一区一区三区有限公司杨| 亚洲色,天堂网| 国产一| 久久久久久久久久久高清毛片一级| 亚洲搞清视频日本| 国产一区二区三区四区五区六区七区 | 午夜噜噜| 91精品国产一区二区| 在线视频免费观看| 欧美在线不卡| 国产av一二三区| 日韩色情电影| 日韩天堂网| 丁香五月激情网| 性感欧美美女| 亚洲日韩精品欧美一区二区yw | 日韩中文字幕人妻| 久久久国产精品黄毛片| AⅤ视频在线观看| 欧美成人精品激情在线观看| 亚洲va在线| www.yw尤物| 日韩无码专区| 熟妇操逼视频| 一级黄色视频免费观看| 91网站免费看| 大香蕉国产精品| 这里视频很精彩免费观看电视剧最新 | www.日韩精品| 欧美在线观看网站18| 人妻人操| 国产精品一级a毛一级a| 中文字幕第83页| 国产精品HongKong麻豆| 六月婷婷在线| 国产老女人操逼| 2025国产精品| 小草久久95| 精品久久久久久亚洲| 91人妻人人澡人人爽人妻| www.污| 天天躁狠狠躁夜躁2024| 人妻熟女在线视频| 成年人黄色视频在线观看| 污网址| 婷婷综合缴情亚洲另类在线 | 国产伦子伦一级A片在线| 狠狠干狠狠撸| 日韩精品一区二区三区四在线播放 | 日逼大香蕉| 黑人巨粗进入疼哭A片| 另类激情| 手机毛片在线播放| 亚洲AV无码蜜桃| 俺也去也| 东京热免费视频| 欧美精品在线免费观看| 成人在线毛片| 日韩欧美在线免费观看| se99av| 中文字幕+乱码+中文乱码视频在线观看 | 亚洲免费高清视频| 中文字幕乱码视频32| 日韩黄色电影视频| 特逼视频| 日韩无码中文字幕| 天天日天天噜| 久久久黄色视频| 欧亚毛片| 欧美成人精品一级| 国产精品国产三级国产专区53| 日韩欧美爱爱| 国产毛片久久久久久国产毛片| 激情视频综合网| 91久久国产综合久| 欧美日韩狠狠操在线观看视频| 亚洲av黄片| 国产精品播放| 人妻少妇视频| 不卡无码av| 丁香五月婷婷啪啪| 久久久精品国产| 91精品国际| 大香蕉网在线| 特级西西人体大胆无码| 一本色道久久88综合无码| 安徽妇搡BBBB搡BBBB按摩| 久久视频免费观看| 亚洲一级av无码毛片精品| 中文字幕免费MV第一季歌词| 亚洲av在线免费观看| 成人国产精品免费观看| 少妇人妻av| 一级理论片| 色av网| 12—13女人毛片毛片| 日韩五码| 国产乱国产乱老熟300视频| 欧美亚洲成人电影| 成人一级视频| 亚洲天堂AV2025| 精品乱子伦一区二区三区在线播放| 欧美成人h| 欧美性大香蕉| 99精品全国免费观看| 99在线免费观看| 深爱开心激情| 熟妇人妻丰满久久久久久久无码 | 超碰97在线免费| 黄片www| 日韩一区二区无码视频| 91精品大屁股白浆自慰久久久| av逼网| 国产成人精品一区二区三区视频| 国产在线视频你懂的| 北条麻妃精品青青久久价格| 7799综合| 欧美成人精品AAA| 天堂中文8资源在线8| 中文字幕永久在线观看| 在线观看黄片| 久久久成人精品| www.污| 毛片学生妹| 亚洲成人AV无码| 久久精品99| 国产在线性爱视频|