資料介紹
描述
系統總覽
如下圖所示,Raspberry Pi 將圖片從我的喂鳥器發送到 AWS 的 S3 存儲桶。當新圖像到達 S3 時,這會調用 Python Lambda 函數,將照片發送到 AWS Rekognition,后者使用其基于 ML 的圖像識別功能來確定照片中的內容。如果檢測到一只鳥,這會觸發一條發送至 SNS 主題的消息,您可以使用該消息來獲取文本或電子郵件。如果檢測到松鼠,則會向不同的 SNS 主題發送一條消息。因此,您可以使用文本通知自己發現了松鼠,這樣您就可以將其趕走,并使用電子郵件通知自己有趣的鳥類。或者你甚至可以連接 Raspberry Pi 以向任何入侵喂鳥器的松鼠射水(這可能是明年夏天的一個項目)。最后,我添加了一個使用AWS S3 靜態網站方式,讓您輕松查看最佳圖片。
要完成這個項目,您需要一些 Python 技能(我已經提供了我的代碼,但您需要根據自己的情況進行一些修改)和對 AWS 的中等程度的了解。

硬件
在封面照片中,您可以看到我的 Raspberry Pi 4 和高質量 (HQ) 相機。我開始使用適合 HQ 相機的 50 美元長焦鏡頭,但我已經改用從佳能 EOS 相機借來的佳能鏡頭。您需要購買一個適配器(來自 Arducam)才能將佳能鏡頭連接到相機(30 美元),但這非常值得。使用這樣的優質鏡頭,圖像非常好,而且與我原來的鏡頭不同,您可以盡可能近地放大。
樹莓派運動檢測
Raspberry Pi 只是一個帶有 ARM 處理器的非常小的 Linux 機器。有一個名為PI-TIMOLO的軟件包,我發現它非常有用。您可以在 Raspberry Pi 上運行它來檢測運動,并自動拍攝照片。您不需要將紅外運動檢測器連接到 Raspberry Pi(盡管這可能不是一個壞主意)。PI-TIMOLO 掃描來自您的相機的低分辨率流,如果它檢測到從一幀到下一幀的顯著差異,它會斷定某些東西已經移動,并暫時停止流,拍攝一張高分辨率照片并將其放入文件夾。
我將帶有長焦鏡頭的 Raspberry Pi 高質量 (HQ) 相機對準我的喂鳥器并設置了 PI-TIMOLO。您需要調整幾個 PI-TIMOLO 設置才能在特定情況下獲得良好的效果,但您可以忽略很多設置,例如與視頻和全景照片相關的設置。只需專注于圖像和運動設置。我將放一個我在 Github 存儲庫中使用的 PI-TIMOLO 設置的示例。
我在 Raspberry Pi 上運行了一個小型 Python 程序,它控制 PI-TIMOLO 放置照片的目錄。如果我的代碼在該文件夾中檢測到一張新照片,它會裁剪照片(稍后我將解釋)并進行 API 調用以將其發送到 AWS 中的 S3 存儲桶。這是代碼:
https://github.com/mesadowski/RaspberryPi-Bird-Image-Recognition/blob/main/s3_send_bird_pic_crop.py
要使此代碼正常工作,您需要在 Raspberry Pi 上安裝 boto(AWS Python 開發工具包),并在 AWS 中創建一個有權寫入 S3 的 IAM 用戶。您需要將該 IAM 用戶的 AWS 用戶憑證復制并粘貼到 Raspberry Pi 上 .aws 或 .boto 文件夾中的憑證文件中,以便您的 Python 代碼具有將文件放入 S3 存儲桶所需的憑證。
AWS S3、Lambda、Rekognition 和 SNS
一旦開始工作,您就可以在 AWS 中創建一個 lamdba 函數。Lambda 是 AWS 的旗艦無服務器計算服務。Lambda 是一段代碼,一旦被某個觸發器調用就會運行,觸發器可能是傳入的 API 調用或計時器,或者在我的情況下,是到達 S3 存儲桶的東西。一旦完成它的工作,Lambda 就會終止。這對我的基于 ML 的鳥和松鼠檢測器來說很好,因為它讓我無需運行單個服務器即可運行應用程序,因此非常經濟。在 AWS S3、Lambda、Rekognition 和 SNS 以及 S3 靜態網站之間,我擁有所有這些強大的功能,包括最先進的圖像識別、云存儲以及電子郵件和文本通知,而且它實際上是如果我可以接受標準的 Rekognition 服務(即,不是自定義標簽——稍后會詳細介紹),則免費。只需確保您的 Raspberry Pi 不會瘋狂地向 S3 發送太多照片,例如,如果您的運動檢測設置過于寬松,因為最終可能會增加太多的 API 調用。但是,如果相機每天拍攝大約 200 張照片,則運行成本很低,因為 AWS 免費套餐每月為您提供 5,000 次 Rekognition 調用。
要創建 Lambda,首先,您需要創建 Lambda 將代入的角色,該角色擁有 S3、Lambda、Rekognition 和 SNS 的權限。轉到 AWS 控制臺中的 IAM,并創建一個新角色并為其提供以下策略:

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

創建 Lambda 后,您希望將其設置為基于在 S3 中創建的新對象(即從 Raspberry Pi 發送的新照片)觸發。因此,您單擊 Trigger 按鈕并選擇 S3 存儲桶和文件夾(AWS 也稱為前綴),您的圖片將從 Raspberry Pi 發送到其中。然后,是時候輸入你的 Python 代碼了。這是我的,但您需要輸入自己的 SNS 主題標識符:
https://github.com/mesadowski/RaspberryPi-Bird-Image-Recognition/blob/main/BirdLambda.py
醒來后(新圖片到達 S3 時),Lambda 調用 Rekognition API 以查看照片中的內容。Rekognition 是一項 AWS 圖像識別服務。我在我博客上的一篇博文中描述了 Rekognition 。簡而言之,如果您向 Rekognition 提供圖像,它會告訴您它認為其中的內容。我發現 Rekognition 的開箱即用訓練使其能夠識別鳥類,并且有時可以識別正確的鳥類種類。它還可以識別松鼠,松鼠是飼養者周圍常見的害蟲。在上面的代碼中,我使用了標準的 Rekognition 服務,該服務經過預先訓練,可以識別常見的物體、動物和名人(以防名人出現在我的喂鳥器周圍)。
所以無論如何,我的 Lambda 代碼調用 Rekognition API 并查看響應以查看 Rekognition 看到的是鳥還是松鼠。我使用 AWS 控制臺創建了兩個 AWS 簡單通知服務 (SNS) 主題:一個用于鳥類觀察,一個用于松鼠觀察。因此,根據 Rekognition 在圖像中看到的內容,我的 Lambda 使用 SNS API 將消息發布到適當的 SNS 主題。您可以通過電子郵件或 SMS 文本訂閱 SNS 主題,并獲得 Rekognition 看到的鳥類類型的通知,以及松鼠目擊事件的通知。
挑戰
將 Raspberry Pi 配置為具有正確的 PI-TIMOLO 和攝像頭設置需要一些時間。您希望 PI-TIMOLO 足夠靈敏以在檢測到鳥時觸發照片,但又不至于敏感到風中飄動的幾片葉子會觸發照片。
這是我第一次開發 Lambda 函數。我已經在我的 Mac 上對大部分代碼進行了原型設計和測試,但是當我在 AWS 控制臺中創建 Lambda 代碼時調試起來有點困難,因為我是通過查看 AWS Cloudwatch 來調試它以查看發生了什么。通常,在您檢查 Cloudwatch 以查看是否有任何錯誤之前,最多有 5 分鐘的延遲。AWS 有一個用于在本地調試 Lambda 的工具(稱為 SAM),因此如果您要創建復雜的 Lambda,這可能值得學習,但這次我設法克服了它。
結果
使用開箱即用的 Rekognition 服務,我很快收到許多通知,告訴我圖片中有喂鳥器(不是開玩笑)或草坪家具。所以很容易過濾掉那些。然后它開始告訴我每張照片中都有草或“自然”,所以我不得不將其過濾掉。最終,我發現 Rekognition 正在識別圖片中有一只鳥的事實,但它無法識別物種。問題是我的圖像質量。以前,當我向 Rekognition 提供專業品質的鳥類照片時,它通常可以識別物種。但是我的照片沒有那么好。我發現通過裁剪照片以使鳥占據圖像的更高部分,Rekognition 傾向于更多地關注鳥并且有時可以識別鳥類。因此,我使用 Python Pillow 庫在我的 Raspberry Pi 代碼中添加了一些裁剪邏輯。從我的 Raspberry Pi 相機裁剪啄木鳥圖像(下圖)并將其發送到 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 確實確定它是一只啄木鳥(有一定的信心),雖然不是紅腹啄木鳥。它還認為它可能是一只閃爍的鳥(和一只雀,信心不足)。那是錯誤的,雖然當我在康奈爾鳥類學網站上查找閃爍時,事實證明它們是啄木鳥的一種,所以這個答案并不完全離譜。然而,Rekognition 有時會給出一些奇怪的結果。例如,下面的照片被 Rekognition 標記為“家禽”。也許它看起來有點像一只小雞?還有一次,Rekognition 認為我后院的一張照片中有一只企鵝。我查了一下,確實是一張黑白鳥的照片。當然,ML 圖像識別模型只知道它們之前提供的訓練圖像(由訓練模型的人提供)。他們不了解圖像的上下文,這會讓他們知道報告我的后院有一只企鵝是荒謬的。
Rekognition 自定義標簽
要獲得真正準確的結果,您可以考慮訓練 Rekognition 自定義標簽(或其他一些涉及自定義訓練的基于 ML 的方法)。按照我之前博客文章中的方法,我使用來自加州理工學院-UCSD 鳥類圖像數據集的圖像來訓練 Rekognition 在我所在地區的常見鳥類上。我放入了一些松鼠的照片,以便 Rekognition 也可以識別它們。訓練模型花了大約 1.4 小時,但結果令人印象深刻(盡管我發現我能夠接近我用幾行 Python 編寫的 fast.ai 模型。你可以在我的博客上閱讀). 在下面,您可以看到 Rekognition 自定義標簽在測試圖像上對東北部各種鳥類(和松鼠)的表現 - 幾乎永遠不會出錯(至少在使用專業質量圖片時)!

但是,雖然這項 ML 服務做得非常出色,但對于個人愛好者來說,整天運行的成本太高了。作為 AWS 免費套餐的一部分,您可以獲得幾個小時,但之后每小時收費 4.00 美元。幸運的是,我能夠在我的賬戶中獲得 100 美元的免費 AWS 積分,因此我可以免費試用。為了節省成本,AWS 建議您啟動服務、使用它,并在完成后將其關閉。所以你不能真正運行它幾個小時,這是我最初的設計。但是,對于企業而言,這項服務非常物有所值,而且與其他選項相比,它確實沒有那么貴。
要使用 Rekognition 自定義標簽,您需要稍微更改 Lambda 函數以使用detect_custom_labels API 調用而不是detect_labels調用(這里是 Github 中代碼的鏈接)。然后,啟動模型(您可以為此使用 AWS CLI)。如果您在訓練完成后單擊 AWS 控制臺中的模型并滾動到底部,AWS 會為您提供 AWS 命令??行命令,您可以將其剪切并粘貼到終端窗口中。等待幾分鐘,AWS 控制臺最終會告訴您它正在運行。只需確保在完成后停止模型,這樣您就不會繼續收取費用 - 這些可以加起來!
當我嘗試使用 Raspberry Pi 相機拍攝的照片使用 Rekognition 自定義標簽時,最初我發現 Rekognition 自定義標簽無法識別任何內容。但是當我裁剪圖像時,Rekognition 正確地確定我的啄木鳥圖片(上圖)不僅僅是一只啄木鳥,而是一只紅腹啄木鳥。這非常酷,盡管當我向 Rekognition Custom Labels 發送大約 1200 張圖片時,我學到了一些關于訓練模型的艱難課程。鳥類 ID 通常是錯誤的,因為該模型已經在我的喂食器上不太可能看到的圖像上進行了訓練(例如,每年這個時候藍鳥在這里并不常見,但它認為它看到了很多藍鳥)。此外,我的圖像有時會因為鳥在移動而失焦。所以如果我要一直運行這個模型,我
考慮到 Rekognition 自定義標簽的成本,我可能會在一段時間內使用更便宜的現成 Rekognition 運行它,并考慮在未來轉向更便宜的自定義模型(例如fast.我的博客上描述的ai模型)。
PS Raspberry Pi 的人們為 Magpi(Raspberry Pi 官方雜志)寫了一篇關于這個項目的文章。你可以在這里找到它。
- 使用Tensorflow的Raspberry Pi Covid口罩檢測器
- 使用Raspberry Pi的Motioneyeos網絡攝像頭運動檢測
- 使用Google Coral和Raspberry Pi進行ML鳥類識別
- 基于諾基亞5110的Raspberry Pi帽子 0次下載
- 使用步進電機拉下無花果樹枝以嚇跑鳥類和松鼠
- 可以檢測鴿子并在Raspberry Pi上運行的系統
- 基于Microsoft Azure和Raspberry Pi的鳥類探測器
- 使用Raspberry Pi的溫度跟蹤器
- 可視頻直播的Raspberry Pi網絡控制機器人 14次下載
- NDIR氣體檢測器解決方案和PID氣體檢測器解決方案
- 《愛上Raspberry Pi》中譯版-電子書籍.pdf 0次下載
- Instant Raspberry Pi Gaming 6次下載
- Raspberry_Pi詳解 16次下載
- raspberry_pi各版本差別 0次下載
- Getting Started with Raspberry Pi 0次下載
- 電路檢測器和電流檢測器的區別 1013次閱讀
- 5分鐘內將Raspberry Pi Pico變成簡單的示波器+波形發生器 2317次閱讀
- 使用Raspberry Pi Pico W和MicroPython開發物聯網應用 2180次閱讀
- 什么是過零檢測器 過零檢測器的原理 3130次閱讀
- 用于測試項目的4個最佳樹莓派Raspberry Pi模擬器 6823次閱讀
- 如何通過Raspberry Pi設置CE電流監視器 2342次閱讀
- 基于樹莓派產品 Raspberry Pi微控制器板的優缺點 2983次閱讀
- 微雪電子ZeroW| Raspberry Pi ZeroW主板簡介 2618次閱讀
- 微雪電子Raspberry Pi 3 Model主板簡介 3141次閱讀
- 微雪電子Raspberry Pi 3 Model擴展板簡介 1667次閱讀
- 利用Raspberry Pi構建存儲和虛擬化時間序列數據 952次閱讀
- 一文了解Raspberry Pi 4各項性能跑分 3w次閱讀
- 如何用賽靈思FPGA實現4G無線球形檢測器 1174次閱讀
- 視覺享受!用Raspberry Pi實現圣誕樹燈光秀 8344次閱讀
- 酸雨檢測器 1.6w次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數據手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論