資料介紹
描述
概述:
該項目演示了如何使用TensorFlow 和 Artemis 模塊構建設備,以解決任何地方農村或農業社區面臨的大部分問題。該設備使用機器學習算法來檢查整體植物健康、極端氣候預測和保護、自動溫室適應,并使用音頻分析檢測致命的疾病傳播媒介或非法砍伐森林。該項目還展示了我們如何僅通過收集和利用從傳感器獲得的數據就可以對我們的農場有更多的了解。我從澳大利亞野火、印度 GDP 由于錯誤的農業實踐而下降等新聞中獲得了制作這個項目的靈感蝗蟲群正在迅速破壞東非、巴基斯坦和許多其他國家的莊稼,蚊子以驚人的速度繁殖,被忽視的熱帶疾病,所以我在我心中找到了作為這個創新、忠誠社區的積極成員的呼聲。
在制作這個項目時采取的重要措施是有效和耐心地收集數據,一旦收集到數據,工作就會變得更加容易(如果你不收集正確的數據來滿足你饑餓的 ML 框架,你肯定會失敗)。對于數據收集部分,我使用了我過去的項目,該項目僅從傳感器收集數據并使用 Sigfox 協議發送到后端,但在這里我將根據這些數據訓練我的設備。
該項目的核心是您需要在每個階段之后調整您的設備。所以讓我們開始吧,享受機器學習的學習。
技術概述:
雖然我們已經搬到了一個現代化的城市,但我仍然愛我的村莊。村莊的清新仍然讓我從憂郁的心情中恢復過來,但由于周圍的污染,我們的健康狀況不佳,無論我們種植什么作物,它們也會對我們的身體產生一些不良影響,因此照顧這些作物以及植物和人類疾病的早期跡象,無需使用復雜、耗電的設備,這些設備需要大量維護,而且遠遠超出貧困農民或村民的能力范圍。因此,我決定使用能夠使用 ML 功能且延遲低且幾乎沒有碳足跡的 Edge 設備。
背景:
主題:自然
1)農場分析:
隨著人口的增加,可持續的耕作方法變得很重要。以前我們只是用來玩傳感器,但現在使用 TensorFlow,我們不僅可以感知,還可以分析、預測和采取行動。使用所有收集到的數據,我們 將這一步將農民之間的競爭使用正確的農場分析,機器會自動建議農民何時在他的農場使用化學品,從而節省他的金錢、精力和環境退化。您可以查看本網站了解更多我國農業界面臨的問題。find abnormalities in crop growth, photosynthesis rate, extreme climate and need for smart green house adaptation.
stop
using excess fertilizers, pesticides, insecticides to boost production.
2)使用音頻分析檢測某些有益和有害的生物:
花可以聽到蜜蜂的嗡嗡聲——這使它們的花蜜更甜
農民正在使用大量化學品來提高他們的農場產量,但我們往往忘記,由于過度使用這些殺蟲劑、殺蟲劑和無機肥料、異花授粉劑,節肢動物(地球上發現的 90% 的生物體都是昆蟲)不會不要被這些植物吸引或因過度接觸化學物質和污染而死亡。超過2,000 種傳粉昆蟲現在已經滅絕,如果不加以保護,只有500 種會滅絕。
我們還需要盡早發現作物病害,以阻止其在農場傳播。為了解決這個問題,我想為什么不告訴農民只有在有任何不良生長模式或有害害蟲時才使用化學品,如今即使沒有疾病,農民也無用地噴灑化學品并殺死蜜蜂等有用的昆蟲。它還可以檢測某些授粉劑以及它們在田間的頻率,根據觀察它可以幫助農民種植觀賞植物,也可以通過聲音和頻率檢測到破壞作物的大型動物。現在我訓練我的設備來識別幾種蚊子的聲音,比如伊蚊、庫蚊和按蚊,還有蜜蜂. 我還將添加蟋蟀、蝗蟲和其他一些害蟲,因為我有一個非常小的數據集。這里的重點是,一旦出現任何害蟲跡象,農民或政府可以在它傳播到各處之前采取行動,用戶也可以確切地知道從哪個設備接收到的信號。閱讀這篇文章https://www.aljazeera.com/news/2020/01/200125090150459.html
如果上述問題不解決,那么整個世界將陷入糧食危機之中。“東非蝗蟲爆發引發國際援助呼聲”
3) 停止砍伐森林:
有很多非法砍伐樹木,所以我的設備可以通過聲音分析技術讓有關部門意識到砍伐樹木,特別是它可以檢測木材切割工具的聲音和頻率。
4) 預測野火并適應極端情況:
如果我們能夠分析來自環境傳感器和氣體傳感器的數據,我們就可以輕松預測野火,也可以讓設備學會在植物沒有獲得最佳溫度和光照的情況下采取行動,以便設備可以激活溫室模式。
[Note: Please look every image carefully in this section,each image contains critical data required to run model successfully]
我們走吧!
音頻分類:
第 1 步:收集音頻分析所需的數據集:
我從 kaggle 數據集中獲得了不同種類的蚊翅拍、蜜蜂的音頻文件,你也可以從那里下載,文件很大,但我們不需要那么多數據集,因為我們的設備內存很小,所以我們會限制我們的每個班級的 200 個音頻文件,每個 1 秒的話語。同樣,您可以通過這種方式獲得電鋸、蝗蟲、板球。如果你有一個有昆蟲的安靜房間,你也可以記錄你自己的數據,那會更好,更準確,這會非常令人興奮,但由于學校考試壓力很大,我無法這樣做。注意:如果我們直接加載為訓練過程下載的音頻數據,它將無法工作,因為麥克風架構會有所不同,并且設備將無法識別任何東西。因此,一旦下載了文件,我們需要通過 Artemis 麥克風再次對其進行錄制,以便我們可以對準確用于運行推理的數據進行訓練。因此,讓我們為 Artemis Redboard ATP 配置我們的 Arduino IDE,請查看以下鏈接。
選擇板作為 Artemis ATP,然后從 File->Examples->Sparkfun Redboard Artemis Example->PDM->Record_to_wav
除了代碼之外,還有一個 python 腳本,您需要運行它來錄制來自板載麥克風的音頻。這是非常必要的,因為音頻文件來自不同的麥克風,因此電路板可能無法準確識別頻率并將聲音視為噪音。
(Protip:錄音時,通過緩慢地來回移動聲源來模擬真實的昆蟲靠近麥克風,從而使氣柱發生變化,以便我們獲得更好的結果。我自己嘗試過,它提高了準確性。)
#!/usr/bin/python
from __future__ import division
"""
Author: Justice Amoh
Date: 11/01/2019
Description: Python script to stream audio from Artemis Apollo3 PDM microphone
"""
import sys
import serial
import numpy as np
import matplotlib.pyplot as plt
from serial.tools import list_ports
from time import sleep
from scipy.io import wavfile
from datetime import datetime
# Controls
do_plot = True
do_save = True
wavname = 'recording_%s.wav'%(datetime.now().strftime("%m%d_%H%M"))
runtime = 50#100 # runtime in frames, sec/10, set it according to your audio duration default is 5 seconds, I set it to 4 minutes as per my audio duration
# Find Artemis Serial Port
ports = list_ports.comports()
try:
sPort = [p[0] for p in ports if 'cu.wchusbserial' in p[0]][0]
except Exception as e:
print 'Cannot find serial port!'
sys.exit(3)
# Serial Config
ser = serial.Serial(sPort,115200)
ser.reset_input_buffer()
ser.reset_output_buffer()
# Audio Format & Datatype
dtype = np.int16 # Data type to read data
typelen = np.dtype(dtype).itemsize # Length of data type
maxval = 32768. # 2**15 # For 16bit signed
# Plot Parameters
delay = .00001 # Use 1us pauses - as in matlab
fsamp = 16000 # Sampling rate
nframes = 10 # No. of frames to read at a time
buflen = fsamp//10 # Buffer length
bufsize = buflen*typelen # Resulting number of bytes to read
window = fsamp*10 # window of signal to plot at a time in samples
# Variables
x = [0]*window
t = np.arange(window)/fsamp # [x/fsamp for x in range(10)]
#---------------
# Plot & Figures
#---------------
plt.ion()
plt.show()
# Configure Figure
with plt.style.context(('dark_background')):
fig,axs = plt.subplots(1,1,figsize=(7,2.5))
lw, = axs.plot(t,x,'r')
axs.set_xlim(0,window/fsamp)
axs.grid(which='major', alpha=0.2)
axs.set_ylim(-1,1)
axs.set_xlabel('Time (s)')
axs.set_ylabel('Amplitude')
axs.set_title('Streaming Audio')
plt.tight_layout()
plt.pause(0.001)
# Start Transmission
ser.write('START') # Send Start command
sleep(1)
for i in range(runtime):
buf = ser.read(bufsize) # Read audio data
buf = np.frombuffer(buf,dtype=dtype) # Convert to int16
buf = buf/maxval # convert to float
x.extend(buf) # Append to waveform array
# Update Plot lines
lw.set_ydata(x[-window:])
plt.pause(0.001)
sleep(delay)
# Stop Streaming
ser.write('STOP')
sleep(0.5)
ser.reset_input_buffer()
ser.reset_output_buffer()
ser.close()
# Remove initial zeros
x = x[window:]
# Helper Functions
def plotAll():
t = np.arange(len(x))/fsamp
with plt.style.context(('dark_background')):
fig,axs = plt.subplots(1,1,figsize=(7,2.5))
lw, = axs.plot(t,x,'r')
axs.grid(which='major', alpha=0.2)
axs.set_xlim(0,t[-1])
plt.tight_layout()
return
# Plot All
if do_plot:
plt.close(fig)
plotAll()
# Save Recorded Audio
if do_save:
wavfile.write(wavname,fsamp,np.array(x))
print "Recording saved to file: %s"%wavname
錄制音頻后,您可以使用任何音頻拆分器將音頻文件拆分為 1 秒。我將以下代碼與 jupyter notebook 一起使用來實現上述步驟。
from pydub import AudioSegment
from pydub.utils import make_chunks
myaudio = AudioSegment.from_file("myAudio.wav" , "wav")
chunk_length_ms = 1000 # pydub calculates in millisec
chunks = make_chunks(myaudio, chunk_length_ms) #Make chunks of one sec
#Export all of the individual chunks as wav files
for i, chunk in enumerate(chunks):
chunk_name = "chunk{0}.wav".format(i)
print "exporting", chunk_name
chunk.export(chunk_name, format="wav")
我使用 Audacity 來清理我下載的音頻文件,然后再將它們切片,還有一些非常棒的功能可以用來判斷你的音頻是否純凈,音頻頻譜圖。
分割音頻文件后,您就可以為 Artemis 訓練這些文件了。但是,您需要調整以使其完美運行,因為由于外殼或工作環境,數據可能包含大量噪聲,因此我建議您也訓練背景數據集,以便即使存在持續的特殊噪聲也可以工作。背景包含 Audacity 軟件中所有修剪過的音頻片段和一些明顯的噪音。
我使用 Google Colab 進行訓練,下面是完整的訓練過程圖像,您需要在 Colab notebook 中訓練時上傳這些文件并在 GPU 上運行,對我來說花了將近 2 個小時。我不得不訓練三次,因為由于我的互聯網連接速度慢,筆記本一直斷開連接,所以我首先訓練了一個小數據集,只有蜜蜂、蚊子(沒有基因或品種分類)和電鋸,然后我訓練了整個數據集兩次,幸運的是我成功了。
第 2 步:訓練音頻數據
音頻培訓 #1:標簽 = 蚊子、蜜蜂、電鋸
訓練完成后,我們需要凍結模型并將其轉換為 lite 模型以在 Edge 設備中使用。我將附上代碼以及所有必需的注釋。
音頻培訓 #2:標簽 = 伊蚊、庫蚊、按蚊、蜜蜂、電鋸
下載上述步驟生成的所有文件,還需要為每個類音頻文件生成微特征文件,我將在我們編寫設備時解釋這一點。您還可以閱讀 TensorFlow Lite for Microcontrollers 文檔以獲取更多信息。
數據分類:
第 1 步:收集所需行為和不良行為的傳感器數據
1) 株高:我使用我過去的項目來確定發芽后的水稻株高,但這還不夠,因為只要印度沒有 SigFox 連接,我就可以讓我的設備保持開啟狀態,所以無論我得到什么讀數,我都使用 Excel數學統計函數,回歸技術來找到所有其他點并添加一些噪音。我真的很抱歉為 ML 提供了小數據集,但幸運的是它適合我的應用程序,如果有一天我將它變成一個商業產品,那么我會通過生成合成數據來擴展我的數據集。
2)火災預測:我使用環境組合快速傳感器收集正常讀數以及火災情況讀數。對于火災,我們需要 himidiy、溫度、tVOC、CO2 讀數。所以基本上我們正在使用回歸技術制作分類模型來進行預測。我使用傳感器的示例代碼來獲取所有讀數。檢測野火是非常重要的功能。
3) 溫室適應:我使用 quiic VCNL4040 模塊來檢測環境光照水平和用于溫度和 CO2 傳感的環境組合傳感器。根據數據,設備可以預測何時適應溫室模式以拯救農作物。它可以進一步優化以保護作物免受冰雹或大雪的影響。
第 2 步:使用深度學習訓練數據
永遠不要在沒有規范化的情況下進行任何訓練,因為你永遠不會看到你的模型提高它的準確性。下面是我訓練過程的一些圖像,任何人都可以知道訓練過程中發生了什么。
培訓#1:火災預測
我使用了'adam'優化器和'binary_crossentropy'損失,它們比任何其他方法都工作得更好,你可以相應地使用任何方法。其他數據集也遵循相同的訓練步驟。sigmoid也用作輸出層的激活函數,因為 sigmoid 適用于非線性數據和二進制預測
培訓#2:溫室適應預測
神經網絡的回歸模型配置與火災預測模型相同。輸出預測將幫助用戶根據相關傳感器數據了解植物是否獲得了足夠的二氧化碳、光照、溫暖,如果沒有,則設備可以采取行動適應溫室(我會告訴我們何時編碼設備)。
培訓#3:植物生長追蹤
這里使用rmsprop代替adam優化器,并使用mse作為損失函數。在此,我訓練了底層神經網絡以識別與天相關的生長模式,因此我將使用它根據天數從模型中計算植物高度,并檢查我的傳感器讀數是否值差異很大,這意味著植物那個季節長得不好。
由于我們已經完成了所有的培訓步驟,我們將著手對設備進行編程。
準備好我們的代碼:
在這里,我將描述我們所有項目實現共有的所有頭文件,
#include "xyz_model_data.h"
我們使用 xxd 訓練、轉換并轉換為 C++ 的模型
#include "tensorflow/lite/experimental/micro/kernels/all_ops_resolver.h"
一個允許解釋器加載我們模型使用的操作的類
#include "tensorflow/lite/experimental/micro/micro_error_reporter.h"
一個可以記錄錯誤和輸出以幫助調試的類
#include "tensorflow/experimental/lite/micro/micro_interpreter.h"
TensorFlow Lite for Microcontrollers 解釋器,它將運行我們的模型
#include "tensorflow/lite/schema/schema_generated.h"
定義 TensorFlow Lite FlatBuffer 數據結構的模式,用于理解 sine_model_data.h 中的模型數據
#include "tensorflow/lite/version.h"
模式的當前版本號,因此我們可以檢查模型是否使用兼容版本定義。
//You need to install Arduino_Tensorflow_Lite library before proceeding.
#include
在 void setup() 函數之前定義了一個命名空間,命名空間用于解決不同包之間的名稱沖突。您還需要為張量和其他相關操作分配內存。
namespace
{
tflite::ErrorReporter* error_reporter = nullptr;
const tflite::Model* model = nullptr;
tflite::MicroInterpreter* interpreter = nullptr;
TfLiteTensor* input = nullptr;
TfLiteTensor* output = nullptr;
// Create an area of memory to use for input, output, and intermediate arrays.
// Finding the minimum value for your model may require some trial and error.
constexpr int kTensorArenaSize = 6 * 1024;
uint8_t tensor_arena[kTensorArenaSize];
} // namespace
您可以從 Arduino IDE 示例部分中的 Arduino Tensorflow Lite 示例開始,只需將轉換后的 lite 模型數據傳輸到 model_data.h 文件,然后根據預測模型的輸出采取任何行動。
編程、模型測試和連接 Sparkfun Artemis 設備:
測試#1:音頻分析-
檢查我們的語音模型并在 OLED 屏幕上顯示結果。如果您對整個項目的編程沒有信心,您可以選擇示例項目并將其作為基礎修改它,您將很容易學會以這種方式進行調試。圖片沒有詳細顯示,因此我已經上傳了代碼,但您仍然需要根據您的項目對其進行調整。您還可以輕松修改它,根據檢測到的聲音(如蚊子)將結果發送到移動設備或基站,這樣人們就可以輕松查看當地此類昆蟲最常見的地方并防止其繁殖或制造自動化無人機導航系統在農場區域噴灑特定的殺蟲劑、殺蟲劑或通知機構有關非法采伐的全面精確控制。在下面查看我們的測試結果圖像。
我們已經完成了我們項目的音頻分析模型的訓練和編程,現在我將繼續編程其他基于價值的輸出模型。
測試#2:火災預測-
我們將數據模型加載到板上,然后對我們的傳感器值進行實時預測,根據預測,我們將在 OLED 屏幕上顯示通知,從而消除農場大面積火災的可能性。這真的花了我大部分時間,因為無論我多么努力,我的董事會每次都會給我編譯錯誤。但是感謝 Hackster 社區,他們幫助我成功上傳了代碼。
測試#3:溫室預測
這里我們將利用環境光、溫度和CO2濃度檢測傳感器來預測是否有足夠的光、溫度和CO2可供植物生長,如果條件不正常,我們將引導伺服電機啟動并通過帶來保護植物來保護植物。像溫室設置一樣在農場上層。
測試#4:植物高度測定
我們已經訓練我們的模型通過回歸來確定植物高度,但是回歸有一個缺點,缺點是它只能確定一個線性方向的值,因此如果讓它永遠運行它會在某天返回植物高度(以公里為單位),如果沒有上限已設置。所以我們要做的是,我們會檢測對應天的植物高度,并用我們的模型檢查對應天的高度,檢查模型預測的高度是否與我們測量的植物高度相差很大,差異很大意味著有一些營養不足。
我附上了所有注釋很好且可讀性強的代碼,供您實現自己的算法,不要浪費時間考慮代碼,花時間使您的訓練數據集盡可能好。
我沒有 3D 打印機,所以我只是拿了一個塑料盒來構建我的模型,在提交想法的過程中,我們還需要指定我們的項目的外觀,所以這里是安裝(不是花園,因為我沒有一)但我盡我最大的努力在我的最后做盡可能多的創新和創造力。對不起,伙計們,我找不到這個硬件的fritzing 部件,但接線相當簡單,因為我使用了非常常見的傳感器,quiic 傳感器是即插即用的,所有圖像都足夠清晰,可以詳細說明我的傳感器的引腳。
您可以將您的設備設置為您想要的任何模式以及您想要的任何位置。我還想為我的植物實施水分適應,我稍后也會完成。
可持續發展目標 3:良好的健康和福祉
使用我們的設備,我們試圖讓當地了解所有存在或繁殖的攜帶疾病的媒介,而且我們能夠在聽到任何害蟲發出的聲音時立即拯救作物,因此它節省了農民的大量精力并讓他們噴灑化學品只在需要時,吃得健康。
SDG 13 和 SDG 15:氣候行動和陸地生物
聯合國目標:到 2020 年,促進對所有類型森林實施可持續管理,停止砍伐森林,恢復退化的森林,并在全球大幅增加植樹造林和重新造林。從所有來源和各級調動大量資源,為可持續森林管理提供資金,并提供充足的資源. 鼓勵發展中國家推進此類管理,包括保護和重新造林。通過我們的項目,我們能夠識別非法砍伐樹木并將信息傳達給林業部門采取行動。因此,我們很快就準備好停止森林砍伐,我還想到了另一個包括檢測槍聲并讓政府了解特定地區的偷獵者并對他們采取嚴厲行動的措施。
任何人都可以向我推薦任何可以輕松實現并對社區有所幫助的新功能。直接在代碼部分添加大量代碼文件不是很舒服,所以我添加了github鏈接。感謝您仔細閱讀我的想法和實現。
- TensorFlow-DirectML TensorFlow的GPU范圍擴展
- Windows下利用Anaconda安裝Tensorflow教程
- 智慧農村污水站點監控方案設計 2次下載
- 使用TensorFlow建立深度學習和機器學習網絡 18次下載
- TensorFlow的11個使用技巧整理說明 3次下載
- TensorFlow深度學習PDF電子書免費下載 8次下載
- 深度學習入門教程之TensorFlow入門、原理與進階實戰教程免費下載 259次下載
- 什么是TensorFlow數據流圖?詳細TensorFlow數據流圖(動圖)免費下載 9次下載
- 人工智能深度學習之TensorFlow的介紹,安裝和基礎的詳細資料概述 25次下載
- 農村電網配電模式改造的可行性論證 48次下載
- 臺州農村供水現狀及解決方法
- 農村飲水工程的建設與管理分析
- 關于西北地區農村供電情況調研的報告
- 農村電工手冊(第2版) 0次下載
- 農村安全用電常識
- 如何使用Tensorflow保存或加載模型 476次閱讀
- 如何在TensorFlow中構建并訓練CNN模型 348次閱讀
- TensorFlow的定義和使用方法 495次閱讀
- TensorFlow與PyTorch深度學習框架的比較與選擇 529次閱讀
- 如何使用TensorFlow構建機器學習模型 777次閱讀
- 關于TensorFlow在GPU中的使用規則 3489次閱讀
- TensorFlow安裝手冊之如何利用pip安裝 TensorFlow 1.2w次閱讀
- TensorFlow都有哪些功能,大家是否都全部了解呢? 2.1w次閱讀
- 如何使用TensorFlow.js構建這一系統 3465次閱讀
- TensorFlow最新版本 4600次閱讀
- TensorFlow Lite是TensorFlow針對移動和嵌入式設備的輕量級解決方案 2.5w次閱讀
- TensorFlow是什么?如何啟動并運行TensorFlow? 1.6w次閱讀
- TensorFlow發表推文正式發布TensorFlow v1.9 3020次閱讀
- TensorFlow的框架結構解析 7032次閱讀
- 一步一步學用Tensorflow構建卷積神經網絡 3446次閱讀
下載排行
本周
- 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次下載 | 免費
評論
查看更多