電子發(fā)燒友App

硬聲App

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

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

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>構(gòu)建一個具有人工智能的農(nóng)業(yè)監(jiān)測系統(tǒng)

構(gòu)建一個具有人工智能的農(nóng)業(yè)監(jiān)測系統(tǒng)

2022-10-26 | zip | 0.05 MB | 次下載 | 免費

資料介紹

描述

介紹

從經(jīng)濟角度來看,氣候變化的影響有利于破壞性越來越強的害蟲的傳播,并威脅到最重要的植物和作物的生存,這種情況對糧食安全和環(huán)境構(gòu)成越來越大的威脅。資料來源:聯(lián)合國。

問題:

氣候變化導(dǎo)致大氣中溫度、濕度和氣體的變化,特別是溫室氣體的積累,這可能有利于真菌和昆蟲的生長,改變疾病三角(宿主-病原體-環(huán)境)的相互作用,從而減少它們的產(chǎn)量。

各種調(diào)查表明,溫帶和熱帶地區(qū)害蟲發(fā)生率的波動與干旱期事件以及干旱和高相對濕度的結(jié)合有關(guān)。

聯(lián)合國糧食及農(nóng)業(yè)組織 (FAO) 估計,害蟲每年破壞全球作物產(chǎn)量的 40%,而植物病害每年使世界經(jīng)濟損失超過 220 億美元,入侵昆蟲至少造成 70 , 0 億美元。資料來源:聯(lián)合國。

“本次評估的主要結(jié)論應(yīng)該提醒我們大家注意氣候變化如何影響世界各地害蟲的傳染程度、傳播和嚴重程度,”本組織總干事在研究報告中說。

解決方案

設(shè)計和構(gòu)建一個具有人工智能的農(nóng)業(yè)監(jiān)測系統(tǒng),能夠識別農(nóng)作物中的害蟲和害蟲,使系統(tǒng)能夠選擇正確的除草劑和數(shù)量,以自動和立即根除它。同樣,能夠記錄和分析農(nóng)業(yè)氣候變量,以便分析和做出有關(guān)作物的決策,從而防止氣候變化造成的損失。

第一步:

配置 Petalinux

1. 設(shè)置 SD 卡映像 (PetaLinux)

我們必須在 Xilinx 開發(fā)者計劃中注冊才能下載Petalinux 2021.1 鏡像。

poYBAGNYiCiABuRZAACExpxoSJQ985.png
我們必須安裝 Balena Etcher 才能在 SD 卡上配置我們的圖像。
?

在 Balena Etcher 中加載圖像后,我們繼續(xù)對其進行閃存。

2.連接一切:

我們確保所有電纜都連接良好。(如圖所示)

https://www.xilinx.com/products/som/kria/kv260-vision-starter-kit/kv260-getting-started/connecting-everything.html
?

3. 開機:

我們配置通過 COM 端口與卡的連接。所以我們繼續(xù)使用 PuTTy 并確保我們配置了以下參數(shù)

  • 波特率 = 115200
  • 數(shù)據(jù)位 = 8
  • 停止位 = 1
  • 流量控制 = 無
  • 奇偶校驗 = 無

我們將配置我們的電路板。

我們可以使用以下命令在板上進行一些快速測試。

VITIS AI 配置

需要注意的是,如果您沒有 Linux 操作系統(tǒng),您可以在虛擬機中執(zhí)行以下安裝。

1.在機器上安裝和配置Docker 。

2. 克隆 Vitis-AI 存儲庫以獲取示例、參考代碼和腳本。

git clone --recurse-submodules https://github.com/Xilinx/Vitis-AI  

cd Vitis-AI

3. 使用以下命令下載最新的 Vitis AI Docker。此容器在 CPU 上運行。

docker pull xilinx/vitis-ai-cpu:latest

4. 要運行 docker,請使用命令:

./docker_run.sh xilinx/vitis-ai-cpu:latest

訓(xùn)練模型

為了訓(xùn)練模型,我們使用 TensorFlow 創(chuàng)建神經(jīng)網(wǎng)絡(luò)。需要澄清的是,您必須購買 Colab 的 PRO 計劃才能使用 30Gb RAM GPU。

1.我們導(dǎo)入庫并下載數(shù)據(jù)庫:

import tensorflow as tf
import tensorflow_datasets as tfds
datos, metadatos = tfds.load('plant_village', as_supervised = True, with_info = True)
metadatos.features
print(metadatos.features["label"].names)

2. 調(diào)整圖像大?。河捎谒袌D像的尺寸不同并且可能與 TensorFlow 沖突,我們繼續(xù)調(diào)整所有圖像的大?。?/font>

import matplotlib.pyplot as plt
import cv2
plt.figure(figsize=(20,20))
tama?o = 50
for i, (imagen, etiqueta) in enumerate(datos['train'].take(25)):
imagen = cv2.resize(imagen.numpy(), (tama?o, tama?o))
plt.subplot(5, 5, i+1)
plt.imshow(imagen)
pYYBAGNYiCuAWl_MAAGLATAS9NU325.png
?

3.拆分數(shù)據(jù)庫進行訓(xùn)練

train_data = []
for i, (imagen, etiqueta) in enumerate(datos['train']):
imagen = cv2.resize(imagen.numpy(), (tama?o, tama?o))
imagen = imagen.reshape(tama?o, tama?o, 3)
train_data.append([imagen, etiqueta])

#Prepare my variables X (inputs) and y (labels) separately
X_data = [] #imagenes de entrada (pixeles)
y_data = [] #etiquetas
for imagen, etiqueta in train_data:
X_data.append(imagen)
y_data.append(etiqueta)

4.將Xdata和Ydata轉(zhuǎn)換為數(shù)組

import numpy as np
X_data = np.array(X_data).astype(float) / 255

y_data = np.array(y_data)

5. 構(gòu)建神經(jīng)網(wǎng)絡(luò):初始層、隱藏層和輸出層具有各自的激活函數(shù)

modeloCNN = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(32, (3,3), activation='relu', input_shape=(50, 50, 3)),
tf.keras.layers.MaxPooling2D(2, 2),
tf.keras.layers.Conv2D(64, (3,3), activation='relu'),
tf.keras.layers.MaxPooling2D(2, 2),
tf.keras.layers.Conv2D(128, (3,3), activation='relu'),
tf.keras.layers.MaxPooling2D(2, 2),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(100, activation='relu'),
tf.keras.layers.Dense(38, activation='softmax')
])
poYBAGNYiC2AXCy8AABjgIjNf9w199.png
?

6.我們編譯模型:

modeloCNN.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
modeloCNN2.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])

7.我們重新訓(xùn)練模型:

from tensorflow.keras.callbacks import TensorBoard
from tensorflow.keras.preprocessing.image import ImageDataGenerator
datagen = ImageDataGenerator(
rotation_range=30,
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=15,
zoom_range=[0.7, 1.4],
horizontal_flip=True,
vertical_flip=True
)
datagen.fit(X_data)
plt.figure(figsize=(20,8))
for imagen, etiqueta in datagen.flow(X_data, y_data, batch_size=10, shuffle=False):
for i in range(10):
plt.subplot(2, 5, i+1)
plt.xticks([])
plt.yticks([])
plt.imshow(imagen[i].reshape(50, 50, 3))
break

from keras.models import Sequential
from keras.layers import Convolution2D, MaxPooling2D, Dropout
from keras.layers import Flatten, Dense
from keras.layers import Conv2D, GlobalAveragePooling2D
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D
from keras.layers import Activation, Dropout, Flatten, Dense
from keras.layers import Conv2D, MaxPooling2D, GlobalAveragePooling2D
from keras.layers import Dropout, Flatten, Dense
from keras.models import Sequential

8. 我們創(chuàng)建初始模型:

modeloCNN_AD = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(32, (3,3), activation='relu', input_shape=(50, 50, 3)),
tf.keras.layers.MaxPooling2D(2, 2),
tf.keras.layers.Conv2D(64, (3,3), activation='relu'),
tf.keras.layers.MaxPooling2D(2, 2),
tf.keras.layers.Conv2D(128, (3,3), activation='relu'),
tf.keras.layers.MaxPooling2D(2, 2),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(100, activation='relu'),
tf.keras.layers.Dense(38, activation='softmax')
])
X_train = X_data[:40000]
X_valid = X_data[40000:]
y_train = y_data[:40000]
y_valid = y_data[40000:]

modeloCNN_AD.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])

data_gen_train = datagen.flow(X_train, y_train, batch_size=32)

tensorboardCNN_AD = TensorBoard(log_dir='logs/cnn_AD')
modeloCNN_AD.fit(
data_gen_train,
epochs=100, batch_size=32,
validation_data=(X_valid, y_valid),
steps_per_epoch=int(np.ceil(len(X_train) / float(32))),
validation_steps=int(np.ceil(len(X_valid) / float(32))),
callbacks=[tensorboardCNN_AD]
)

9、訓(xùn)練結(jié)果:

pYYBAGNYiC-AFbnYAAGCP1xBzK4014.png
?

10.我們下載模型:

modeloCNN_AD.save('my_model-cnn-ad.h5')

模型量化

1. 將訓(xùn)練和數(shù)據(jù)庫產(chǎn)生的模型導(dǎo)入 Vitis AI 中創(chuàng)建的量化代碼。

2.我們定義我們的量化模型:

def quantize(train_generator, model):
    
    # run quantization
    quantizer = vitis_quantize.VitisQuantizer(model)
    #quantizer = tfmot.quantization.keras.quantize_model(model)
    quantized_model = quantizer.quantize_model(calib_dataset=train_generator, calib_batch_size=10)

3.我們保存量化模型:

# save quantized model
    quantized_model.save('quantized_model.h5')
    return (quantized_model)

匯編

1. 創(chuàng)建 unarchivo llamado arch.json donde asignamos la configuración de la DPU

{
    "fingerprint":"0x1000020F6014406"
}

2. Aplicamos el comando source compile.sh donde aparece la ubicación del archivo arch.json。

compile() {
      vai_c_tensorflow2 \
            --model           quantized_model.h5 \
            --arch            $ARCH \
            --output_dir      build/compiled_$TARGET \
            --net_name        customcnn
}


compile 2>&1 | tee build/logs/compile_$TARGET.log

3.我們的模型生成的這些.xmodel文件通過SFTP連接上傳到板子。

sftp petalinux@ 

4.我們執(zhí)行以下命令:

lcd ..
put -r compiled_$TARGET

5. 接下來,在開發(fā)板上啟動 petalinux,我們繼續(xù)創(chuàng)建以下文件:

  • aiiference.json
  • 繪制結(jié)果.json
  • 預(yù)處理.json

6.這三個文件必須位于目錄中:

sudo cp yolov2tiny/aiinference.json /opt/xilinx/share/ivas/smartcam/ssd/aiinference.json
sudo cp yolov2tiny/preprocess.json /opt/xilinx/share/ivas/smartcam/ssd/preproces.json
sudo cp yolov2tiny/drawresult.json /opt/xilinx/share/ivas/smartcam/ssd/drawresult.json

7. 我們測試我們的項目在相機上運行良好,并且我們的機器學(xué)習(xí)模型運行良好:

sudo xmutil unloadapp
sudo xmutil loadapp kv260-smartcam
sudo smartcam --usb 0 -W 1920 -H 1080 --target rtsp --aitask ssd

?

使用 Pynq 配置傳感器

對于這個項目,我們需要啟用和使用 Pmod 端口并將傳感器與Pynq Grove 適配器連接。

我們將初步分析:

  • 溫度
  • 濕度
  • 水位

?

?
?
?
poYBAGNYiDGAUUf5AABGyWeObHo97.jpeg

1.創(chuàng)建一個目錄來包含我們需要的所有文件:

project-spec/meta-user/recipes-apps

2.創(chuàng)建一個.bb文件:

> vim python3-pynq-temp&hum.bb

3. 我們直接從根目錄安裝傳感器的包。

SRC_URI = "https://pynq.readthedocs.io/en/v2.0/_modules/pynq/lib/pmod/pmod_tmp2.html#:~:text=lib.pmod.pmod_tmp2-,Edit%20on%20GitHub,-Note" 
SRC_URI[md5sum] = "ac1bfe94a18301b26ae5110ea26ca596"
SRC_URI[sha256sum] = "f522c54c9418d1b1fdb6098cd7139439d47b041900000812c51200482d423460" 
SRCREV = "0e10a7ee06c3e7d873f4468e06e523e2d58d07f8"S = "${WORKDIR}/git"

inherit xilinx-pynq setuptools3

4. Xilinx-pynqclass 將創(chuàng)建一個PYNQ_NOTEBOOK_DIR變量,該變量將被打包在 notebook 子包中,但我們?nèi)匀恍枰_保環(huán)境正確,配方才能正確運行。在這種情況下,我們需要設(shè)置PYNQ_JUPYTER_NOTEBOOK環(huán)境變量。 BOARD setup.py還期望筆記本目錄存在,因此我們需要創(chuàng)建它。為此,我們可以在編譯的不同步驟之前添加說明。

do_compile_prepend() {   export BOARD=KV260   export PYNQ_JUPYTER_NOTEBOOKS=${D}${PYNQ_NOTEBOOK_DIR}}  
do_install_prepend() {   export BOARD=KV260   export PYNQ_JUPYTER_NOTEBOOKS=${D}${PYNQ_NOTEBOOK_DIR}  install -d ${PYNQ_JUPYTER_NOTEBOOKS}}  
do_configure_prepend() {   export BOARD=KV260   export PYNQ_JUPYTER_NOTEBOOKS=${D}${PYNQ_NOTEBOOK_DIR}  install -d ${PYNQ_JUPYTER_NOTEBOOKS}}

5. 我們需要定義獨立性。

RDEPENDS_${PN} += "\         
python3-pynq \         
python3-pillow \         
pynq-overlay \         
libstdc++ \         "  

RDEPENDS_${PN}-notebooks += "\         
python3-jupyter \ "

6. 運行:

> petalinux-build -c python3-pynq-temp&hum

7. 我們可能會遇到需要修復(fù)的兼容性錯誤,方法是創(chuàng)建一個用簡單添加替換格式字符串的補丁。

8. 我們必須將補丁放在一個子文件夾中才能被識別。

> mkdir python3-pynq-temp&hum 
> cp $patch_file python3-pynq-temp?hum/build-fixes.patch
有必要用一個頁面來告訴我們。

?

9. 現(xiàn)在我們必須執(zhí)行命令,以便 Petalinux 識別新安裝的軟件包。

> cd ../../ 
> vim conf/user-rootfsconfig
CONFIG_python3-pynq-temp?hum 
CONFIG_python3-pynq-temp?hum-notebooks

> petalinux-config -c rootfs

10. 現(xiàn)在我們可以創(chuàng)建完整的圖像了:

> petalinux-build
> petalinux-package --boot --u-boot --atf --pmufw

11. 我們可以測試板子,它會給我們終端地址來直接啟動 Jupyter。

12. 我們?yōu)槲覀兊膫鞲衅鬟\行代碼,它們可以在這個項目的最后找到。

谷歌云物聯(lián)網(wǎng)配置

為了實時可視化我們的作物并獲取傳感器記錄的圖表,我們使用 Jupyter Notebook 配置了 Google Cloud。

?

?
?
?
pYYBAGNYiDeAEeQCAAFlMRXK2Ww396.png
?
1 / 2
?

?

poYBAGNYiDmAe6zqAAA2qmfv7MM172.png
https://cloud.google.com/sql/docs/mysql/high-availability#normal
?

?

驚厥神經(jīng)網(wǎng)絡(luò)模型的表格數(shù)據(jù)庫

它使用了 20 多種不同類型農(nóng)作物的 5000 多張參考圖像,您可以在此處獲取。

poYBAGNYiDyATV3hAAK4vYQxX3A632.png
?
賽后進展:我們希望能夠整合用于噴灑除草劑的電動泵系統(tǒng)、用于作物灌溉的水以及開發(fā)與谷歌云集成的移動應(yīng)用程序,從而使農(nóng)場實現(xiàn)自動化。
同樣,我們希望與賽靈思一起,通過 Pynq 實現(xiàn)更多對極端條件具有更強抵抗力的傳感器,以實時和持續(xù)監(jiān)測新變量,例如磷、鉀的水平、氣體的存在、我們系統(tǒng)中的紅外攝像機。農(nóng)業(yè)氣候監(jiān)測。
非常感謝整個 Xilinx 團隊有機會使用最先進的產(chǎn)品開發(fā)項目,并隨時為我們提供支持,使該項目的開發(fā)得以實現(xiàn)。
?
?

?


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

評論

查看更多

下載排行

本周

  1. 1感應(yīng)筆電路圖
  2. 0.06 MB   |  6次下載  |  免費
  3. 2美的電磁爐維修手冊大全
  4. 1.56 MB   |  4次下載  |  5 積分
  5. 3Cortex-M3/M4F指令集技術(shù)用戶手冊
  6. 2.28MB   |  3次下載  |  免費
  7. 4基于PLC的拉絲機張力控制系統(tǒng)研究
  8. 0.14 MB   |  2次下載  |  5 積分
  9. 5LZC3106G高性能諧振控制器中文手冊
  10. 1.29 MB   |  1次下載  |  1 積分
  11. 6JL2233B集成電平轉(zhuǎn)換功能的LDO中文手冊
  12. 0.50 MB   |  1次下載  |  免費
  13. 7如何PC訪問內(nèi)網(wǎng)及VPN
  14. 19.15 MB   |  1次下載  |  1 積分
  15. 8萬用表UT58A原理圖
  16. 0.09 MB   |  1次下載  |  5 積分

本月

  1. 1使用單片機實現(xiàn)七人表決器的程序和仿真資料免費下載
  2. 2.96 MB   |  44次下載  |  免費
  3. 2UC3842/3/4/5電源管理芯片中文手冊
  4. 1.75 MB   |  17次下載  |  免費
  5. 3DMT0660數(shù)字萬用表產(chǎn)品說明書
  6. 0.70 MB   |  13次下載  |  免費
  7. 43314A函數(shù)發(fā)生器維修手冊
  8. 16.30 MB   |  13次下載  |  免費
  9. 5華瑞昇CR216芯片數(shù)字萬用表規(guī)格書附原理圖及校正流程方法
  10. 0.74 MB   |  12次下載  |  3 積分
  11. 6TPS54202H降壓轉(zhuǎn)換器評估模塊用戶指南
  12. 1.02MB   |  8次下載  |  免費
  13. 7STM32F101x8/STM32F101xB手冊
  14. 1.69 MB   |  8次下載  |  1 積分
  15. 8使用TL431設(shè)計電源
  16. 0.67 MB   |  6次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935119次下載  |  10 積分
  3. 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計
  4. 1.48MB  |  420062次下載  |  10 積分
  5. 3Altium DXP2002下載入口
  6. 未知  |  233084次下載  |  10 積分
  7. 4電路仿真軟件multisim 10.0免費下載
  8. 340992  |  191367次下載  |  10 積分
  9. 5十天學(xué)會AVR單片機與C語言視頻教程 下載
  10. 158M  |  183335次下載  |  10 積分
  11. 6labview8.5下載
  12. 未知  |  81581次下載  |  10 積分
  13. 7Keil工具MDK-Arm免費下載
  14. 0.02 MB  |  73807次下載  |  10 積分
  15. 8LabVIEW 8.6下載
  16. 未知  |  65987次下載  |  10 積分