OpenCV 網路攝像頭
在這個簡短的演示中,我們將學習如何在 Python 和 OpenCV 的幫助下訪問網路攝像頭並顯示實時提要。
在 Python 和 OpenCV 的幫助下訪問網路攝像頭
每當我們從事任何需要訪問實時攝像頭饋送的計算機視覺專案時,如果我們想要進行面罩檢測,或者我們設計一個想要進行社交距離檢測的專案。
在這種情況下,我們必須訪問相機的實時資訊,並且無論我們從相機接收到什麼實時資訊,下一條指令都可以用於不同的目的。
讓我們看一下使用 OpenCV 訪問實時攝像機源的程式碼。一旦我們匯入 opencv
庫,我們必須使用 opencv
庫中的 VideoCapture()
方法。
它捕獲來自不同來源的視訊。它可以從你的本地計算機系統或膝上型電腦的攝像頭中捕獲視訊,或者你可以從任何基於 IP 的攝像頭中捕獲視訊。
我們必須在括號中提供視訊捕獲的來源。
WC = cv2.VideoCapture(0)
現在你可以看到我們提供了源 0
,這意味著它將訪問我們膝上型電腦的預設攝像頭。如果我們想訪問儲存在計算機系統中的任何視訊,我們可以將視訊的完整路徑作為字串傳遞。
如果要訪問任何基於 IP 的攝像機,則必須提供基於 IP 的攝像機的完整路徑。我們考慮一個虛擬地址,它會是這樣的。
WC = cv2.VideoCapture("https://3.4.5.6/cam2")
但在本文中,我們將嘗試訪問膝上型電腦的預設攝像頭,為此,我們需要將源設定為 0
。它將捕獲來自攝像機的實時資訊。
一旦我們捕獲了視訊,我們將它儲存在一個物件中,然後,我們將嘗試從視訊中讀取每一幀或從相機接收到的實時資訊。
視訊只不過是一系列影象,在計算機視覺領域,我們稱之為幀。
現在我們將在 while
迴圈中編寫一堆程式碼;它將無限地繼續閱讀相機的實時資訊。我們使用 read()
方法從 WC
物件中讀取幀,而該幀只是一個影象。
while True:
# this will read images/frames one by one
RET, F = WC.read()
cv2.imshow("Live Feeds", F)
下一條指令在 imshow()
方法的幫助下顯示這些影象,該方法有兩個引數。一個是視窗名稱,它將出現在右上角,第二個是影象的內容,numpy
陣列。
在下一條指令中,我們接收來自實時攝像頭的提要,它將繼續在我們的程式中顯示幀或影象。我們必須打破這個迴圈來停止這個無限迴圈或相機的實時饋送。
我們需要使用 v2.waitKey(1)
,如果我們提到我們在鍵盤上按下的鍵應該是退出 while
迴圈,它將保持視窗開啟直到我們採取行動。
如果我們按下定義的鍵,它將自動停止我們從攝像機訪問的實時源。
在程式碼的最後,我們釋放了我們的 WC
物件。我們呼叫 destroyAllWindows()
方法,它將銷燬我們開啟的所有視窗以顯示我們的實時提要。
import numpy as np
import cv2
# Capture video from storage/laptop camera/IP based camera
WC = cv2.VideoCapture(0)
while True:
# this will read images/frames one by one
RET, F = WC.read()
cv2.imshow("Live Feeds", F)
KEY = cv2.waitKey(1) # wait for key press
if KEY == ord("q"):
break
WC.release()
cv2.destroyAllWindows()
現在我們可以看到攝像頭正在捕捉實時視訊。
Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.
LinkedIn