女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于ESP32的TinyML圖像分類攝像頭的設計方案

科技觀察員 ? 來源: MJRoBot ? 作者: MJRoBot ? 2022-04-29 16:41 ? 次閱讀

項目背景

我們正面臨著越來越多的嵌入機器學習革命。而當我們談到機器學習(ML)時,首先想到的就是圖像分類,一種 ML Hello World!

ESP32-CAM 是最受歡迎且價格合理的已集成攝像頭的開發板之一,它結合了 Espressif ESP32-S MCU 芯片和 ArduCam OV2640 攝像頭。

ESP32 芯片功能強大,甚至可以處理圖像。它包括 I2C、SPI、UART 通信以及 PWM 和 DAC 輸出。

參數:

工作電壓:4.75-5.25V

飛濺:默認 32Mbit

RAM:內部 520KB + 外部 8MB PSRAM

無線網絡:802.11b/g/n/e/i

藍牙:藍牙 4.2BR/EDR 和 BLE 標準

支持接口(2Mbps):UART、SPI、I2C、PWM

支持TF卡:最大支持4G

IO口:9

串口速率:默認115200bps

頻譜范圍:2400 ~2483.5MHz

天線形式:板載PCB天線,增益2dBi

圖像輸出格式:JPEG(僅支持OV2640)、BMP、GRAYSCALE

pYYBAGJrpBaAdu3jAAN9MvWlhn8537.png

下面,一般電路板引腳排列:

poYBAGJrpBKAdO7LAAI4-uGd_GU340.png

請注意,此設備沒有集成 USB-TTL 串行模塊,因此要將代碼上傳到 ESP32-CAM 需要一個特殊的適配器,如下所示:

poYBAGJrpAqASFiyAAIf0iDQaNc523.png

或 USB-TTL 串行轉換適配器如下:

poYBAGJrpAeAYIRAAAWte5XzKL8809.png

如果你想了解 ESP32-CAM,我強烈推薦Rui Santos 的書籍和教程

Arduino IDE 上安裝 ESP32-Cam

從 Arduino IDE 打開首選項窗口并轉到:Arduino 》偏好

使用以下行輸入:

https://dl.espressif.com/dl/package_esp32_index.json

Additional Board Manager URLs 中輸入下圖內容

pYYBAGJrpAOACRnKAAGJaRYETn0024.png

接著,打開 boards manager,轉到Tools 》 Board 》 Boards Manager.。。并使用esp32 輸入。選擇并安裝最新的軟件包

poYBAGJro_-AR8hJAAGpMS5r9SM184.png

選擇 ESP32 開發板:

例如,AI-Thinker ESP32-CAM

poYBAGJro_uACO5BAAMqdyYd_0Q188.png

最后別忘記選擇連接 ESP32-Cam的端口

這就對了!設備應該沒問題。讓我們做一些測試。

用 BLINK 測試電路板
ESP32-CAM 有一個與 GPIO33 連接的內置 LED。因此,相應地更改 Blink 草圖:

#define LED_BUILT_IN 33 void setup() { pinMode(LED_BUILT_IN, OUTPUT); // Set the pin as output } // Remember that the pin work with inverted logic // LOW to Turn on and HIGH to turn off void loop() { digitalWrite(LED_BUILT_IN, LOW); //Turn on delay (1000); //Wait 1 sec digitalWrite(LED_BUILT_IN, HIGH); //Turn off delay (1000); //Wait 1 sec }

特別提醒,LED 位于電路板下方。

測試 WiFi
ESP32S 的聲音特性之一是其 WiFi 功能。所以,讓我們測試一下它的收音機,掃描它周圍的 wifi 網絡。你可以做到這一點,運行板附帶的代碼示例之一。

轉到 Arduino IDE 示例并查找WiFI ==> WiFIScan

在串行監視器上,您應該會看到設備范圍內的 wifi 網絡(SSID 和 RSSI)。這是我在家里得到的:

poYBAGJro_WAWMmAAAD8G47L5us561.png

測試相機
對于相機測試,您可以使用以下代碼:

示例 ==> ESP32 ==> 相機 ==> CameraWebServer

只選擇合適的相機:

#define CAMERA_MODEL_AI_THINKER

并使用網絡憑據輸入:

const char* ssid = "*********";
const char* password = "*********";

pYYBAGJro_CAK4PDAAIo8p8zJKA349.png

在串行監視器上,您將獲得正確的地址來運行您可以控制攝像機的服務器:

poYBAGJro-yAE9CZAAH4Fo7Dtm0203.png

這里我輸入的是:http: //172.16.42.26

pYYBAGJro-eAAs5GAANIg5X5dzw580.png

運行你的網絡服務器

到目前為止,我們可以測試所有 ESP32-Cam 硬件(MCU 和攝像頭)以及 wifi 連接。現在,讓我們運行一個更簡單的代碼來捕獲單個圖像并將其呈現在一個簡單的網頁上。本代碼基于 Rui Santos 偉大的教程:ESP32-CAM Take Photo and Display in Web Server 開發

從 GitHub 下載文件:ESP332_CAM_HTTP_Server_STA ,更改 wifi 憑據并運行代碼。結果如下:

poYBAGJro-OAXmJnAAQqOKF4tag693.png

嘗試檢查代碼;更容易理解相機的工作原理

水果與蔬菜 - 圖像分類

現在我們已經運行了嵌入式相機,是時候嘗試圖像分類了。

我們應該開始訓練模型并繼續在 ESP32-CAM 上進行推理。我們需要找到大量的數據用于訓練模型。

TinyML 是一組與嵌入式設備上的機器學習推理相關的技術,由于限制(在這種情況下主要是內存),我們應該將分類限制為三到四個類別。我們將蘋果與香蕉和土豆區分開來(您可以嘗試其他類別)。

因此,讓我們找到一個包含這些類別的圖像的特定數據集。Kaggle 是一個好的開始:

https://www.kaggle.com/kritikseth/fruit-and-vegetable-image-recognition

該數據集包含以下食品的圖像:

水果-香蕉、蘋果、梨、葡萄、橙子、獼猴桃、西瓜、石榴、菠蘿、芒果。

蔬菜- 黃瓜、胡蘿卜、辣椒、洋蔥、土豆、檸檬、番茄、蘿卜、甜菜根、卷心菜、生菜、菠菜、大豆、花椰菜、甜椒、辣椒、蘿卜、玉米、甜玉米、紅薯、辣椒粉、墨西哥胡椒、姜、 大蒜、 豌豆、 茄子。

每個類別分為訓練(100 張圖像)、測試(10 張圖像)和驗證(10 張圖像)。

將數據集從 Kaggle 網站下載到您的計算機。

使用 Edge Impulse Studio 訓練模型

我們將使用 Edge Impulse 進行培訓,這是在邊緣設備上進行機器學習的領先開發平臺。

在 Edge Impulse 輸入您的帳戶憑據(或創建一個免費帳戶)。接下來,創建一個新項目:

pYYBAGJro9uAWY3rAAEQkHxppng834.png

數據采集

接下來,在上傳數據部分,從您的計算機上傳所選類別的文件:

poYBAGJro9aAMr0VAAFV4_42Uug403.png

如果您以三類數據結束,閱讀培訓會有所幫助

poYBAGJro9GAeC8GAAIlr3FQ5E4756.png

您還可以上傳額外的數據以進行進一步的模型測試或拆分訓練數據。

沖動設計

脈沖獲取原始數據(在本例中為圖像),提取特征(調整圖片大小),然后使用學習塊對新數據進行分類。

如前所述,對圖像進行分類是深度學習最常見的用途,但要完成這項任務需要使用大量數據。每個類別我們有大約 90 張圖片。這個數字夠嗎?一點也不!我們將需要數千張圖像來“教授或建模”以區分蘋果和香蕉。但是,我們可以通過使用數千張圖像重新訓練先前訓練的模型來解決這個問題。我們將這種技術稱為“遷移學習”(TL)。

pYYBAGJro82AbQFlAAKXf8yyqmM616.png

使用 TL,我們可以在我們的數據上微調預訓練的圖像分類模型,即使在相對較小的圖像數據集(我們的案例)中也能達到良好的性能。

因此,從原始圖像開始,我們將調整它們的大小(96x96)像素,然后將它們提供給我們的遷移學習塊:

poYBAGJro8iAb37ZAAHNrHBggsw500.png

預處理(特征生成)

除了調整圖像大小外,我們還應該將它們更改為灰度,以保持實際的 RGB 顏色深度。這樣做,我們的每個數據樣本都將具有 9 維、216 個特征 (96x96x1)。保持RGB,這個尺寸會大三倍。使用灰度有助于減少推理所需的最終內存量。

pYYBAGJro8OAGNjfAAHdmRuKuWQ835.png

不要忘記“保存參數”。這將生成要在訓練中使用的特征。

培訓(遷移學習和數據增強)

2007 年,Google 推出了MobileNetV1,這是一個通用計算機視覺神經網絡系列,專為移動設備而設計,支持分類、檢測等。MobileNets 是小型、低延遲、低功耗的模型,參數化以滿足各種用例的資源限制。

盡管基本的 MobileNet 架構已經很小并且具有低延遲,但很多時候,特定用例或應用程序可能需要模型更小更快。為了構建這些更小且計算成本更低的模型,MobileNet 引入了一個非常簡單的參數α (alpha),稱為寬度乘數。寬度乘數 α 的作用是在每一層均勻地細化網絡。

Edge Impulse Studio 提供 MobileNet V1(96x96 圖像)和 V2(96x96 和 160x160 圖像),具有多個不同的α值(從 0.05 到 1.0)。例如,對于 V2、160x160 圖像和 α=1.0,您將獲得最高準確度。當然,有一個權衡。精度越高,運行模型所需的內存就越多(大約 1.3M RAM 和 2.6M ROM),這意味著更多的延遲。

在另一個極端,使用 MobileNet V1 和 α=0.10(大約 53.2K RAM 和 101K ROM)將獲得更小的占用空間。

為了在 ESP32-CAM 上運行這個項目,我們應該停留在可能性的較低端,保證推理的情況,但不能保證高精度

與深度學習一起使用的另一項必要技術是數據增強。數據增強是一種可以幫助提高機器學習模型準確性的方法。數據增強系統在訓練過程中(如翻轉、裁剪或旋轉圖像)對訓練數據進行小的、隨機的更改。

在這里,您可以看到 Edge Impulse 如何對您的數據實施數據增強策略:

# Implements the data augmentation policy
def augment_image(image, label):
# Flips the image randomly
image = tf.image.random_flip_left_right(image)
# Increase the image size, then randomly crop it down to
# the original dimensions
resize_factor = random.uniform(1, 1.2)
new_height = math.floor(resize_factor * INPUT_SHAPE[0])
new_width = math.floor(resize_factor * INPUT_SHAPE[1])
image = tf.image.resize_with_crop_or_pad(image, new_height, new_width)
image = tf.image.random_crop(image, size=INPUT_SHAPE)
# Vary the brightness of the image
image = tf.image.random_brightness(image, max_delta=0.2)
return image, label

在訓練期間暴露于這些變化可以幫助防止模型通過“記憶”訓練數據中的表面線索而走捷徑,這意味著它可以更好地反映數據集中深層的潛在模式。

我們模型的最后一層將有 16 個神經元,其中 10% 的 dropout 用于防止過擬合。這是訓練輸出:

poYBAGJro7aASo2yAAHrnIgBhy4566.png

結果不是很好。該模型達到了大約 77% 的準確率,但預計在推理期間使用的 RAM 內存量非常小(大約 60 KB),這非常好。

部署

訓練后的模型將部署為 .zip Arduino 庫,用于特定的 ESP32-Cam 代碼。

pYYBAGJro7GAPuL0AAFWH_hmevI292.png

打開您的 Arduino IDE 并在Sketch 下,轉到Include Library并添加.ZIP Library。選擇您剛剛從 Edge Impulse Studio 下載的文件,就是這樣!

在Arduino IDE 的示例選項卡下,您應該在項目名稱下找到一個草圖代碼。

pYYBAGJro6yAGtsLAATHGyZvxTs785.png

打開靜態緩沖區示例:

poYBAGJro6SAMpJ6AALmET_FMeU062.png

您可以看到,第一段代碼正是調用了一個庫,該庫具有在您的設備上運行推理所需的一切。

#include 《ESP32-CAM-Fruit-vs-Veggies_inferencing.h》

當然,這是一個通用代碼(一個“模板”),它只獲取一個原始數據樣本(存儲在變量中:features = {} 并運行分類器,進行推理。結果顯示在串行監視器上。

我們應該做的是從相機中獲取樣本(圖像),對其進行預處理(調整為 96x96,轉換為灰度并平整它。這將是我們模型的輸入張量。輸出張量將是一個包含三個值,顯示每個類的概率。

poYBAGJro52AZUgvAAD5GiuyUbQ758.png

在網站上:https ://github.com/edgeimpulse/example-esp32-cam,Edge impulse 改編了可用于相機測試的代碼(示例 ==》 ESP32 ==》 相機 ==》 CameraWebServer),包括必要的在 ESP32-CAM 上運行推理。在 GitHub 上,下載代碼Basic-Image-Classification,包括您的項目庫,選擇您的相機和您的 wifi 網絡憑據:

poYBAGJro5iANZKOAAJPmzh8WTk905.png

將代碼上傳到您的 ESP32-Cam,您應該可以開始對水果和蔬菜進行分類了!您可以在串行監視器上檢查它:

pYYBAGJro5CAHDSKAALPaWRi-NY686.png

測試模型(推理)

poYBAGJro36AZ3MuAAQFW6WgeQc716.png

用相機拍照,分類結果會出現在串口監視器上:

poYBAGJro3qAA79fAAIO9iUwqUo068.png

可以在網頁上驗證相機捕獲的圖像:

poYBAGJro3SANpLrAADo1z9nlTM244.png

其他測試:

pYYBAGJro2-AJ6mRAAJVof4LO4g825.png

poYBAGJro2qAJofHAANE27_WhpI259.png

結論

ESP32-Cam 是一種非常靈活、不昂貴且易于編程的設備。該項目可以證明 TinyML 的潛力,但我不確定整體結果是否可以應用于實際應用程序(以開發的方式)。只有最小的遷移學習模型才能正常工作(MobileNet V1,α=0.10),任何使用更大的α來提高準確性的嘗試都會導致 Arena 分配錯誤。可能的原因之一是運行相機的最終通用代碼中已經使用的內存量。因此,項目的下一步是優化最終代碼,釋放更多內存用于運行模型。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 攝像頭
    +關注

    關注

    61

    文章

    4949

    瀏覽量

    97659
  • ESP32
    +關注

    關注

    20

    文章

    1006

    瀏覽量

    18829
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    有償求助!esp32cam攝像頭車牌識別代碼執行時,上位機閃退

    esp32cam攝像頭車牌識別在操作執行識別車牌打開攝像頭,上機位直接閃退,攝像頭在例程檢測是有圖片的,有償找一個能幫我修改整體代碼的
    發表于 06-03 16:18

    樂鑫ESP-RTC實時音視頻通信方案

    ESP32-S3-Korvo-2多媒體開發板為核心。ESP32-S3-Korvo-2搭載ESP32-S3AISoC,擁有雙麥克風陣列,支持近/遠場語音喚醒和語音識別。它還集成了攝像頭
    的頭像 發表于 05-26 18:07 ?96次閱讀
    樂鑫<b class='flag-5'>ESP</b>-RTC實時音視頻通信<b class='flag-5'>方案</b>

    ESP32-CAM帶OV2640攝像頭視頻顯示

    本文介紹了如何在Arduino IDE上開發實現ESP32-CAM模塊獲取實時圖像視頻
    的頭像 發表于 05-23 10:47 ?170次閱讀
    <b class='flag-5'>ESP32</b>-CAM帶OV2640<b class='flag-5'>攝像頭</b>視頻顯示

    兆易創新網絡攝像頭解決方案

    根據Omdia估計,2023年全球安防攝像頭市場(高清模擬攝像頭、網絡攝像頭、防爆攝像頭和熱成像攝像頭)總體發貨量約為1.9億臺,預計到20
    的頭像 發表于 02-27 15:39 ?1040次閱讀
    兆易創新網絡<b class='flag-5'>攝像頭</b>解決<b class='flag-5'>方案</b>

    《DNESP32S3使用指南-IDF版_V1.6》第三十五章 攝像頭實驗

    原子 OV5640/OV2640/OV7725等攝像頭模塊。本章,我們將使用ESP32-S3驅動正點原子 OV56400/OV2640攝像頭模塊,實現攝像頭功能。本章分為如下幾個小節:
    發表于 12-27 09:56

    攝像頭及紅外成像的基本工作原理

    本文介紹了攝像頭及紅外成像的基本工作原理,攝像頭可以將看到的圖像真實的呈現出來,所見即所得! 攝像頭如何工作? 攝像頭可以將看到的
    的頭像 發表于 11-25 09:28 ?1981次閱讀
    <b class='flag-5'>攝像頭</b>及紅外成像的基本工作原理

    請問esp32s2支持gc032a攝像頭嗎?

    想確認一下 esp32 s2 支持 gc032a 攝像頭, 對嗎?
    發表于 07-01 06:59

    esp32是如何與攝像頭連接的呢?

    新手。看了esp32的模組中沒有攝像頭的硬件接口,請問它是如何與攝像頭連接的呢
    發表于 06-28 15:01

    esp32-s2-soala-v1.2如何獲取攝像頭描述符?

    開發板:esp32-s2-soala-v1.2 開發環境:WIN10 + IDF4.4 我想使用uvc攝像頭的例程,啥都沒改測試初始化是成功的,但是獲取圖片后就會卡死 應該是攝像頭沒有配置
    發表于 06-27 06:48

    使用esp-iot-solution master分支的usb_stream攝像頭顏色不對是怎么回事?

    使用esp-iot-solution master分支的usb_stream 連接usb攝像頭時顏色偏紅。這個攝像頭在windows和ubuntu上的視頻和圖片都是正常的。我通過確認哪些信息去查找UVC的設置問題?
    發表于 06-27 06:41

    ESP32-CAM攝像頭應用UART亂碼怎么解決?

    狀態碼: %s", err == ESP_OK ? "ok!rn" : "failed!rn"); 攝像頭引腳
    發表于 06-26 08:23

    求助,ESP32S2/ESP32關于HTTP SERVER的問題求解

    兩套硬件: 原廠的ESP32-CAM和 自研帶原廠ESP32-S2-WROVER 都是驅動攝像頭使用。 程序代碼:Arduino 里的示例代碼 CameraWebServer WIFI模式:AP模式
    發表于 06-17 07:02

    高性價比WiFi攝像頭,輕松打造智能視界!

    NEWUnitCarmeraUnitCamera是一款高性價比的WiFi攝像頭。它采用ESP32-WROOM-32E控制核心+2百萬像素OV2640圖像傳感器,設計簡潔,無需多余外設。內置圖像
    的頭像 發表于 06-15 08:29 ?920次閱讀
    高性價比WiFi<b class='flag-5'>攝像頭</b>,輕松打造智能視界!

    ESP32-S3-BOX-3B和ESP32-S3-USG-OTG和ESP32-S3-DevKitC-1三種開發板都可以使用USB插頭的攝像頭嗎?

    ESP32-S3-BOX-3B和ESP32-S3-USG-OTG和ESP32-S3-DevKitC-1三種開發板都可以使用USB插頭的攝像頭嗎 USB-OTG是否可以插杜邦線? Dev
    發表于 06-05 06:36