国产无码免费,人妻口爆,国产V在线,99中文精品7,国产成人无码AA精品一,制度丝袜诱惑av,久久99免费麻辣视频,蜜臀久久99精品久久久久久酒店
        訂閱
        糾錯
        加入自媒體

        使用OpenCV的車輛檢測和計數系統

        2022-02-09 10:46
        磐創AI
        關注

        概述

        在本文中,我們將編寫一個車輛計數和檢測系統。我們將使用OpenCV進行所有圖像處理操作,并制作用于分類汽車和公交車的 haar 級聯分類器,還可以制作你自己的 haar 級聯分類器。

        范圍

        1. 幫助交警:車輛檢測和計數系統對交警來說是有益的,因為他們可以從一個地方監控的所有東西,只需要知道有多少車輛和哪些車輛通過了這個收費站。

        2. 維護記錄:由于車輛實時經過,因此某些人很難記錄所有車輛。這不像一個人正在觀看視頻,他們可以暫停它并對其進行注釋,因此為了消除此限制,此應用程序可以非常熟練地以達到節省時間并實現自動化。

        3. 交通監控:由于此應用程序可以安裝在任何地方,因為它只需要一個攝像頭或一些電線(用于建立與中央系統的連接),因此如果某個地方的交通量很大,那么在該區域,員工可以對其進行監控并將信息轉發給下一位收費員,以便他們提前做好準備。

        導入所需的庫

        # Import libraries

        from PIL import Image

        import cv2

        import numpy as np

        import requests

        接下來,我們將從互聯網上獲取圖像。然后我們將調整圖像大小并將其轉換為 NumPy 數組。

        從 URL 讀取圖像

        image = Image.open(requests.get('https://a57.foxnews.com/media.foxbusiness.com/BrightCove/854081161001/201805/2879/931/524/854081161001_5782482890001_5782477388001-vs.jpg', stream=True).raw)

        image = image.resize((450,250))

        image_arr = np.array(image)

        image

        輸出:

        為了獲得更好的輸出,我們將對圖像進行一些轉換。在這里,我們將圖像轉換為灰度。

        灰度

        grey = cv2.cvtColor(image_arr,cv2.COLOR_BGR2GRAY)

        Image.fromarray(grey)

        輸出:

        接下來,我們將應用高斯模糊去除圖像中的噪聲。

        高斯模糊是圖像處理的技術之一。它也廣泛用于圖形設計,用于降低噪聲和平滑圖像,以便進行進一步的預處理,從而產生更好的輸出。

        除了減少圖像中的噪聲,高斯模糊技術還減少了圖像的細節。為了應用這種預處理技術,我們將使用 GaussianBlur() 函數。

        高斯模糊

        blur = cv2.GaussianBlur(grey,(5,5),0)

        Image.fromarray(blur)

        輸出:

        在這里,我們將應用圖像膨脹,膨脹是一種形態學技術,我們嘗試用元素填充像素,也稱為內核(結構化塊),以在需要時填充圖像的缺失部分。

        注意:它與腐蝕正好相反。膨脹

        dilated = cv2.dilate(blur,np.ones((3,3)))

        Image.fromarray(dilated)

        輸出:

        現在我們將使用內核執行形態學轉換。在這里,我們使用了一種Morphology-Ex技術,它告訴函數需要對其進行哪些圖像處理操作。

        第二個參數是關于必須完成哪些操作,你 可能需要橢圓/圓形內核。為了使用 OpenCV 實現 Morphology-Ex 方法,我們將使用 getStructuringElement 方法。

        Morphology-Ex,結構元素

        kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (2, 2))

        closing = cv2.morphologyEx(dilated, cv2.MORPH_CLOSE, kernel) 

        Image.fromarray(closing)

        使用汽車級聯檢測汽車

        現在我們需要一個汽車級聯來檢測汽車。所以,我們首先需要將它們上傳到collab(如果你是在collab里做的),如果你是在本地機器里做的,那就把cascade文件添加到同一個文件夾中,并指定路徑 car_cascade_src。

        這里我們將使用 CascadeClassifier 函數,即 OpenCV 的預定義函數,從預訓練的 XML 文件(級聯文件 - 汽車)中訓練圖像。我們需要檢測多個對象,即汽車,才能使用 detectMultiScale。

        car_cascade_src = 'cars.xml'

        car_cascade = cv2.CascadeClassifier(car_cascade_src)

        cars = car_cascade.detectMultiScale(closing, 1.1, 1)

        cars

        輸出:

        array([[376,   1,  22,  22],
                              [307,   4,  27,  27],
                              [196,  10,  28,  28],
                              [ 35,   2,  30,  30],
                              [150, 163,  68,  68],
                              [318, 121,  82,  82],
                              [101,   3,  43,  43],
                              [317,  66,  66,  66],
                              [274,  20,  38,  38],
                              [256,  52,  79,  79],
                              [245,  24,  20,  20],
                              [250,  35,  25,  25],
                              [ 63,  40,  22,  22],
                              [209,  88,  54,  54],
                              [ 13,  25,  43,  43],
                              [384,  84,  59,  59],
                              [145,  91,  53,  53],
                              [ 52,  44,  39,  39],
                              [237,  38,  49,  49],
                              [362,  43,  46,  46],
                              [268, 106,  60,  60]], dtype=int32)

        我們將使用上面返回的輪廓并在檢測到的汽車周圍繪制一個矩形。

        在這里,我們將看到它將在檢測到的每輛車周圍創建一個帶有紅色邊框的矩形。

        cnt = 0

        for (x,y,w,h) in cars:

              cv2.rectangle(image_arr,(x,y),(x+w,y+h),(255,0,0),2)

              cnt += 1

        print(cnt, " cars found")

        Image.fromarray(image_arr)

        輸出:

        21  cars found

        公交車檢測

        現在我們將使用另一個圖像,即公交車圖像,我們將從互聯網上獲取該圖像。我們將調整圖像大小,將其存儲為 NumPy 數組,并將其轉換為灰度。

        # Reading image form url

        image2 = Image.open(requests.get('https://qph.fs.quoracdn.net/main-qimg-b5c4e39dcd48dddd9e609e6022f74d85', stream=True).raw)

        image2 = image2.resize((450,250))

        image_arr2 = np.array(image2)

        grey2 = cv2.cvtColor(image_arr2,cv2.COLOR_BGR2GRAY)

        我們在這里處理公交車圖像,所以我們需要級聯來檢測公交車。我們將使用Bus_front 級聯從圖像中識別公交車,我們將執行與上述類似的操作。

        bus_cascade_src = 'Bus_front.xml'

        bus_cascade = cv2.CascadeClassifier(bus_cascade_src)

        bus = bus_cascade.detectMultiScale(grey2, 1.1, 1)

        正如我們在汽車級聯中所做的類似,我們將對公交車圖像執行相同的輪廓操作,并在檢測到任何公交車時在公交車周圍創建一個矩形。

        cnt = 0

        for (x,y,w,h) in bus:

                cv2.rectangle(image_arr2,(x,y),(x+w,y+h),(255,0,0),2)

                cnt += 1

        print(cnt, " bus's found")

        Image.fromarray(image_arr2)

        輸出:

        1  bus's found

        現在我們將在視頻中執行車輛檢測和計數。

        為了從幀或圖像創建輸出視頻, 我們需要 cv2.VideoWriter() 方法。它以帶擴展名的路徑作為第一個參數;第二個參數是輸出格式的編解碼器,還需要傳遞每秒幀數和高度和寬度。

        cascade_src = 'cars.xml'

        video_src = 'Cars.mp4'

        cap = cv2.VideoCapture(video_src)

        car_cascade = cv2.CascadeClassifier(cascade_src)

        video = cv2.VideoWriter('result.avi',cv2.VideoWriter_fourcc(*'DIVX'), 15, (450,250))

        現在我們將從輸入視頻中一一讀取幀,將它們轉換為灰度,并使用汽車級聯來檢測該特定幀中的所有汽車。最后,我們使用 video.write() 方法編寫這個視頻,video.release() 將這個視頻保存到給定的路徑。

        while True:

             ret, img = cap.read()

             if (type(img) == type(None)):

                  break
                   gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
                   cars = car_cascade.detectMultiScale(gray, 1.1, 2)
          

            for (x,y,w,h) in cars:
                           cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,255),2)


        video.write(img) 

        video.release()

        結論

        我們首先下載我們將要處理的圖像并執行不同的操作。我們看到了如何使用用于物體檢測的 haar 級聯,以及如何使用不同的 haar 級聯進行汽車檢測和公交車檢測。同樣,你可以使用許多預訓練的 haar 級聯進行其他對象檢測。

        由于 haar 級聯用于對象檢測,因此我們的范圍很廣。它可用于對象檢測,我們還可以為特定對象創建自定義 haar 級聯。

        尾注

        這是這篇文章的repo鏈接:

        image.png


               原文標題 : 使用OpenCV的車輛檢測和計數系統

        聲明: 本文由入駐維科號的作者撰寫,觀點僅代表作者本人,不代表OFweek立場。如有侵權或其他問題,請聯系舉報。

        發表評論

        0條評論,0人參與

        請輸入評論內容...

        請輸入評論/評論長度6~500個字

        您提交的評論過于頻繁,請輸入驗證碼繼續

        暫無評論

        暫無評論

          掃碼關注公眾號
          OFweek人工智能網
          獲取更多精彩內容
          文章糾錯
          x
          *文字標題:
          *糾錯內容:
          聯系郵箱:
          *驗 證 碼:

          粵公網安備 44030502002758號

          主站蜘蛛池模板: 亚洲精品XXX| 人妻va精品va欧美va| 国产综合AV| 77777av| 最大的成人网亚洲| 苗栗县| 磐石市| 亚洲欧美视频| 天天操天天干视频| 亚洲精品一区二区三| 久久久久久亚洲AV成人无码激情| 武冈市| 牡丹江市| 内射视频在线观看| 婷婷五月AV| 日韩无| 老司机在线精品| 一区二区三区视频| 中文字幕精品熟女| 国产视频99| 曰韩三级无码久久探| 钟山县| 日屄自拍| 宁强县| 房产| 夜夜爽影院| 人妻人操| 91视频www| 中文字幕日韩av| 欧美精产国品一二三区| 色二区| 无码欧洲| 99精品视频在线| 辽中县| 成人视频AAA| 波多野在线影院| jizzjizz欧美| 南投县| 综合网激情| 91热爆| 亚洲性爱电影|