邊緣運算的興起,為許多領域帶來了變革,尤其在資源有限的嵌入式系統中,其低延遲和離線運算的特性更顯重要。本文將探討邊緣運算在兩個不同領域的應用:野生動物監測和食品品質保證。在野生動物監測方面,我們將以 OpenMV Cam H7 Plus 為例,展示如何使用 Edge Impulse 平台訓練和佈署 TensorFlow Lite 模型,實作即時的動物辨識。文章將深入解析程式碼範例,說明如何初始化感測器、載入模型、進行影像分類別,並輸出結果。在食品品質保證方面,我們將聚焦於如何使用 Arduino Nicla Sense ME 和氣體感測器,構建一個食品變品檢測系統。從資料收集、硬體選擇到感測器融合技術,文章將提供完整的實作步驟和程式碼範例,並探討如何結合多種感測器資料,提高模型的準確性和可靠性。
邊緣運算在野生動物監測中的應用
預建二進位制檔案燒錄
在 Deployment 標籤頁中,選擇官方支援的 Edge Impulse 開發平台,並點選 Build 按鈕。你也可以選擇使用 EON Compiler,它可以讓神經網路在保持相同準確率的情況下,使用比 TensorFlow Lite for Microcontrollers 少 25-55% 的 RAM 和最多 35% 的快閃記憶體。
然後,按照 Deployment 標籤頁中點選 Build 後顯示的指示,將產生的韌體應用程式拖曳或燒錄到官方支援的平台上。
OpenMV Cam H7 Plus 佈署
本專案將選擇「OpenMV Library」佈署選項,以便在 OpenMV Cam H7 Plus 上執行訓練好的模型。按照 Edge Impulse 網站上的 OpenMV 佈署檔案指示,下載並安裝軟體先決條件。然後,解壓縮下載的模型韌體 ZIP 檔案,並將 labels.txt 和 trained.tflite 檔案拖曳或複製到已插入的 OpenMV Cam H7 Plus 的檔案系統中。在 OpenMV IDE 中開啟 ei_image_classification.py 指令碼,透過 USB 圖示連線到 OpenMV Cam 板,並執行 Python 指令碼,以便在序列終端檢視中檢視模型的推論結果,如 Figure 11-28 所示。
程式碼範例
# ei_image_classification.py
import sensor, image, time, os, tf
# 初始化感測器
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time = 2000)
# 載入模型
net = tf.load('trained.tflite', load_to_fb=True)
# 分類別標籤
labels = [line.rstrip('\n') for line in open("labels.txt")]
while(True):
# 捕捉影像
img = sensor.snapshot()
# 取得模型的輸出
outputs = net.classify(img)
# 取得最大機率的類別
max_prob = max(outputs.output())
max_index = outputs.output().index(max_prob)
label = labels[max_index]
# 列印結果
print(label, max_prob)
內容解密:
- 初始化感測器:重置感測器並設定畫素格式和幀大小。
- 載入模型:使用
tf.load方法載入訓練好的 TensorFlow Lite 模型。 - 分類別標籤:讀取 labels.txt 檔案以取得分類別標籤。
- 主迴圈:不斷捕捉影像並使用模型進行分類別。
- 結果輸出:取得模型的輸出結果並列印最大機率的類別標籤。
Impulse Runner
你也可以使用 Edge Impulse CLI 透過 USB 序列連線將模型下載、佈署和執行在官方支援的平台上。或者,使用 Edge Impulse Linux runner 在 Raspberry Pi 4 或其他 Linux 裝置上下載、佈署和執行 Edge Impulse 模型。
GitHub 原始碼
本章使用的應用程式原始碼,包括從公共 Edge Impulse 專案佈署的函式庫和完成的應用程式碼,可在 GitHub 儲存函式庫中檢視和下載。
重複迭代與回饋迴圈
現在,您已經將野生動物監測模型的第一個迭代版本佈署到邊緣裝置,您可能會對結果感到滿意並停止開發。然而,如果您希望進一步迭代模型以提高準確率或根據新獲得的裝置升級進行改進,則有許多適應性和變體值得考慮和改進:
- 為不同的動物新增更多的機器學習類別。
- 建立入侵性植物物種的相機陷阱,而不是動物。
- 使用不同的感測器實作相同的目標,例如使用氣體感測器的野生動物保護陷阱。
- 將相同的模型用於不同的目標或將其放置在不同的環境中,改進「未知」類別。
- 結合多個感測器以進一步提高模型的準確率。
鳥鳴分類別演示與 Lacuna Space 的合作
Edge Impulse 和 Lacuna Space 建立了一個有趣的演示,使用鳥鳴來分類別和追蹤世界各地的特定鳥類別物種,使用太空衛星和 LoRaWAN。您可以使用網頁追蹤器確定 Lacuna Space 衛星下一次飛越裝置位置的好時機,然後透過 The Things Network 應用程式接收訊號,並在裝置環境中檢視模型對鳥鳴分類別的推論結果。
{
"housesparrow": "0.91406",
"redringedparakeet": "0.05078",
"noise": "0.03125",
"satellite": true,
}
圖表翻譯:
此 JSON 資料顯示了鳥鳴分類別的結果,包括房屋麻雀、紅環鸚鵡和噪音的機率,以及是否透過衛星傳輸。
AI for Good
在本文中,我們討論了以合乎道德的方式使用機器學習工具和知識的重要性。許多公司已經開始使用「技術造福人類」的理念,從 Edge Impulse 到 Google,都已經建立了環境/野生動物保護工作和承諾,例如「1% for the Planet」。Edge Impulse 對「1% for the Planet」的承諾體現了其對環境保護的重視。
邊緣AI在食品品質保證中的應用
工業邊緣AI在食品品質保證中扮演著自動檢測和糾正食品缺陷、預防食品變質的重要角色。這是透過訓練機器學習模型來識別食品影像中的模式或來自各種工業感測器的資料來實作的。該模型隨後被佈署在邊緣裝置(如攝影機)上,以實時自動檢測和糾正缺陷,從而確保食品的最高品質並減少浪費。
問題探索
「食品品質保證」是一個過於寬泛的概念,無法在本章中全面解決,也不能僅憑一個機器學習模型來解決。因此,本文將重點放在家庭廚房環境、食品製造線或超市冷藏/儲藏架上的食品品質保證,旨在預防和減少食品浪費。
預防食品浪費可以有多種形式。我們的目標是建立一個能夠識別食品即將變質或已經變質的機器學習模型,或者建立一個能夠識別食品製造環境或產品處理不當等因素的模型,這些因素可能導致食源性疾病的產生。這兩種方法都能實作預防和減少食品浪費的目標,但可能需要不同的機器學習類別和感測器輸入組合來解決。
佈署邊緣AI裝置
在智慧工廠中佈署邊緣AI裝置還可以提高生產力和改進品質。將AI引入製造過程有助於減少錯誤、節省時間和金錢。透過使用連線到雲端的智慧手機,品質控制人員可以隨時隨地監控製造過程。應用機器學習演算法,製造商可以立即檢測錯誤。
解決方案探索
第四次工業革命(Industry 4.0)概念化了21世紀技術、產業和社會模式與過程的快速變化,這是由於…
程式碼範例
import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
# 定義模型架構
model = Sequential([
Conv2D(32, (3, 3), activation='relu', input_shape=(224, 224, 3)),
MaxPooling2D((2, 2)),
Flatten(),
Dense(64, activation='relu'),
Dense(10, activation='softmax')
])
# 編譯模型
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
#### 內容解密:
此程式碼範例展示瞭如何使用TensorFlow和Keras建立一個簡單的卷積神經網路(CNN)模型,用於影像分類別任務。
1. 首先,我們匯入必要的函式庫,包括NumPy和TensorFlow中的Keras模組。
2. 使用Sequential API定義模型的架構,這是一種線性堆積疊層的方式。
3. 在模型中,我們首先增加了一個具有32個過濾器的卷積層,使用3x3的卷積核,並使用ReLU作為啟用函式。輸入形狀被設定為224x224畫素的RGB影像。
4. 接著是一個最大池化層,使用2x2的池化視窗,以減少特徵對映的維度。
5. 然後,我們將特徵對映展平,並透過兩個密集層進行分類別,第一個具有64個單元和ReLU啟用,第二個具有10個單元(對應10個類別)和softmax啟用,用於輸出類別機率。
6. 最後,我們編譯模型,指定Adam最佳化器和交叉熵損失函式,並監控準確率指標。
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
title 邊緣運算實作食品品質保證與野生動物監測
package "邊緣運算應用" {
package "野生動物監測" {
component [OpenMV Cam H7] as openmv
component [TensorFlow Lite] as tflite
component [Edge Impulse] as ei
}
package "食品品質保證" {
component [Arduino Nicla] as nicla
component [氣體感測器] as gas
component [變質檢測] as spoilage
}
package "感測器融合" {
component [多感測器資料] as multi
component [即時辨識] as realtime
component [離線運算] as offline
}
}
collect --> clean : 原始資料
clean --> feature : 乾淨資料
feature --> select : 特徵向量
select --> tune : 基礎模型
tune --> cv : 最佳參數
cv --> eval : 訓練模型
eval --> deploy : 驗證模型
deploy --> monitor : 生產模型
note right of feature
特徵工程包含:
- 特徵選擇
- 特徵轉換
- 降維處理
end note
note right of eval
評估指標:
- 準確率/召回率
- F1 Score
- AUC-ROC
end note
@enduml
圖表翻譯: 此圖表示展示了建立機器學習模型的流程。首先從資料收集開始,如果資料可用,則進行資料預處理。接著,使用預處理後的資料訓練模型。訓練完成後,評估模型的效能。如果模型的效能不夠好,則傳回到資料預處理階段進行改進。如果模型的效能足夠好,則將其佈署到實際應用中。最後,完成整個流程。
工業4.0與食品安全品質保證的未來趨勢
工業4.0的到來,不僅推動了製造業的智慧化,也為食品安全品質保證帶來了新的變革。其中,智慧化工廠、預測性維護、3D列印以及智慧感測器等技術,都在食品產業中扮演著越來越重要的角色。特別是在食品安全品質保證方面,邊緣AI(Edge AI)的應用越來越受到重視。
食品安全品質保證的重要性
食品安全品質保證是一個確保食品安全且高品質的過程。這個過程包括檢查食品中的汙染物、測試食品品質以及保持乾淨和安全的食品處理實踐。隨著食品產業的發展,如何確保食品安全已成為一個重要的課題。
影響食品變質的因素
有多種因素會導致食品變質,包括細菌、病毒、真菌、化學物質以及各種環境因素,如外部溫度、內部溫度、氧氣、鹽分、濕度、廢物暴露、濕氣、光線等。這些因素都可能對食品的安全和品質造成影響。
AI在食品安全品質保證中的應用
AI工具在食品安全品質保證中扮演著重要角色,不僅可以幫助確保作業員的健康和消費者的安全,還可以減少食品浪費並減輕對環境的負面影響。透過使用邊緣AI,可以實作對食品品質的即時監測和預測,從而提高食品安全的水準。
解決方案設計
本篇內容將設計並實作一個低成本、高效率且易於訓練的食品安全品質保證邊緣AI模型,利用微控制器和氣體感測器附件來減少食品浪費。當然,邊緣AI模型不僅可以用氣體感測器來檢測食品變質,還可以透過其他型別的機器學習模型和應用來實作食品安全品質保證,例如使用攝像頭影像輸入來監測食品安全法規和裝置,或透過各種環境感測器來識別各種食源性疾病或過敏原。
現有的解決方案
目前,許多公司已經開始重視食品安全品質保證,並投入相關技術研發。例如,Uber利用其機器學習平台Michelangelo來預測餐食送達時間並最佳化配送流程。此外,一些初創公司也開發了針對特定食品安全問題的解決方案,如Allergy Amulet,一種世界上最小、最快的消費級食品過敏原感測器。
解決方案設計方法
有多種方法可以用於設計食品安全品質保證的解決方案,包括:
- 檢測食品變質:利用氣體感測器檢測食品是否變質,適用於消費者和工業用途。
- 監測食品安全合規性:透過電腦視覺模型監測食品生產線上的作業員是否穿戴適當的安全裝備,或利用音訊資料監聽異常聲音。
- 監測食品生產品質控制:利用電子鼻(e-noses)進行品品檢查,或監測食品在生產、包裝和儲存過程中的溫度變化。
內容解密:
上述三種方法分別針對不同的食品安全問題提供瞭解決方案。檢測食品變質可以幫助減少食品浪費和預防食源性疾病;監測食品安全合規性可以確保食品生產過程的安全;監測食品生產品質控制則可以提高食品的整體品質。
食品品質保證的技術應用與挑戰
食品品質控制的重要性
食品品質控制在現代食品產業中扮演著至關重要的角色。從生產到儲存的每一個環節,都可能影響食品的最終品質。無論是冰晶數量、凍傷程度,還是食品是否過了保質期或是變質,都需要嚴格的品質控制措施來確保食品的安全與品質。
偵測交叉汙染與食物過敏原
食物過敏原如堅果和麩質可能對某些人造成嚴重反應甚至死亡。工廠裝置故障可能導致金屬碎片混入食品中,而人類處理食品的過程也可能引入細菌等汙染物。偵測過敏原的方法包括檢查食品是否有汙染跡象,如顏色、質地或氣味的變化。如果食品的外觀或氣味與最初包裝時不同,可能已經受到汙染。
偵測潛在問題的方法
有多種方法可以偵測這些潛在問題。首先,我們可以檢查食品中是否存在過敏原。如果成分表中列出了堅果或麩質,我們就知道它們可能存在於食品中。其次,我們可以檢查是否有金屬汙染的跡象,如食品中存在小金屬片。最後,我們可以檢查是否有因人類處理不當而造成的汙染,如缺乏手套或其他防護裝備。
設計考量
要實作減少食品浪費和提高食品生產/儲存品質控制和安全性的目標,從技術角度來看,我們可以使用多種資料來源,包括不同型別的感測器和攝影機(見表12-1),來實作類別似的目標(減少食品浪費和提高食品安全)。
表12-1. 用於實作各種食品品質保證目標的感測器
| 目標 | 感測器型別 |
|---|---|
| 識別食品包裝洩漏 | 氣體、濕度、水位、攝影機 |
| 檢查食品中的汙染物或異物 | 攝影機 |
| 食品烹調程度和品質控制 | 攝影機、溫度、氣體 |
| 偵測食品變質 | 環境、化學、攝影機 |
| 識別食物過敏原 | 環境、化學、氣體 |
| 人員食品安全裝備/服裝識別 | 攝影機、音訊 |
| 偵測包裝到期日期 | 攝影機 |
| 包裝線交叉汙染 | 攝影機、化學、熱成像、X光、紅外線、氣體 |
環境與社會影響
隨著全球人口的增長,食品浪費的問題也日益嚴重。據估計,全球每年生產的食品中有超過三分之一被浪費掉,相當於13億噸。這不僅是資源的巨大浪費,也對環境產生了重大影響。
減少食品浪費的益處
減少食品浪費不僅有助於減少溫室氣體排放,也能對我們的健康產生積極影響。及早發現食品變質或疾病可以消除食物中毒、沙門氏菌和其他食源性疾病的爆發。減少食物過敏原和交叉汙染將改善患有致命食物過敏的人們的生活。
建立機器學習模型
本章節將探討一個端對端的解決方案,特別是在減少食品浪費方面,透過識別和分類別鮭魚片的新鮮度。我們將收集三類別資料:新鮮、變質和環境背景資料,以訓練機器學習模型,使其能夠區分鮭魚片的新鮮度。
表12-2. 食品品質應用案例的機器學習類別
| 使用案例 | 訓練資料 | 類別標籤 |
|---|---|---|
| 食品變質偵測 | 氣體資料 | 變質、新鮮、環境背景 |
| 食品安全裝備偵測 | 影像(帶有邊界框) | 安全裝備或個人防護裝備 |
| 偵測包裝到期日期 | 影像(帶有邊界框) | 到期日期 |
| 偵測食品包裝洩漏 | 水位、濕度、濕氣資料 | 正常、洩漏 |
| 食品烹調程度/品質控制 | 溫度、氣體資料 | 煮熟、未煮熟、過熟、環境背景 |
食品品品檢測的邊緣AI實踐:以Arduino Nicla Sense ME為例
專案背景與目標
本章節將探討如何利用機器學習技術實作食品變品檢測,重點介紹根據Edge Impulse平台的端對端開發流程。我們的目標是建立一個能夠準確分類別食品狀態的機器學習模型,主要類別包括「變質」、「購買日期」和「環境條件」。
資料集收集
要建立一個有效的機器學習模型,首先需要收集乾淨、強壯且有用的資料集。可以透過以下幾種方式取得資料:
- 結合公開的研究資料集
- 使用來自社群驅動的資料收集網站(如Kaggle)的現有感測器資料集
- 與同事合作收集樣本資料
選擇硬體與感測器
本專案選擇使用Arduino Nicla Sense ME開發板及其搭載的Bosch BME688氣體感測器。該感測器能夠檢測揮發性有機化合物(VOCs)、揮發性硫化合物(VSCs)以及其他氣體(如一氧化碳和氫氣)。
硬體組態詳解
BME688氣體感測器的主要特點包括:
- 能夠檢測ppb級別的氣體濃度
- 支援多種氣體檢測,包括VOCs和VSCs
其他可選感測器型別
為了提高食品品品檢測模型的準確性,可以考慮新增以下型別的感測器:
- 其他氣體感測器:氨氣、甲烷、氧氣、CO₂等
- 溫度感測器
- 壓力感測器
- 濕度感測器
- 雷達感測器
- 空氣品質感測器
感測器融合技術
感測器融合是嵌入式系統中常見的技術,透過結合不同感測器的資料,可以更全面或更準確地瞭解裝置周圍的環境。更多相關資訊請參考「結合特徵與感測器」章節。
資料收集與匯入
使用Edge Impulse平台,可以透過多種方式上傳和標記資料到專案中。具體的資料收集工具將在後續章節中詳細介紹。
資料匯入韌體開發
首先,需要為Arduino Nicla Sense ME開發資料匯入韌體。以下是具體步驟:
- 建立新的目錄
food並建立檔案food.ino - 將以下程式碼複製到
food.ino中
/**
* 組態取樣頻率。這是將資料傳送到Edge Impulse Studio的頻率,
* 與從感測器取樣資料的頻率不同。後者取決於感測器的API。
*/
#define FREQUENCY_HZ 10
/* 包含必要的函式庫 */
#include "Arduino_BHY2.h"
/* 常數定義 */
#define INTERVAL_MS (1000 / FREQUENCY_HZ)
#define CONVERT_G_TO_MS2 9.80665f
/* 前向宣告 */
void ei_printf(const char *format, ...);
/* 私有變數 */
static unsigned long last_interval_ms = 0;
Sensor gas(SENSOR_ID_GAS);
void setup() {
/* 初始化串列通訊 */
Serial.begin(115200);
Serial.println("Edge Impulse 感測器資料匯入\r\n");
/* 初始化並啟動氣體感測器 */
BHY2.begin(NICLA_I2C);
gas.begin();
}
void loop() {
BHY2.update();
delay(INTERVAL_MS);
ei_printf("%.2f", gas.value());
ei_printf("\r\n");
}
/**
* @brief 自定義printf函式,使用vsnprintf並透過Arduino Serial輸出
*
* @param[in] format 可變引數列表
*/
void ei_printf(const char *format, ...)
{
static char print_buf[1024] = { 0 };
va_list args;
va_start(args, format);
int r = vsnprintf(print_buf, sizeof(print_buf), format, args);
va_end(args);
if (r > 0) {
Serial.write(print_buf);
}
}
編譯與上傳程式碼
使用Arduino CLI編譯並上傳程式碼到Arduino Nicla Sense ME開發板:
$ cd food
$ arduino-cli core install arduino:mbed_nicla
$ arduino-cli lib install Arduino_BHY2
$ arduino-cli lib install ArduinoBLE
$ arduino-cli compile --fqbn arduino:mbed_nicla:nicla_sense --output-dir . --verbose
$ arduino-cli upload --fqbn arduino:mbed_nicla:nicla_sense --input-dir . --verbose
程式碼解密:
- 宏定義與函式庫引入:程式碼首先定義了取樣頻率
FREQUENCY_HZ,並引入了必要的函式庫Arduino_BHY2.h。 - 變數與函式宣告:定義了時間間隔
INTERVAL_MS,並宣告了自定義的ei_printf函式用於格式化輸出。 - setup函式:初始化串列通訊並啟動氣體感測器。
- loop函式:定期更新感測器資料並輸出氣體感測器的值。
- ei_printf函式實作:自定義的printf函式,用於透過串列通訊輸出格式化字串。
結語
本章節介紹瞭如何使用Arduino Nicla Sense ME和Edge Impulse平台建立食品品品檢測系統。透過收集和分析氣體感測器資料,我們可以建立一個有效的機器學習模型來檢測食品是否變質。在實際應用中,可以根據具體需求選擇合適的感測器型別和硬體組態,以提高模型的準確性和可靠性。