如何通過 Python 和 OpenCV 實現目標數量監控?

2020-12-06 CSDN

作者 | 李秋鍵

責編 | 劉靜

今天我們將利用python+OpenCV實現對視頻中物體數量的監控,達到視頻監控的效果,比如洗煤廠的監控水龍頭的水柱顏色,當水柱為黑色的超過了一半,那麼將說明過濾網發生了故障。當然不僅如此,我們看的是圖像視頻處理的技巧,你也可以將項目遷移到其他地方等,這僅僅是一個例子而已。我們知道計算機視覺中關於圖像識別有四大類任務:

分類-Classification:解決「是什麼?」的問題,即給定一張圖片或一段視頻判斷裡面包含什麼類別的目標。

定位-Location:解決「在哪裡?」的問題,即定位出這個目標的的位置。

檢測-Detection:解決「是什麼?在哪裡?」的問題,即定位出這個目標的的位置並且知道目標物是什麼。

分割-Segmentation:分為實例的分割(Instance-level)和場景分割(Scene-level),解決「每一個像素屬於哪個目標物或場景」的問題。

而定位不僅需要找到物體的位置在哪裡,還需要能夠統計目標的數目以及物體狀態。

除了圖像分類以外,目標檢驗要解決問題的架構難題是:

1.目標有可能經常出現在影像的任何方位;

2.目標有各種有所不同的尺寸;

3.目標有可能有各種有所不同的外形。

如果用矩形框來界定目的,則長方形有有所不同的清晰度。由於目的的清晰度有所不同,因此使用經典之作的轉動視窗+影像圖形的計劃解決問題標準化目的檢驗難題的生產成本太低。近幾年來,目標檢測算法取得了很大的突破。比較流行的算法可以分為兩類,一類是基於Region Proposal的R-CNN系算法(R-CNN,Fast R-CNN, Faster R-CNN等),它們是two-stage的,需要先算法產生目標候選框,也就是目標位置,然後再對候選框做分類與回歸。而另一類是Yolo,SSD這類one-stage算法,其僅僅使用一個卷積神經網絡CNN直接預測不同目標的類別與位置。第一類方法是準確度高一些,但是速度慢,但是第二類算法是速度快,但是準確性要低一些。那麼今天我們的項目並不會太多的講解各種算法,而是我們的核心主題,目標數量識別。

那麼我們將如何進行實現呢

多說無益,下面可以開始實現我們的項目。

首先導入相關的庫

import cv2from PIL import Imagefrom PIL import ImageDraw,ImageFontimport numpy as np

接著我們需要把水龍頭流出水柱的部分提取出來,即需要把圖片預先處理成這樣,作為背景圖來用,名為3ji.jpg如圖所示:

然後通過圖像作差的方法找到水柱的部分,首先就需要將圖像轉彩灰度圖然後高斯模糊便於計算,當然其實不這樣也是可以的。其中2.jpg是測試的圖片,

代碼如下:

'''3ji是背景圖不可換,調試換另一個圖片,3ji自己用畫圖找到水的位置清除掉水柱即可,所以說攝像頭不能動'''firstframe=cv2.imread("3ji.jpg")firstframe= cv2.cvtColor(firstframe, cv2.COLOR_BGR2GRAY)firstframe= cv2.GaussianBlur(firstframe, (21, 21), 0)secondframe0=cv2.imread("2.jpg")secondframe0= cv2.cvtColor(secondframe0, cv2.COLOR_BGR2GRAY)secondframe= cv2.GaussianBlur(secondframe0, (21, 21), 0)frameDelta = cv2.absdiff(firstframe, secondframe)x,y=frameDelta.shapeprint(x,y)

接著通過邊緣檢測找到水柱邊界,方便查看。

#frameDelta和canny一個是區域一個是輪廓img = cv2.GaussianBlur(frameDelta,(3,3),0)canny = cv2.Canny(img, 0, 100)

定義水柱總面積變量。清水面積變量,ss數組存儲像素值位置

area=0 #6687,總面積qingarea=0ss=[]

然後畫出輪廓,並記錄水柱處像素值得位置

#畫輪廓,存儲要識別的像素值位置,記錄在ss數組中for i in range(x):for j in range(y):if any(frameDelta[i,j]!=[0,0,0]):#白色的時候,佔位 ss.append([i,j])

然後以原圖加輪廓圖顯示,圖片相加即可:

canny0=cv2.add(secondframe0,canny)

接著根據像素值大小判斷顏色,通過調試這個項目的閾值是50

#判斷水柱顏色,清水佔多少像素for t in ss: k,l=t area=area+1if canny0[k, l] > 50:print(canny0[k,l]) qingarea+=1接著統計黑色水柱佔比率為多少deta=(qingarea/area)*100print(qingarea)pred="清水佔比為"+str(deta)+"%"print(pred)

最後輸出圖像結果:

cv2.imwrite("pred.jpg",canny0)canny0=cv2.imread("pred.jpg")img_PIL = Image.fromarray(cv2.cvtColor(canny0, cv2.COLOR_BGR2RGB))myfont = ImageFont.truetype(r'C:/Windows/Fonts/simfang.ttf', 40)draw = ImageDraw.Draw(img_PIL)draw.text((200, 10), pred, font=myfont, fill=(255,23,140))img_OpenCV = cv2.cvtColor(np.asarray(img_PIL), cv2.COLOR_RGB2BGR)cv2.imshow("frame", img_OpenCV)key = cv2.waitKey(0)

最終達到的演示效果如圖所示:

清水佔比96%,還是比較準確的

清水佔比38%,黑水佔比62%,也基本準確。

當然這僅僅是一個思路的問題,至少目前為止網上還沒有對物體數目去監控的項目例子,儘管並不是如此高深,但是卻是一個很好的探究方向。不僅僅是智能採礦的需要,也可以是智能農業或者智能畜牧業等方面監控的一個想法。當然大家也是可以再次基礎上修改完善代碼,完整的代碼上面已經給出。伴隨著移動網際網路、手機及各交友的平臺的較慢持續發展,照片的廣泛傳播幅度大大增強,廣泛傳播範圍內也日益擴展。比起書寫、視頻、錄像等廣泛傳播方式,照片廣泛傳播極具「點睛」視覺效果,合乎節奏貧困下人們高效的讀者方法。

當照片給人們帶給快捷的數據紀錄和共享方法的同時,照片普遍地廣泛傳播在社會大眾視線下,適當的難題也接踵而來。書寫記述,使用者可以精彩通過關鍵字搜尋提供意願數據,而當照片記述,使用者難以必要通過搜尋照片索引到可藉助數據。

科技進步的變革常常與解決的表達意見如影隨形,在使用者痛點下,亟需高科技的改進創意,此自然環境下湧現的圖像識別新技術之後變得尤為重要。由此也可見計算機視覺的日益高漲的地位。

作者簡介:李秋鍵,CSDN 博客專家,CSDN達人課作者。

聲明:本文為作者原創投稿,未經允許請勿轉載。

【End】

相關焦點

  • 如何快速簡單的安裝opencv-python
    這樣就會從清華鏡像安裝opencv-contrib-python庫。目前opencv最新版本為4.1.1 ----2019-8-28在opencv-contrib-python 版本中含有額外模塊( Extra modules ),而 opencv-python 版本中只含有基礎模塊。
  • 使用OpenCV和Python構建自己的車輛檢測模型
    什麼樣的車輛(重型車輛、汽車等)正在通過交叉路口?有沒有辦法優化交通,並通過不同的街道進行分配?還有很多例子就不一一列舉。應用程式是無止境的!我們人類可以很容易地在一瞬間從複雜的場景中檢測和識別出物體。然而,將這種思維過程轉化為機器的思維,需要我們學習使用計算機視覺算法進行目標檢測。因此在本文中,我們將建立一個自動車輛檢測器和計數器模型。
  • 基於TensorFlow 、OpenCV 和 Docker 的實時視頻目標檢測
    翻譯 | 於志鵬  徐普     校對 | 陶玉龍     整理 | 孔令雙在本文中,我將介紹如何在 Docker 容器中使用 Tensorflow Object-detection API 來執行實時(網絡攝像頭)和視頻的目標檢測。
  • 「python opencv視覺零到實戰」八、圖片選區操作
    一、學習目標了解什麼是ROI了解floodFill的使用方法如有錯誤歡迎指出~目錄「python opencv 計算機視覺零基礎實戰」 第一節「python opencv視覺入門到實戰」二、格式與攝像頭「python opencv 視覺入門到實戰」 三、圖像編輯「python opencv視覺入門到實戰
  • 「python opencv視覺零基礎」十四、直方圖反向投影
    前文提醒:博主正在參加博客之星評比,成功入選Top200,現在暫居第九歡迎各位點擊了解更多幫我投票,非常感謝~目錄「python opencv 計算機視覺零基礎實戰」 第一節「python opencv視覺入門到實戰」二、格式與攝像頭「python opencv 視覺入門到實戰」 三、圖像編輯「python
  • 「python opencv視覺零基礎實戰」七邏輯運算應用
    一、學習目標了解opencv中圖像的邏輯運算了解opencv中邏輯運算的應用如有錯誤歡迎指出~目錄「python opencv 計算機視覺零基礎實戰」 第一節「python opencv視覺入門到實戰」二、格式與攝像頭「python opencv 視覺入門到實戰」 三、圖像編輯「python
  • 「python opencv視覺零基礎」十、圖片效果毛玻璃
    一、學習目標了解高斯模糊的使用方法了解毛玻璃的圖片效果添加了解如何自己做一個噪聲圖片目錄「python opencv 計算機視覺零基礎實戰」 第一節「python opencv視覺入門到實戰」二、格式與攝像頭「python opencv 視覺入門到實戰」 三、圖像編輯「python opencv視覺入門到實戰
  • 「python opencv計算機視覺零基礎到實戰」九模糊
    一、學習目標了解什麼是卷積了解模糊的使用方法與應用目錄「python opencv 計算機視覺零基礎實戰」 第一節「python opencv視覺入門到實戰」二、格式與攝像頭「python opencv 視覺入門到實戰」 三、圖像編輯「python opencv視覺入門到實戰」 第四節色彩空間
  • 目標檢測必須要OpenCV?10行Python代碼也能實現,親測好用!
    大數據文摘出品編譯:朱一輝、雪清、小魚短短10行代碼就可以實現目標檢測?!本文作者和他的團隊構建了一個名為ImageAI 的Python庫,集成了現今流行的深度學習框架和計算機視覺庫。本文將手把手教你構建自己的第一個目標檢測應用,而且文摘菌已經幫你踩過坑了,親測有效!
  • opencv-python獲取圖像:面向對象與面向過程
    關於圖片的來源:1973年6月,美國南加州大學的信號圖像處理研究所的一個助理教授和他的一個研究生打算為了一個學術會議找一張數字照片,而他們對於手頭現有成堆"無聊"照片感到厭煩。事實上他們需要的是一個人臉照片,同時又能讓人眼前一亮。這時正好有人走進實驗室,手上帶著一本當時的花花公子雜誌,結果故事發生了……而限於當時實驗室設備和測試圖片的需要,lenna的圖片只摳到了原圖的肩膀部分。
  • opencv-python圖像預處理-濾波
    為了消除外界環境對圖像採集的幹擾,增強圖像的邊緣及灰度跳變的部分,使圖像變得清晰以及提高圖像處理速度需要對圖像進行預處理操作,主要是對圖像進行濾波和增強操作。使用的方法可以分為空間域處理和頻率域處理兩類。空間域指圖像平面本身,這類圖像處理方法用各種模板直接與圖像進行卷積運算,實現對圖像的處理。
  • Python中如何利用Opencv打開視頻或圖像並用PyQt控制項顯示
    OpenCV是一個基於BSD許可(開源)發行的跨平臺計算機視覺庫,可以運行在Linux、Windows、Android和Mac OS作業系統上,使用起來十分方便,把它與PyQt結合起來,就可以順利的操作視頻、圖像了。具體安裝請自行百度,這裡介紹使用方法。
  • OpenCV中的快速直線檢測
    本文範例運行環境FastLineDetectors運行必要條件FastLineDetectors屬於opencv-contrib中的模塊,需要安裝opencv-contrib-python。在python的opencv相關的安裝包中,opencv-python 包含主要模塊,opencv-contrib-python 包含主要模塊以及一些擴展模塊。但這兩個模塊並不兼容,如果已經安裝過opencv-python,需要先卸載,再安裝opencv-contrib-python。
  • Python第三方庫安裝
    Python第三方庫安裝方法包含:-pip安裝-集成環境自帶-文件安裝三種方法1. pip安裝1.1 如何查找第三方庫Python社區可以查找第三方庫的,其頁面如圖所示:pypi.org其中PyPI: Python Package Index是由PSF維護的展示全球Python計算生態的主站如要安裝圖像處理opencv-python庫可以搜索 opencv,但結果如下:
  • 基於python+OpenCV模塊的人臉識別定位技術
    本文將基於OpenCV模塊,在windows作業系統上,利用python語言,進行人臉識別技術的研究。當然OpenCV的應用領域很廣,除了人臉識別之外,它還支持圖像分割、動作識別、視頻處理等技術。首先看一下實現的效果:OpenCV模塊的下載與安裝OpenCV模塊下載安裝很簡單。
  • 基於opencv 的圖像處理入門教程
    /代碼和樣例圖片的地址:https://github.com/ccc013/CodesNotes/tree/master/opencv_noteshttps://github.com/ccc013/CodesNotes/blob/master/opencv_notes/opencv_image_process_tutorial.ipynb
  • 資料| Practical Python and OpenCV 一周時間帶你入門CV
  • 世界上最好的語言PHP:OpenCV與計算機視覺已在我掌控之下
    本文從實踐的角度介紹了如何使用 PHP 與 OpenCV 構建人臉檢測、人臉識別、超解析度與目標檢測等系統,因此 PHP 的各位擁躉們,可以盡情使用 OpenCV 探索計算機視覺了。本文首發於公眾號機器之心(ID:almosthuman2014),部分代碼格式有誤可參閱原文章。
  • python滑鼠連點器-測試版
    這次先來實現一個具備自動點擊效果的程序,之後再去拓展豐富程序的功能。安裝 pynput正常下載總是不穩定,出現了一片紅色文字,因為伺服器國外的,換成國內鏡像。這裡使用的是清華大學的鏡像下載的,還有豆瓣什麼的都可以,速度會比較快,搞定。
  • 基於OpenCv 和 Python 的手指識別及追蹤
    翻譯 | 餘杭 Lamaric 校對 | 吳曉曼 審核 | 餘杭詳細代碼參考:https://github.com/amarlearning/opencv手指追蹤是許多計算機視覺應用的重要特徵。在該應用中,使用基於直方圖的方法將手與背景幀分離。