電子發(fā)燒友App

硬聲App

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

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

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>基于ML的鳥類和松鼠檢測器(Raspberry Pi和AWS)

基于ML的鳥類和松鼠檢測器(Raspberry Pi和AWS)

2022-11-15 | zip | 0.49 MB | 次下載 | 免費(fèi)

資料介紹

描述

系統(tǒng)總覽

如下圖所示,Raspberry Pi 將圖片從我的喂鳥器發(fā)送到 AWS 的 S3 存儲桶。當(dāng)新圖像到達(dá) S3 時(shí),這會調(diào)用 Python Lambda 函數(shù),將照片發(fā)送到 AWS Rekognition,后者使用其基于 ML 的圖像識別功能來確定照片中的內(nèi)容。如果檢測到一只鳥,這會觸發(fā)一條發(fā)送至 SNS 主題的消息,您可以使用該消息來獲取文本或電子郵件。如果檢測到松鼠,則會向不同的 SNS 主題發(fā)送一條消息。因此,您可以使用文本通知自己發(fā)現(xiàn)了松鼠,這樣您就可以將其趕走,并使用電子郵件通知自己有趣的鳥類。或者你甚至可以連接 Raspberry Pi 以向任何入侵喂鳥器的松鼠射水(這可能是明年夏天的一個(gè)項(xiàng)目)。最后,我添加了一個(gè)使用AWS S3 靜態(tài)網(wǎng)站方式,讓您輕松查看最佳圖片。

要完成這個(gè)項(xiàng)目,您需要一些 Python 技能(我已經(jīng)提供了我的代碼,但您需要根據(jù)自己的情況進(jìn)行一些修改)和對 AWS 的中等程度的了解。

poYBAGNy2mCAaleCAABaemuQTmg675.png
系統(tǒng)架構(gòu)
?

硬件

在封面照片中,您可以看到我的 Raspberry Pi 4 和高質(zhì)量 (HQ) 相機(jī)。我開始使用適合 HQ 相機(jī)的 50 美元長焦鏡頭,但我已經(jīng)改用從佳能 EOS 相機(jī)借來的佳能鏡頭。您需要購買一個(gè)適配器(來自 Arducam)才能將佳能鏡頭連接到相機(jī)(30 美元),但這非常值得。使用這樣的優(yōu)質(zhì)鏡頭,圖像非常好,而且與我原來的鏡頭不同,您可以盡可能近地放大。

樹莓派運(yùn)動檢測

Raspberry Pi 只是一個(gè)帶有 ARM 處理器的非常小的 Linux 機(jī)器。有一個(gè)名為PI-TIMOLO的軟件包,我發(fā)現(xiàn)它非常有用。您可以在 Raspberry Pi 上運(yùn)行它來檢測運(yùn)動,并自動拍攝照片。您不需要將紅外運(yùn)動檢測器連接到 Raspberry Pi(盡管這可能不是一個(gè)壞主意)。PI-TIMOLO 掃描來自您的相機(jī)的低分辨率流,如果它檢測到從一幀到下一幀的顯著差異,它會斷定某些東西已經(jīng)移動,并暫時(shí)停止流,拍攝一張高分辨率照片并將其放入文件夾。

我將帶有長焦鏡頭的 Raspberry Pi 高質(zhì)量 (HQ) 相機(jī)對準(zhǔn)我的喂鳥器并設(shè)置了 PI-TIMOLO。您需要調(diào)整幾個(gè) PI-TIMOLO 設(shè)置才能在特定情況下獲得良好的效果,但您可以忽略很多設(shè)置,例如與視頻和全景照片相關(guān)的設(shè)置。只需專注于圖像和運(yùn)動設(shè)置。我將放一個(gè)我在 Github 存儲庫中使用的 PI-TIMOLO 設(shè)置的示例。

我在 Raspberry Pi 上運(yùn)行了一個(gè)小型 Python 程序,它控制 PI-TIMOLO 放置照片的目錄。如果我的代碼在該文件夾中檢測到一張新照片,它會裁剪照片(稍后我將解釋)并進(jìn)行 API 調(diào)用以將其發(fā)送到 AWS 中的 S3 存儲桶。這是代碼:

https://github.com/mesadowski/RaspberryPi-Bird-Image-Recognition/blob/main/s3_send_bird_pic_crop.py

要使此代碼正常工作,您需要在 Raspberry Pi 上安裝 boto(AWS Python 開發(fā)工具包),并在 AWS 中創(chuàng)建一個(gè)有權(quán)寫入 S3 的 IAM 用戶。您需要將該 IAM 用戶的 AWS 用戶憑證復(fù)制并粘貼到 Raspberry Pi 上 .aws 或 .boto 文件夾中的憑證文件中,以便您的 Python 代碼具有將文件放入 S3 存儲桶所需的憑證。

AWS S3、Lambda、Rekognition 和 SNS

一旦開始工作,您就可以在 AWS 中創(chuàng)建一個(gè) lamdba 函數(shù)。Lambda 是 AWS 的旗艦無服務(wù)器計(jì)算服務(wù)。Lambda 是一段代碼,一旦被某個(gè)觸發(fā)器調(diào)用就會運(yùn)行,觸發(fā)器可能是傳入的 API 調(diào)用或計(jì)時(shí)器,或者在我的情況下,是到達(dá) S3 存儲桶的東西。一旦完成它的工作,Lambda 就會終止。這對我的基于 ML 的鳥和松鼠檢測器來說很好,因?yàn)樗屛覠o需運(yùn)行單個(gè)服務(wù)器即可運(yùn)行應(yīng)用程序,因此非常經(jīng)濟(jì)。在 AWS S3、Lambda、Rekognition 和 SNS 以及 S3 靜態(tài)網(wǎng)站之間,我擁有所有這些強(qiáng)大的功能,包括最先進(jìn)的圖像識別、云存儲以及電子郵件和文本通知,而且它實(shí)際上是如果我可以接受標(biāo)準(zhǔn)的 Rekognition 服務(wù)(即,不是自定義標(biāo)簽——稍后會詳細(xì)介紹),則免費(fèi)。只需確保您的 Raspberry Pi 不會瘋狂地向 S3 發(fā)送太多照片,例如,如果您的運(yùn)動檢測設(shè)置過于寬松,因?yàn)樽罱K可能會增加太多的 API 調(diào)用。但是,如果相機(jī)每天拍攝大約 200 張照片,則運(yùn)行成本很低,因?yàn)?AWS 免費(fèi)套餐每月為您提供 5,000 次 Rekognition 調(diào)用。

要?jiǎng)?chuàng)建 Lambda,首先,您需要?jiǎng)?chuàng)建 Lambda 將代入的角色,該角色擁有 S3、Lambda、Rekognition 和 SNS 的權(quán)限。轉(zhuǎn)到 AWS 控制臺中的 IAM,并創(chuàng)建一個(gè)新角色并為其提供以下策略:

pYYBAGNy2mKAJLIyAADeY4jMy8Q674.png
?

然后轉(zhuǎn)到 AWS 控制臺中的 Lambda。單擊創(chuàng)建函數(shù),然后選擇從頭開始作者。命名您的 Lambda,并選擇 Python 3.8 作為您的語言,并確保為其提供您之前創(chuàng)建的角色,以便它可以訪問 S3、Rekognition 和 SNS。

poYBAGNy2mWAEmtlAAC3jaGDNcY481.png
?

創(chuàng)建 Lambda 后,您希望將其設(shè)置為基于在 S3 中創(chuàng)建的新對象(即從 Raspberry Pi 發(fā)送的新照片)觸發(fā)。因此,您單擊 Trigger 按鈕并選擇 S3 存儲桶和文件夾(AWS 也稱為前綴),您的圖片將從 Raspberry Pi 發(fā)送到其中。然后,是時(shí)候輸入你的 Python 代碼了。這是我的,但您需要輸入自己的 SNS 主題標(biāo)識符:

https://github.com/mesadowski/RaspberryPi-Bird-Image-Recognition/blob/main/BirdLambda.py

醒來后(新圖片到達(dá) S3 時(shí)),Lambda 調(diào)用 Rekognition API 以查看照片中的內(nèi)容。Rekognition 是一項(xiàng) AWS 圖像識別服務(wù)。我在我博客上的一篇博文中描述了 Rekognition 。簡而言之,如果您向 Rekognition 提供圖像,它會告訴您它認(rèn)為其中的內(nèi)容。我發(fā)現(xiàn) Rekognition 的開箱即用訓(xùn)練使其能夠識別鳥類,并且有時(shí)可以識別正確的鳥類種類。它還可以識別松鼠,松鼠是飼養(yǎng)者周圍常見的害蟲。在上面的代碼中,我使用了標(biāo)準(zhǔn)的 Rekognition 服務(wù),該服務(wù)經(jīng)過預(yù)先訓(xùn)練,可以識別常見的物體、動物和名人(以防名人出現(xiàn)在我的喂鳥器周圍)。

所以無論如何,我的 Lambda 代碼調(diào)用 Rekognition API 并查看響應(yīng)以查看 Rekognition 看到的是鳥還是松鼠。我使用 AWS 控制臺創(chuàng)建了兩個(gè) AWS 簡單通知服務(wù) (SNS) 主題:一個(gè)用于鳥類觀察,一個(gè)用于松鼠觀察。因此,根據(jù) Rekognition 在圖像中看到的內(nèi)容,我的 Lambda 使用 SNS API 將消息發(fā)布到適當(dāng)?shù)?SNS 主題。您可以通過電子郵件或 SMS 文本訂閱 SNS 主題,并獲得 Rekognition 看到的鳥類類型的通知,以及松鼠目擊事件的通知。

挑戰(zhàn)

將 Raspberry Pi 配置為具有正確的 PI-TIMOLO 和攝像頭設(shè)置需要一些時(shí)間。您希望 PI-TIMOLO 足夠靈敏以在檢測到鳥時(shí)觸發(fā)照片,但又不至于敏感到風(fēng)中飄動的幾片葉子會觸發(fā)照片。

這是我第一次開發(fā) Lambda 函數(shù)。我已經(jīng)在我的 Mac 上對大部分代碼進(jìn)行了原型設(shè)計(jì)和測試,但是當(dāng)我在 AWS 控制臺中創(chuàng)建 Lambda 代碼時(shí)調(diào)試起來有點(diǎn)困難,因?yàn)槲沂峭ㄟ^查看 AWS Cloudwatch 來調(diào)試它以查看發(fā)生了什么。通常,在您檢查 Cloudwatch 以查看是否有任何錯(cuò)誤之前,最多有 5 分鐘的延遲。AWS 有一個(gè)用于在本地調(diào)試 Lambda 的工具(稱為 SAM),因此如果您要?jiǎng)?chuàng)建復(fù)雜的 Lambda,這可能值得學(xué)習(xí),但這次我設(shè)法克服了它。

結(jié)果

使用開箱即用的 Rekognition 服務(wù),我很快收到許多通知,告訴我圖片中有喂鳥器(不是開玩笑)或草坪家具。所以很容易過濾掉那些。然后它開始告訴我每張照片中都有草或“自然”,所以我不得不將其過濾掉。最終,我發(fā)現(xiàn) Rekognition 正在識別圖片中有一只鳥的事實(shí),但它無法識別物種。問題是我的圖像質(zhì)量。以前,當(dāng)我向 Rekognition 提供專業(yè)品質(zhì)的鳥類照片時(shí),它通常可以識別物種。但是我的照片沒有那么好。我發(fā)現(xiàn)通過裁剪照片以使鳥占據(jù)圖像的更高部分,Rekognition 傾向于更多地關(guān)注鳥并且有時(shí)可以識別鳥類。因此,我使用 Python Pillow 庫在我的 Raspberry Pi 代碼中添加了一些裁剪邏輯。從我的 Raspberry Pi 相機(jī)裁剪啄木鳥圖像(下圖)并將其發(fā)送到 Rekognition 后,我從 SNS 收到了以下通知:

?
?

Detected labels for photo at time 2020-11-22-18:34:11
Bird (Confidence 99.25276184082031)
Flicker Bird (Confidence 78.45641326904297)
Woodpecker (Confidence 78.45641326904297)
Finch (Confidence 54.26727294921875)
in photo new-bird-images/2020-11-22-13-34-09.jpg

這是一只紅腹啄木鳥,因此 Rekognition 確實(shí)確定它是一只啄木鳥(有一定的信心),雖然不是紅腹啄木鳥。它還認(rèn)為它可能是一只閃爍的鳥(和一只雀,信心不足)。那是錯(cuò)誤的,雖然當(dāng)我在康奈爾鳥類學(xué)網(wǎng)站上查找閃爍時(shí),事實(shí)證明它們是啄木鳥的一種,所以這個(gè)答案并不完全離譜。然而,Rekognition 有時(shí)會給出一些奇怪的結(jié)果。例如,下面的照片被 Rekognition 標(biāo)記為“家禽”。也許它看起來有點(diǎn)像一只小雞?還有一次,Rekognition 認(rèn)為我后院的一張照片中有一只企鵝。我查了一下,確實(shí)是一張黑白鳥的照片。當(dāng)然,ML 圖像識別模型只知道它們之前提供的訓(xùn)練圖像(由訓(xùn)練模型的人提供)。他們不了解圖像的上下文,這會讓他們知道報(bào)告我的后院有一只企鵝是荒謬的。

Rekognition 自定義標(biāo)簽

要獲得真正準(zhǔn)確的結(jié)果,您可以考慮訓(xùn)練 Rekognition 自定義標(biāo)簽(或其他一些涉及自定義訓(xùn)練的基于 ML 的方法)。按照我之前博客文章中的方法,我使用來自加州理工學(xué)院-UCSD 鳥類圖像數(shù)據(jù)集的圖像來訓(xùn)練 Rekognition 在我所在地區(qū)的常見鳥類上。我放入了一些松鼠的照片,以便 Rekognition 也可以識別它們。訓(xùn)練模型花了大約 1.4 小時(shí),但結(jié)果令人印象深刻(盡管我發(fā)現(xiàn)我能夠接近我用幾行 Python 編寫的 fast.ai 模型。你可以在我的博客上閱讀). 在下面,您可以看到 Rekognition 自定義標(biāo)簽在測試圖像上對東北部各種鳥類(和松鼠)的表現(xiàn) - 幾乎永遠(yuǎn)不會出錯(cuò)(至少在使用專業(yè)質(zhì)量圖片時(shí))!

poYBAGNy2myAboGMAADZiMqPzm0986.png
?

但是,雖然這項(xiàng) ML 服務(wù)做得非常出色,但對于個(gè)人愛好者來說,整天運(yùn)行的成本太高了。作為 AWS 免費(fèi)套餐的一部分,您可以獲得幾個(gè)小時(shí),但之后每小時(shí)收費(fèi) 4.00 美元。幸運(yùn)的是,我能夠在我的賬戶中獲得 100 美元的免費(fèi) AWS 積分,因此我可以免費(fèi)試用。為了節(jié)省成本,AWS 建議您啟動服務(wù)、使用它,并在完成后將其關(guān)閉。所以你不能真正運(yùn)行它幾個(gè)小時(shí),這是我最初的設(shè)計(jì)。但是,對于企業(yè)而言,這項(xiàng)服務(wù)非常物有所值,而且與其他選項(xiàng)相比,它確實(shí)沒有那么貴。

要使用 Rekognition 自定義標(biāo)簽,您需要稍微更改 Lambda 函數(shù)以使用detect_custom_labels API 調(diào)用而不是detect_labels調(diào)用(這里是 Github 中代碼的鏈接)然后,啟動模型(您可以為此使用 AWS CLI)。如果您在訓(xùn)練完成后單擊 AWS 控制臺中的模型并滾動到底部,AWS 會為您提供 AWS 命令??行命令,您可以將其剪切并粘貼到終端窗口中。等待幾分鐘,AWS 控制臺最終會告訴您它正在運(yùn)行。只需確保在完成后停止模型,這樣您就不會繼續(xù)收取費(fèi)用 - 這些可以加起來!

當(dāng)我嘗試使用 Raspberry Pi 相機(jī)拍攝的照片使用 Rekognition 自定義標(biāo)簽時(shí),最初我發(fā)現(xiàn) Rekognition 自定義標(biāo)簽無法識別任何內(nèi)容。但是當(dāng)我裁剪圖像時(shí),Rekognition 正確地確定我的啄木鳥圖片(上圖)不僅僅是一只啄木鳥,而是一只紅腹啄木鳥。這非???,盡管當(dāng)我向 Rekognition Custom Labels 發(fā)送大約 1200 張圖片時(shí),我學(xué)到了一些關(guān)于訓(xùn)練模型的艱難課程。鳥類 ID 通常是錯(cuò)誤的,因?yàn)樵撃P鸵呀?jīng)在我的喂食器上不太可能看到的圖像上進(jìn)行了訓(xùn)練(例如,每年這個(gè)時(shí)候藍(lán)鳥在這里并不常見,但它認(rèn)為它看到了很多藍(lán)鳥)。此外,我的圖像有時(shí)會因?yàn)轼B在移動而失焦。所以如果我要一直運(yùn)行這個(gè)模型,我

考慮到 Rekognition 自定義標(biāo)簽的成本,我可能會在一段時(shí)間內(nèi)使用更便宜的現(xiàn)成 Rekognition 運(yùn)行它,并考慮在未來轉(zhuǎn)向更便宜的自定義模型(例如fast.我的博客上描述的ai模型)。

PS Raspberry Pi 的人們?yōu)?Magpi(Raspberry Pi 官方雜志)寫了一篇關(guān)于這個(gè)項(xiàng)目的文章。你可以在這里找到它。


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
  2. 1.06 MB  |  532次下載  |  免費(fèi)
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費(fèi)
  5. 3TC358743XBG評估板參考手冊
  6. 1.36 MB  |  330次下載  |  免費(fèi)
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費(fèi)
  9. 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費(fèi)
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費(fèi)
  13. 7元宇宙底層硬件系列報(bào)告
  14. 13.42 MB  |  182次下載  |  免費(fèi)
  15. 8FP5207XR-G1中文應(yīng)用手冊
  16. 1.09 MB  |  178次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21549次下載  |  免費(fèi)
  9. 5電氣工程師手冊免費(fèi)下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實(shí)例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動電路設(shè)計(jì)》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191187次下載  |  免費(fèi)
  13. 7十天學(xué)會AVR單片機(jī)與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)