在當(dāng)今尖端技術(shù)的世界中,數(shù)字圖像處理發(fā)展非常迅速,并成為許多數(shù)字設(shè)備的重要組成部分,如手機(jī)、安全攝像頭、筆記本電腦等。
數(shù)字圖像處理最常見(jiàn)的應(yīng)用是對(duì)象檢測(cè)、人臉識(shí)別和人數(shù)統(tǒng)計(jì)。所以在本教程中,我們將使用 Raspberry Pi 和 ThingSpeak 構(gòu)建一個(gè) OpenCV 人群計(jì)數(shù)。在這里,pi 相機(jī)模塊將用于連續(xù)捕獲幀,然后將這些幀用HOG(面向直方圖的對(duì)象描述符)處理以檢測(cè)圖像中的對(duì)象。在此之后,這些幀將與 OpenCV 的預(yù)訓(xùn)練模型進(jìn)行比較以進(jìn)行人員檢測(cè)。人數(shù)統(tǒng)計(jì)將顯示在 ThingSpeak 頻道上,可以從世界任何地方進(jìn)行監(jiān)控。
所需組件
硬件
樹(shù)莓派 3(任何版本)
派相機(jī)
軟件和在線服務(wù)
物語(yǔ)
Python3.0
開(kāi)放CV3.0
在樹(shù)莓派中安裝 OpenCV
這里將使用 OpenCV 庫(kù)來(lái)檢測(cè)人群。要安裝 OpenCV,首先,更新 Raspberry Pi。
sudo apt-get 更新
然后安裝在 Raspberry Pi 上安裝 OpenCV 所需的依賴項(xiàng)。
sudo apt-get install libhdf5-dev -y sudo apt-get install libhdf5-serial-dev –y sudo apt-get install libatlas-base-dev –y sudo apt-get install libjasper-dev -y sudo apt-get install libqtgui4 –y sudo apt-get install libqt4-test –y
之后,使用以下命令在 Raspberry Pi 中安裝 OpenCV。
pip3 安裝 opencv-contrib-python==4.1.0.25
安裝其他必需的軟件包
在對(duì) Raspberry Pi 進(jìn)行人群計(jì)數(shù)編程之前,讓我們安裝其他所需的軟件包。
安裝imutils: imutils 用于執(zhí)行一些必要的圖像處理功能,例如平移、旋轉(zhuǎn)、調(diào)整大小、骨架化,以及使用 OpenCV 更輕松地顯示 Matplotlib 圖像。因此,使用以下命令安裝imutils :
pip3 安裝 imutils
matplotlib:之后,安裝matplotlib庫(kù)。Matplotlib是一個(gè)綜合庫(kù),用于在 Python 中創(chuàng)建靜態(tài)、動(dòng)畫和交互式可視化。
pip3 安裝 matplotlib
人數(shù)統(tǒng)計(jì)的 ThingSpeak 設(shè)置
ThingSpeak 是一個(gè)非常流行的物聯(lián)網(wǎng)平臺(tái),通過(guò)使用 ThingSpeak 平臺(tái),我們可以從任何地方通過(guò)互聯(lián)網(wǎng)監(jiān)控我們的數(shù)據(jù)。

單擊 Sing up 并輸入您的詳細(xì)信息。

在此之后,驗(yàn)證您的電子郵件 ID,然后單擊繼續(xù)。
現(xiàn)在,登錄后,單擊“新建頻道”按鈕創(chuàng)建一個(gè)新頻道。

單擊“新頻道”后,輸入您要在此頻道上上傳的數(shù)據(jù)的名稱和描述。在這里,我們創(chuàng)建了一個(gè)名為People的字段。可根據(jù)需要?jiǎng)?chuàng)建多個(gè)字段。
在此之后,單擊保存頻道按鈕以保存詳細(xì)信息。
要將數(shù)據(jù)發(fā)送到 ThingSpeak,請(qǐng)?jiān)?Python 腳本中輸入 API 密鑰和通道 ID,然后復(fù)制 API 密鑰和通道 ID。

硬件設(shè)置
在這里,我們只需要 Raspberry Pi 和 Pi 相機(jī)來(lái)完成這個(gè)OpenCV 人員計(jì)數(shù)項(xiàng)目,您只需將相機(jī)帶狀連接器連接到 Raspberry pi 中提供的相機(jī)插槽中

Pi 攝像頭可用于構(gòu)建各種有趣的項(xiàng)目,如Raspberry Pi 監(jiān)控?cái)z像頭、訪客監(jiān)控系統(tǒng)、家庭安全系統(tǒng)等。
人員計(jì)數(shù)器的Python程序說(shuō)明
此人群計(jì)數(shù) OpenCV 項(xiàng)目的完整 Python 代碼在頁(yè)面末尾給出。在這里,我們將解釋代碼的重要部分,以便更好地解釋。
因此,在代碼開(kāi)始時(shí),導(dǎo)入將在此項(xiàng)目中使用的所有必需庫(kù)。
導(dǎo)入簡(jiǎn)歷2 導(dǎo)入 imutils 從 imutils.object_detection 導(dǎo)入 non_max_suppression 將 numpy 導(dǎo)入為 np 導(dǎo)入請(qǐng)求 進(jìn)口時(shí)間 導(dǎo)入base64 從 matplotlib 導(dǎo)入 pyplot 作為 plt 從 urllib.request 導(dǎo)入 urlopen?
導(dǎo)入庫(kù)后,輸入 ThingSpeak 頻道 ID 并寫入您之前復(fù)制的 API 密鑰。
channel_id = 812060 # 在此處輸入頻道 ID
WRITE_API = 'X5AQ3EGIKMBYW31H' # 把你的寫密鑰放在這里
BASE_URL = "https://api.thingspeak.com/update?api_key= {}".format(WRITE_API)
現(xiàn)在,初始化 HOG(面向直方圖的對(duì)象描述符)。HOG 是最流行的目標(biāo)檢測(cè)技術(shù)之一,并已在多個(gè)應(yīng)用中使用。cv2.HOGDescriptor_getDefaultPeopleDetector()用于調(diào)用 OpenCV 的預(yù)訓(xùn)練模型進(jìn)行人員檢測(cè)。我們之前在之前的 OpenCV 教程中詳細(xì)解釋過(guò) HOG 。
豬 = cv2.HOGDescriptor() hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())
在檢測(cè)器()內(nèi)部,Pi 接收到一個(gè) RGB 圖像,該圖像被分成三個(gè)顏色通道。之后,它使用imutils調(diào)整圖像大小。然后它調(diào)用detectMultiScale()方法來(lái)分析圖像,使用 SVM 模型的分類結(jié)果來(lái)了解是否存在人。
def檢測(cè)器(圖像): image = imutils.resize(image, width=min(400, image.shape[1])) 克隆 = image.copy() rects, weights = hog.detectMultiScale(image, winStride=(4, 4), padding=(8, 8), scale=1.05)
有時(shí)捕獲框重疊并產(chǎn)生誤報(bào)或檢測(cè)錯(cuò)誤,因此下面的代碼將imutils的非最大抑制應(yīng)用于啟動(dòng)重疊框。
對(duì)于矩形中的 (x, y, w, h):
cv2.rectangle(圖像, (x, y), (x + w, y + h), (0, 0, 255), 2)
rects = np.array([[x, y, x + w, y + h] for (x, y, w, h) in rects])
結(jié)果 = non_max_suppression(rects,probs=None,overlapThresh=0.7)
返回結(jié)果
在record()函數(shù)中,它使用 OpenCV 中的VideoCapture()方法直接從 Pi 相機(jī)中檢索圖像,使用 imultis 調(diào)整圖像大小并將結(jié)果發(fā)送到 ThingSpeak。
def 記錄(sample_time=5):
相機(jī) = cv2.VideoCapture(0)
frame = imutils.resize(frame, width=min(400, frame.shape[1]))
結(jié)果=檢測(cè)器(frame.copy())
thingspeakHttp = BASE_URL + "&field1={}".format(result1)
測(cè)試 OpenCV 人員計(jì)數(shù)器
在啟動(dòng) python 腳本之前,首先檢查您的 PI 相機(jī)是否工作。檢查相機(jī)后,通過(guò)發(fā)出以下命令啟動(dòng) python 腳本:

然后你會(huì)發(fā)現(xiàn)彈出一個(gè)窗口,里面有你的視頻源。Pi 將獲取第一幀并使用 OpenCV 對(duì)其進(jìn)行處理以檢測(cè)人數(shù)。如果它檢測(cè)到人,你會(huì)在它周圍找到一個(gè)像這樣的框:

現(xiàn)在檢查您的 ThingSpeak 頻道,您可以在其中監(jiān)控來(lái)自世界任何地方的人群規(guī)模。

導(dǎo)入簡(jiǎn)歷2
導(dǎo)入 imutils
從 imutils.object_detection 導(dǎo)入 non_max_suppression
將 numpy 導(dǎo)入為 np
導(dǎo)入請(qǐng)求
進(jìn)口時(shí)間
導(dǎo)入base64
從 matplotlib 導(dǎo)入 pyplot 作為 plt
從 urllib.request 導(dǎo)入 urlopen
channel_id = 812060 # 在此處輸入頻道 ID
WRITE_API = 'X5AQ3EGIKMBYW31H' # 把你的寫密鑰放在這里
BASE_URL = "https://api.thingspeak.com/update?api_key={}".format(WRITE_API)
豬 = cv2.HOGDescriptor()
hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())
# 在[3]:
def檢測(cè)器(圖像):
image = imutils.resize(image, width=min(400, image.shape[1]))
克隆 = image.copy()
rects, weights = hog.detectMultiScale(image, winStride=(4, 4), padding=(8, 8), scale=1.05)
對(duì)于矩形中的 (x, y, w, h):
cv2.rectangle(圖像, (x, y), (x + w, y + h), (0, 0, 255), 2)
rects = np.array([[x, y, x + w, y + h] for (x, y, w, h) in rects])
結(jié)果 = non_max_suppression(rects,probs=None,overlapThresh=0.7)
返回結(jié)果
def 記錄(sample_time=5):
打印(“錄音”)
相機(jī) = cv2.VideoCapture(0)
初始化 = time.time()
# ubidots 樣本限制
如果 sample_time < 3:
采樣時(shí)間 = 1
而(真):
打印(“帽框”)
ret, frame = camera.read()
frame = imutils.resize(frame, width=min(400, frame.shape[1]))
結(jié)果=檢測(cè)器(frame.copy())
結(jié)果1 = len(結(jié)果)
打印(結(jié)果1)
對(duì)于 (xA, yA, xB, yB) 結(jié)果:
cv2.rectangle(frame, (xA, yA), (xB, yB), (0, 255, 0), 2)
plt.imshow(幀)
plt.show()
# 發(fā)送結(jié)果
如果 time.time() - init >= sample_time:
thingspeakHttp = BASE_URL + "&field1={}".format(result1)
打印(thingspeakHttp)
conn = urlopen(thingspeakHttp)
print("發(fā)送結(jié)果")
初始化 = time.time()
相機(jī).release()
cv2.destroyAllWindows()
# 在[7]:
定義主():
記錄()
# 在[8]:
如果 __name__ == '__main__':
主要的()
-
計(jì)數(shù)器
+關(guān)注
關(guān)注
32文章
2316瀏覽量
98176 -
OpenCV
+關(guān)注
關(guān)注
33文章
652瀏覽量
44787
發(fā)布評(píng)論請(qǐng)先 登錄
構(gòu)建一個(gè)Raspberry Pi PoE帽子
一個(gè)Raspberry Pi擴(kuò)展板
構(gòu)建Raspberry Pi電機(jī)驅(qū)動(dòng)器HAT的教程分享
如何使用OpenCV和Raspberry Pi構(gòu)建睡眠感應(yīng)和警報(bào)系統(tǒng)
構(gòu)建一個(gè)基于Raspberry Pi的藍(lán)牙揚(yáng)聲器
使用Raspberry Pi上的OpenCV庫(kù)構(gòu)建人臉識(shí)別系統(tǒng)
使用Raspberry Pi構(gòu)建一個(gè)智能車庫(kù)開(kāi)門器
如何在Raspberry Pi 3上安裝OpenCV4庫(kù)
使用Raspberry Pi構(gòu)建水位傳感器
構(gòu)建自己的Raspberry Pi ALPR停車系統(tǒng)
Raspberry Pi Zero便攜終端的構(gòu)建
尋找實(shí)用的Raspberry Pi項(xiàng)目? 制作一個(gè)智能傘架!
Raspberry Pi構(gòu)建復(fù)古風(fēng)格終端
使用Raspberry Pi構(gòu)建網(wǎng)絡(luò)攝像頭
使用Raspberry Pi構(gòu)建一個(gè)OpenCV人群計(jì)數(shù)裝置
評(píng)論