日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

用树莓派做一个实时垃圾分类器|超实用!!

發布時間:2024/3/13 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用树莓派做一个实时垃圾分类器|超实用!! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


此開源項目由樹莓派愛好者基地人工智能部門謝遠倫、任劍杰、沈超,共同協作完成。在此感謝各位成員的付出與努力。正是有各位的付出,樹莓派生態才能越來越豐富!

代碼倉庫 1、碼云Gitee:https://gitee.com/yangkun_monster/raspberrypi-Garbage-classification 2、Github:https://github.com/pifan-open-source-community/garbage-Classification 視頻教程地址: 嗶哩嗶哩bilibili:樹莓派愛好者基地

一、項目概述

簡介:該垃圾分類項目主要在于對各種垃圾進行所屬歸類,本次項目采用keras深度學習框架搭建卷積神經網絡模型實現圖像分類,最終移植在樹莓派上進行實時視頻流的垃圾識別。

前期:主要考慮PC端性能,并盡可能優化模型大小,訓練可采用GPU,但調用模型測試的時候用CPU運行,測試幀率和準確性(測試10張左右圖像的運行時間取平均值或實時視頻流的幀率)。

后期:部署在樹莓派端,在本地進行USB攝像頭實時視頻流的垃圾分類(歸類)。

框架語言: keras+python。PC端:Keras: 2.2.0Opencv: 3.4Python: 3.6Numpy:1.16

二、數據集

data1: https://www.kaggle.com/asdasdasasdas/garbage-classification

數據集包含6個分類:cardboard (393), glass (491), metal (400), paper(584), plastic (472) andtrash(127).

data2: https://www.kesci.com/home/dataset/5d133d11708b90002c570588

該數據集是圖片數據,分為訓練集85%(Train)和測試集15%(Test)。其中O代表Organic(有機垃圾),R代表Recycle(可回收)。

data3 : https://copyfuture.com/blogs-details/2020083113423317484akwfwu4mzs89w

一共 56528 張圖片,214 類,總共 7.13 GB。

三、leNet5 模型搭建

本次項目采用深度學習來進行圖像識別,如今深度學習中最流行的無疑是卷積神經網絡,因此,我們搭建了包含5層卷積層的神經網絡來進行垃圾分類。

由于本次項目包含三個數據集,對應三個類別(6分類,2分類,214分類),但是設計的模型都是一樣的,因此,下面就以data1進行網絡搭建、訓練、測試講解。


卷積神經網絡實例

在正式訓練之前我們還使用了數據增廣技術(ImageDataGenerator)來對我們的小數據集進行數據增強(對數據集圖像進行隨機旋轉、移動、翻轉、剪切等),以加強模型的泛化能力。

1、模型構建

其中conv2d表示執行卷積,maxpooling2d表示執行最大池化,Activation表示特定的激活函數類型,Flatten層用來將輸入“壓平”,用于卷積層到全連接層的過渡,Dense表示全連接層(128-128-6,最后一位表示分類數目)。

參數設置:為訓練設置一些參數,比如訓練的epoches,batch_szie,learning rate等

在這里我們使用了SGD優化器,由于這個任務是一個多分類問題,可以使用類別交叉熵(categorical_crossentropy)。但如果執行的分類任務僅有兩類,那損失函數應更換為二進制交叉熵損失函數(binary cross-entropy)

2、模型保存

將神經網絡在data1數據集上訓練的結果(參數,權重文件)進行保存,方便后期調用訓練好的模型進行預測。

模型保存文件名為:trash_data1_AlexNet3.h5, 我們設置為保存模型效果最好的一次。

四、訓練并測試

首先是觀察數據,看看我們要識別的垃圾種類有多少,以及每一類的圖片有多少。

1、訓練結果

訓練代碼已經寫好了,接下來開始訓練(圖片歸一化尺寸為128,batch_size為32,epoches為5000,一般5k就已經算比較多的啦,效果好的話可以提前結束)。

進行訓練

訓練過程中的打印結果:

2、模型保存

3、預測單張圖片

現在我們已經得到了我們訓練好的模型trash_data1_AlexNet3.h5,然后我們編寫一個專門用于預測的腳本predict.py

預測腳本中的代碼編寫思路是:載入訓練好的模型-》讀入圖片信息-》預測-》展示預測效果

我們這里寫了一個循環測試,方便計算單張圖像的預測時間

4、測試結果

data1:

model size: 178M

acc accuracy(test) :86%

硬件:AMD R5 3600 內存:16G

測試100張圖像耗時:2.37s

單張圖像耗時:0.0237s

data2:

model size: 128M

acc accuracy(test) :94%

硬件:AMD R5 3600 內存:16G

測試1112張圖像耗時:90.52s

單張圖像耗時:0.0814

data3

model size: 128M

acc accuracy(test) :72%

硬件:AMD R5 3600 內存:16G

測試1112張圖像耗時:8.69s

單張圖像耗時:0.077

五、樹莓派端部署/配置深度學習環境

系統環境:2020-08-20-raspios-buster-armhf-full

**工程要求:Tensorflow 1.14.0+ Keras 2.2.4 + Python 3.7 **

1、配置好ssh和vnc之后,換源:

第一步,先備份源文件

sudo cp/etc/apt/sources.list /etc/apt/sources.list.baksudo cp/etc/apt/sources.list.d/raspi.list /etc/apt/sources.list.d/raspi.list.bak

第二步,編輯系統源文件

sudo nano/etc/apt/sources.list

第三步,將初始的源使用#注釋掉,添加如下兩行清華的鏡像源。Ctrl+O ++ Ctrl+X

【注意】這里的樹莓派系統是Raspbian-buster系統,在寫系統源鏈接時要注意是buster,網上很多教程都是之前stretch版本,容易出錯!

debhttp://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main contribnon-free rpideb-srchttp://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main contribnon-free rpi

第四步,保存執行如下命令sudo apt-get update,完成源的更新軟件包索引。

sudo apt-get update&&upgrade

第五步,還需要更改系統源

sudo nano/etc/apt/sources.list.d/raspi.list

用#注釋掉原文件內容,用以下內容取代:用#注釋掉原文件內容,用以下內容取代:

debhttp://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ buster main uideb-srchttp://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ buster main ui

第六步,配置換源腳本,更改pip源

新建文件夾:

mkdir ~/.pipsudo nano~/.pip/pip.conf

在pip.conf文件中輸入以下內容:

[global]timeout=100index-url=https://pypi.tuna.tsinghua.edu.cn/simple/extra-index-url=http://mirrors.aliyun.com/pypi/simple/[install]trusted-host=pypi.tuna.tsinghua.edu.cnmirrors.aliyun.com

2、python虛擬環境配置

首先進行系統軟件包更新

sudo apt-getupdate sudo apt-getupgradesudorpi-update

然后更新自帶的pip,由于Raspbian自帶的pip3為9.0.1版本,較為老舊,我們使用以下命令來更新pip3:

python3 -mpip install --upgrade pip

嘗試在更新完pip3后,鍵入命令:

pip3 list

新建個文件夾(虛擬環境用)

cd Desktopmkdir tf_picd tf_pi

安裝虛擬環境這個好東西

python3 -mpip install virtualenv

增加環境變量,使得該好東西可以用起來

sudo chmod -R777 /root/.bashrcsudo nano ~/.bashrc

把exportPATH=/home/pi/.local/bin/:$PATH 放到最后,添加環境變量

source ~/.bashrc

成功了之后:整一個虛擬環境

virtualenvenvsourceenv/bin/activate

3、安裝tensorflow1.14.0

用電腦下載:(鏈接)python3.7版本只能安裝1.14.0-Buster版本的TensorFlow

https://github.com/lhelontra/tensorflow-on-arm/releases/tag/v1.14.0-buster

用U盤將這個文件拷到樹莓派上,建一個bag文件夾存放

安裝依賴包:

sudo aptinstall libatlas-base-dev

安裝一些環境

sudo apt-getinstall -y libhdf5-dev libc-ares-dev libeigen3-devpython3 -mpip install keras_applications==1.0.8 --no-depspython3 -mpip install keras_preprocessing==1.1.0 --no-depspython3 -mpip install h5py==2.9.0sudo apt-getinstall -y openmpi-bin libopenmpi-devsudo apt-getinstall -y libatlas-base-devpython3 -mpip install -U six wheel mock

安裝tensorflow

cd envcd bagpip3 install tensorflow-1.14.0-cp37-none-linux_armv7l.whl

這里要安裝二十分鐘。。。出錯了再來一遍就好了。。

測試是否成功并查看版本:

pythonimport tensorflow as tftf.version

4、安裝keras

安裝一些依賴

sudo apt-getinstall libhdf5-serial-devpip3 installh5pysudo apt-getinstall gfortransudo aptinstall libopenblas-devpip3 install-i https://pypi.tuna.tsinghua.edu.cn/simple/ pillowsudo pip3install pybind11

第一個下載numpy:第一次的時候發現安裝成功但調用失敗了,我覺得是numpy版本過高導致出錯了

下載keras還是tensorflow的時候會自動下載numpy(之前已存在,它會先卸載再安裝高版本的numpy,之前不存在,它會直接安裝高版本的numpy),所以要先下載keras,再卸載numpy,然后再安裝低版本的numpy

看一下子numpy版本,太高了

重新安裝

pip3uninstall numpypip3 installnumpy==1.16.0

第二個下載scipy【直接pip安裝百分之九十九的可能都會失敗。所以先下載再安裝。。。先下載這個鏈接復制到樹莓派上,然后解壓到指定文件夾/home/pi/Desktop/tf_pi/env/lib/python3.7/site-packages下】

https://mirrors.tuna.tsinghua.edu.cn/pypi/web/packages/aa/d5/dd06fe0e274e579e1dff21aa021219c039df40e39709fabe559faed072a5/scipy-1.5.4.tar.gz

cd/home/pi/Desktop/tf_pi/env/bag

tar -zxvf scipy-1.5.4.tar.gz-C /home/pi/Desktop/tf_pi/env/lib/python3.7/site-packages

然后進到這個文件夾里開啟安裝:【花里胡哨的各種代碼配置呀啥的,會安裝三十分鐘左右】

cd /home/pi/Desktop/tf_pi/env/lib/python3.7/site-packages/scipy-1.5.4pythonsetup.py install

pip3 list看一看:【太六了,終于成功了】

再使用這個命令安裝keras:

pip3 install keras==2.2.4

請注意;由于在virtualenv里面,一定一定要避免sudo pip3 install,否則會安裝到默認路徑下!發現keras安裝到默認環境了,所以調用不成功,pip list沒有

解決辦法重新安裝

pip3install keras==2.2.4

安裝好了之后記得reboot重啟一下子。

5、開始測試;import keras前面加import os就能忽略提示

因為keras可以配合很多框架,我們用的tf所以會有backend的提示

進入虛擬環境:

cd ~/Desktop/tf_pisourceenv/bin/activate pythonimport tensorflowas tftf.__version__import kerasprint(keras.__version__)

六、用樹莓派跑分類識別的代碼

系統環境:2020-08-20-raspios-buster-armhf-full

**工程要求:Tensorflow 1.14.0+ Keras 2.2.4 + Python 3.7 **

1、把代碼還有圖片集,拷到樹莓派上

其實Filezilla這個FTP傳輸就很方便

2、激活虛擬環境

cd ~/Desktop/tf_pisourceenv/bin/activate

3、克隆代碼并進入代碼目錄

克隆代碼

cd ~/Desktop/tf_pi/envgit clone https://gitee.com/yangkun_monster/raspberrypi-Garbage-classification.git

若提示git命令未找到:

sudo apt-get install git

進入代碼目錄:

cd ~/Desktop/tf_pi/env/Garbage-Classification/code1

這里更改test.py的測試集路徑

pythontest.py

發現有個文件解碼有問題,于是根據錯誤的消息的路徑,去這里:

/home/pi/Desktop/tf_pi/env/lib/python3.7/site-packages/keras/engine

在.decode(‘utf-8’)前面加.encode(‘utf8’)

再次到測試這里運行python test.py,解決了!

測試AlexNet需要把test.py文件里的權重文件路徑改了,把輸入圖片維度由(150,150) 改為(128,128)

Code1測試結果:test100張玻璃

網絡VGG16AlexNet
精度89%87%
時間30780

Code2測試結果:test100張窗簾(兩種,R可回收,O不可回收)

網絡VGG16AlexNet
精度98%98%
時間30946

七、樹莓派安裝opencv并測試視頻接口

系統環境:2020-08-20-raspios-buster-armhf-full

工程要求:opencv 3.4.6.27

cd ~/Desktop/tf_pisource env/bin/activate cd ~/Desktop/tf_pi/env/laji/code1python data1_video_test.py

1、安裝必要的庫

pip3 install numpysudo apt-get install libhdf5-dev -y build-dep libhdf5-devsudo apt-get install libatlas-base-dev -ysudo apt-get install libjasper-dev -ysudo apt-get install libqt4-test -ysudo apt-get install libqtgui4 -ysudo apt install libqt4-testpip3 install libqtgui4sudo apt-get install cmakesudo apt installcmake-qt-guisudo apt-get install libgtk2.0-devsudo apt-get install pkg-configpip3 install boostpip3 install dlib

2、電腦瀏覽器下載以下兩個文件

https://www.piwheels.org/simple/opencv-contrib-python/opencv_contrib_python-3.4.6.27-cp37-cp37m-linux_armv7l.whl

https://www.piwheels.org/simple/opencv-python/opencv_python-3.4.6.27-cp37-cp37m-linux_armv7l.whl

3、將兩個文件拷貝到樹莓派上去

4、安裝這兩個文件,先更新pip

pip install --upgrade pippip3 install 文件位置

注意,由于是虛擬環境,就不能做sudo,會安裝到默認路徑

cd env/bagpip3 installopencv_contrib_python-3.4.6.27-cp37-cp37m-linux_armv7l.whlpip3 install opencv_python-3.4.6.27-cp37-cp37m-linux_armv7l.whl

5、測試

先打開攝像頭設置

sudo raspi-config

然后運行攝像頭程序

總結

以上是生活随笔為你收集整理的用树莓派做一个实时垃圾分类器|超实用!!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。