0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用Raspberry Pi構(gòu)建一個(gè)OpenCV人群計(jì)數(shù)裝置

科技觀察員 ? 來(lái)源:circuitdigest ? 作者:Ashish Choudhary ? 2022-08-12 17:24 ? 次閱讀

在當(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)畫(huà)和交互式可視化。

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ù)。

poYBAGL2G9yANWtYAAV_QsSAwLY168.png

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

pYYBAGL2G9mAP_F6AACTVJwX4vg481.png

在此之后,驗(yàn)證您的電子郵件 ID,然后單擊繼續(xù)。

現(xiàn)在,登錄后,單擊“新建頻道”按鈕創(chuàng)建一個(gè)新頻道。

poYBAGL2G9WAY40aAABNZul2bSk502.png

單擊“新頻道”后,輸入您要在此頻道上上傳的數(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。

pYYBAGL2G9GAQGFpAADkpq1TYpw824.png

硬件設(shè)置

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

pYYBAGL2G82AfjJ3AAWsaCyClac229.png

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 并寫(xiě)入您之前復(fù)制的 API 密鑰。

channel_id = 812060 # 在此處輸入頻道 ID
WRITE_API = 'X5AQ3EGIKMBYW31H' # 把你的寫(xiě)密鑰放在這里
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 腳本:

pYYBAGL2G8CAWupFAACo_jsQkhw829.png

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

poYBAGL2G72AHC-nAARnughj7DI503.png

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

poYBAGL2G7iAQh3yAACs2ndMEHM194.png

導(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' # 把你的寫(xiě)密鑰放在這里
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):
打?。ā颁浺簟保?br /> 相機(jī) = cv2.VideoCapture(0)
初始化 = time.time()
# ubidots 樣本限制
如果 sample_time < 3:
采樣時(shí)間 = 1
而(真):
打?。ā懊笨颉保?br /> ret, frame = camera.read()
frame = imutils.resize(frame, width=min(400, frame.shape[1]))
結(jié)果=檢測(cè)器(frame.copy())
結(jié)果1 = len(結(jié)果)
打?。ńY(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__':
主要的()

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 計(jì)數(shù)器
    +關(guān)注

    關(guān)注

    32

    文章

    2248

    瀏覽量

    94178
  • OpenCV
    +關(guān)注

    關(guān)注

    29

    文章

    623

    瀏覽量

    41177
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何使用Raspberry Pi3和藍(lán)牙構(gòu)建遙控汽車

    今天我們將使用Raspberry Pi 3和藍(lán)牙構(gòu)建遙控汽車,在這里我們將使用智能手機(jī)作為遙控器來(lái)控制汽車。
    的頭像 發(fā)表于 11-21 17:14 ?2393次閱讀
    如何使用<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b>3和藍(lán)牙<b class='flag-5'>構(gòu)建</b>遙控汽車

    個(gè)Raspberry Pi擴(kuò)展板

    描述clumsyMIDI - 樹(shù)莓派擴(kuò)展板個(gè) Raspberry Pi 擴(kuò)展板,包含個(gè) MI
    發(fā)表于 07-29 06:12

    構(gòu)建Raspberry Pi電機(jī)驅(qū)動(dòng)器HAT的教程分享

    本教程中,我們將構(gòu)建個(gè)Raspberry Pi 電機(jī)驅(qū)動(dòng)器 HAT來(lái)驅(qū)動(dòng)直流和步進(jìn)電機(jī)。此電機(jī)驅(qū)動(dòng)器 HAT 包含
    發(fā)表于 08-05 16:20 ?1369次閱讀
    <b class='flag-5'>構(gòu)建</b><b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b>電機(jī)驅(qū)動(dòng)器HAT的教程分享

    如何使用OpenCVRaspberry Pi構(gòu)建睡眠感應(yīng)和警報(bào)系統(tǒng)

    在這個(gè)項(xiàng)目中,我們將使用 Raspberry PiOpenCVPi 攝像頭模塊為駕駛員構(gòu)建睡眠感應(yīng)和警報(bào)系統(tǒng)。該系統(tǒng)的基本目的是跟蹤
    發(fā)表于 08-09 17:07 ?666次閱讀
    如何使用<b class='flag-5'>OpenCV</b>和<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b><b class='flag-5'>構(gòu)建</b>睡眠感應(yīng)和警報(bào)系統(tǒng)

    構(gòu)建個(gè)基于Raspberry Pi的藍(lán)牙揚(yáng)聲器

     在這篇文章中,我們將通過(guò)融合 A2DP、Linux 和音頻編解碼器的強(qiáng)大功能來(lái)構(gòu)建基于 Raspberry Pi 的藍(lán)牙揚(yáng)聲器,以將數(shù)據(jù)包從音頻源無(wú)線傳輸?shù)揭纛l接收器。為此,我們將破解
    發(fā)表于 08-31 16:22 ?1934次閱讀
    <b class='flag-5'>構(gòu)建</b><b class='flag-5'>一</b><b class='flag-5'>個(gè)</b>基于<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b>的藍(lán)牙揚(yáng)聲器

    Raspberry Pi上安裝Android的方法

    Raspberry Pi 中使用的流行操作系統(tǒng)是 Raspbian,它是個(gè)基于 linux 的 Raspberry
    的頭像 發(fā)表于 09-05 15:10 ?1.8w次閱讀
    在<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b>上安裝Android的方法

    使用Raspberry Pi上的OpenCV庫(kù)構(gòu)建人臉識(shí)別系統(tǒng)

    在本教程中,我們將學(xué)習(xí)如何使用 Raspberry Pi 上的 OpenCV 庫(kù)構(gòu)建我們自己的人臉識(shí)別系統(tǒng)。將此系統(tǒng)安裝在便攜式 Raspberry
    發(fā)表于 09-07 15:48 ?1146次閱讀
    使用<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b>上的<b class='flag-5'>OpenCV</b>庫(kù)<b class='flag-5'>構(gòu)建</b>人臉識(shí)別系統(tǒng)

    使用Raspberry Pi構(gòu)建個(gè)智能車庫(kù)開(kāi)門器

    在本教程中,我們將使用 Raspberry Pi 構(gòu)建個(gè)智能車庫(kù)開(kāi)門器。這里將創(chuàng)建
    的頭像 發(fā)表于 09-07 15:54 ?2078次閱讀
    使用<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b><b class='flag-5'>構(gòu)建</b><b class='flag-5'>一</b><b class='flag-5'>個(gè)</b>智能車庫(kù)開(kāi)門器

    如何在Raspberry Pi 3上安裝OpenCV4庫(kù)

    今天我們將學(xué)習(xí)如何在 Raspberry Pi 3 上安裝 OpenCV4 庫(kù),以便我們可以將其用于計(jì)算機(jī)視覺(jué)應(yīng)用程序。這將允許 OpenCV 在像
    的頭像 發(fā)表于 09-08 16:09 ?1544次閱讀
    如何在<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> 3上安裝<b class='flag-5'>OpenCV</b>4庫(kù)

    使用Raspberry Pi構(gòu)建水位傳感器

    電子發(fā)燒友網(wǎng)站提供《使用Raspberry Pi構(gòu)建水位傳感器.zip》資料免費(fèi)下載
    發(fā)表于 10-28 16:08 ?0次下載
    使用<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b><b class='flag-5'>構(gòu)建</b>水位傳感器

    構(gòu)建自己的Raspberry Pi ALPR停車系統(tǒng)

    電子發(fā)燒友網(wǎng)站提供《構(gòu)建自己的Raspberry Pi ALPR停車系統(tǒng).zip》資料免費(fèi)下載
    發(fā)表于 11-08 11:14 ?0次下載
    <b class='flag-5'>構(gòu)建</b>自己的<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> ALPR停車系統(tǒng)

    Raspberry Pi Zero便攜終端的構(gòu)建

    電子發(fā)燒友網(wǎng)站提供《Raspberry Pi Zero便攜終端的構(gòu)建.zip》資料免費(fèi)下載
    發(fā)表于 01-05 10:43 ?0次下載
    <b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> Zero便攜終端的<b class='flag-5'>構(gòu)建</b>

    尋找實(shí)用的Raspberry Pi項(xiàng)目? 制作個(gè)智能傘架!

    本教程將分步指導(dǎo)您如何制作個(gè)智能傘架。這是我最喜歡的Raspberry Pi 項(xiàng)目之。
    的頭像 發(fā)表于 02-24 17:22 ?914次閱讀
    尋找實(shí)用的<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b>項(xiàng)目? 制作<b class='flag-5'>一</b><b class='flag-5'>個(gè)</b>智能傘架!

    Raspberry Pi構(gòu)建復(fù)古風(fēng)格終端

    電子發(fā)燒友網(wǎng)站提供《Raspberry Pi構(gòu)建復(fù)古風(fēng)格終端.zip》資料免費(fèi)下載
    發(fā)表于 07-11 11:41 ?0次下載
    <b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b><b class='flag-5'>構(gòu)建</b>復(fù)古風(fēng)格終端

    使用Raspberry Pi構(gòu)建網(wǎng)絡(luò)攝像頭

    電子發(fā)燒友網(wǎng)站提供《使用Raspberry Pi構(gòu)建網(wǎng)絡(luò)攝像頭.zip》資料免費(fèi)下載
    發(fā)表于 07-12 11:30 ?0次下載
    使用<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b><b class='flag-5'>構(gòu)建</b>網(wǎng)絡(luò)攝像頭