Kneron KL520 USB dongle env. building and model inference on RPI4B
關鍵字
cmake install, opencv install, kneron, kl520, RPI, 樹梅派, g++ install, gcc install, auto yes for install
Intro
耐能在官方網頁上有提供已經完成環境建置的樹梅派img,連結在此。
本專案使用的github連結如下:
https://github.com/juneGithub001/AIA_Kneron_social
(原本的gitlab轉為台灣人工智慧學校學員專用)
本篇的撰寫目的為:
「在樹梅派的官方img環境下,建立KL520環境並推論」
「在自己的樹梅派環境下,建立KL520環境並推論」
另外也希望提供關於
「在其他的 Linux based系統下(ex: Jeston Nano) 如何使用 KL520神經棒」
的操作方向。
更新: 經過測試並向原廠確認,在Jeston nano上不能跑KL520 dongle。目前的環境只支持intel cpu和rpi環境。
補充: 樹梅派官方img的下載連結
目錄:
) Intro
) Super Quick-starts
) 如何建置kl520環境
) 燒錄樹梅派
) 安裝基礎的編譯套件(make, g++, gcc…)
) 安裝cmake 3.4.3
) 安裝opencv 3.4.3
) 設定KL520 USB dongle權限
) 編譯耐能環境並安裝耐能官方指定的套件
) 結論
) 參考
Super Quick-starts
將樹梅派開機,並連接上網路,打開terminal(終端機)輸入以下程序後會自動進行環境建置:
git clone https://gitlab.aiacademy.tw/junew/AIA_Kneron.git
cd AIA_Kneron
bash kneron_env_auto.sh
靜待一段時間(約1~2小時,主要基於網路速度、樹梅派系統SD卡的好壞、機體溫度),樹梅派會重新開關機。然後就準備好環境了。
請先將耐能神經棒連接到樹梅派上,你可以照著下述流程進行測試:
# 請先插入耐能神經棒
cd AIA_Kneron # 移動到AIA_Kneron資料夾
cd host_lib__v0.8/python
python3 dme_keras -t dem_keras
最後結果應該如下:
為了並非使用樹梅派的系統的朋友,以及想知道如何建置環境的讀者,接下來會對如何建置環境做說明。
如何建置kl520環境
建置環境分成3個步驟,3者需要依序執行。
- 燒錄樹梅派 (可以參考這個連結)
- 安裝基礎的編譯套件(make, g++, gcc…)
- 安裝cmake 3.4.3
- 安裝opencv 3.4.3
- 設定KL520 USB dongle權限
- 編譯耐能環境並安裝耐能官方指定的套件
Step1: 燒錄樹梅派
請參考這個連結。
- 用來燒錄的樹梅派系統img檔可以使用這個連結。(2020–08–20-raspios-buster-armhf.img)
- SD卡可以買這個(pchome連結)(金士頓 Kingston Canvas Select Plus
microSDHC 32GB 記憶卡(SDCS2/32GB))(非業配)
Step2: 安裝基礎的編譯套件(make, g++, gcc…)
將樹梅派開機,打開Terminal,輸入下面指令,安裝套件。
sudo apt update
sudo apt install build-essential #裡面包含make, g++, gcc
補充:
cmake是一個自動化建置環境的工具,他背後還是需要編譯器將程式語言(c or c++)轉換成機器語言(二進制命令),這個編譯器就是g++。(g++裡面其實用的是 gcc)
Step3: 安裝cmake 3.4.3
cmake的原始檔(cmake-3.4.3.tar.gz)已經放在本文最上方的AIA_Kneron專案上(連結在此)(路徑為 AIA_Kenron/env_pkgs/cmake-3.4.3.tar.gz)。
不過你也可以自行下載(連結在此)。
我們下載的是source檔,所以要使用make進行編譯和安裝。編譯和安裝程序如下,移動到你下載的source檔位置,然後直接複製貼上在終端機就可以:
# 解壓縮source檔
tar -xvzf cmake-3.4.3.tar.gz # 移動到解壓縮檔案路徑
cd cmake-3.4.3/ # 進行設定,準備make
./configure # 進行環境的編譯(compile)
make # 進行安裝
sudo make install# 設定當我們呼叫cmake時,使用的cmake是剛才安裝的版本
sudo update-alternatives --install /usr/bin/cmake cmake /usr/local/bin/cmake 1 --force# 確認cmake版本 (順便驗證是否完成安裝)
cmake --version # 確認cmake版本 (順便驗證是否完成安裝)
這些內容被寫成執行檔(.sh),放在AIA_Kneron專案的:
env_pkgs/auto_sh/cmake_auto.sh文件中
Step4: 安裝opencv 3.4.3
這個Opencv是dongle在推論時很仰賴的影像函式庫,用來傳入和處理影像十分關鍵。
同樣,opencv的原始檔(opencv-3.4.3.zip)已經放在本文最上方的AIA_Kneron專案上(連結在此)(路徑為 AIA_Kenron/env_pkgs/opencv-3.4.3.zip)。
另外我們也會安裝另一個擴增的opencv函式庫( opencv_contrib-3.4.3),用來擴增opencv的功能,同樣也放在AIA_Kneron專案裡面了(路徑為 AIA_Kenron/env_pkgs/opencv_contrib-3.4.3.zip)。
opencv安裝流程較為複雜,不過原理跟安裝cmake安裝幾乎相同,只是要安裝更多依賴的函式庫。
安裝程序被寫在AIA_Kneron專案的:
env_pkgs/auto_sh/opencv_auto.sh文件中。
sudo apt-get update
sudo apt-get -y dist-upgrade
sudo apt-get update
sudo apt-get -y upgrade
sudo apt-get -y install screen
sudo apt-get -y install htop
sudo apt-get purge wolfram-engine
sudo apt-get purge libreoffice*
sudo apt-get clean
sudo apt-get -y autoremove
sudo apt-get -y install build-essential cmake pkg-config
sudo apt-get -y install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
sudo apt-get -y install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get -y install libxvidcore-dev libx264-dev
sudo apt-get -y install libgtk2.0-dev libgtk-3-dev
sudo apt-get -y install libatlas-base-dev gfortran
#wget -O opencv.zip https://github.com/opencv/opencv/archive/3.4.3.zip
#wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/3.4.3.zip
unzip opencv-3.4.3.zip
unzip opencv_contrib-3.4.3.zip
cd ./opencv-3.4.3/
mkdir build && cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.4.3/modules \ -D BUILD_EXAMPLES=ON ..
make -j4
sudo make install
sudo ldconfig
sudo apt-get update
pkg-config --modversion opencv
cd ../..
補充:
你也許經常看到
make -j4
這個指令,他的意思是使用 4個核心進行編譯,樹梅派4B有4個核心,所以可以寫-j4
,如果你有 8核可以寫-j8
補充:
安裝程序時經常會跳出互動介面確認我們要yes 或 no 安裝這個套件,你可以透過加上-y參數來自動答覆yes。當我們想要連續安裝很多程序,這是很方便的。
ex: sudo apt-get -y
如果是pip install的話,則可以透過 yes|pip install xxx 來自動答覆yes。
Step5: 設定KL520 USB dongle權限
這個步驟讓我掙扎最久,完成環境建立後,我一直想不透明明沒有跳出任何錯誤訊息,但就是不能順利的進行KL520的推論。後來才察覺,USB dongle要跟樹梅派溝通時,會進行諸如影像傳遞之類的動作,可能是權限不夠。所以下面的方法是教你如何永久性提高KL520 USB dongle權限的方法。
首先插入KL52 dongle,在Terminal輸入lsusb
。你應該會看到如下畫面:
其中,Bus 001 Device 004 : ID 3231:0100
就是KL520 dongle。為什麼我看的出來? 一開始可以透過反覆的差拔來尋找你的裝置是哪一個,接著你可以找到KL520 dongle裝置所對應的ID。而且這個ID,並不是隨便分配的。
以耐能的KL520 dongle來說,前面的3231是廠商的編號,後面的0100則是KL520這個裝置的產品編號。接下來我們要寫一個用於管理外部輸出入裝置的規則,永久性的把root權限開給3231廠商的0100產品(也就是耐能的KL520 USB dongle)。
首先建立一個文件
touch 50-myusb.rules
然後用echo套件,把指令寫入這個文件裡面,如下所示:
echo 'SUBSYSTEMS=="usb", ATTRS{idVendor}=="3231", ATTRS{idProduct}=="0100", GROUP="users", MODE="0777",SYMLINK+="dhrobot_base"' >> 50-myusb.rules
最後用sudo,使用root權限把這個文件放在/etc/udev/rules.d/
這個路徑,並且使用udevadm
重新啟動udev這個linux系統的設備管理器(包括樹梅派也是用這個套件管理設備),程序如下:
sudo mv 50-myusb.rules /etc/udev/rules.d/
sudo udevadm control --reload
接著重啟樹梅派(sudo reboot
或是斷電重啟),我們就能完成對KL520 dongle的權限設定。
補充:
在我們寫的50-myusb.rules中
SUBSYSTEMS=="usb"指定了被設定的裝置屬於USB
ATTRS{idVendor}=="3231"指定了USB裝置的廠商編號
ATTRS{idProduct}=="0100"指定了USB裝置的產品編號
MODE="0777" 代表我們給他的權限等級(八進制表示,可讀可寫可刪除,最高權限)
這些操作被寫在AIA_Kneron/env_pkgs/auto_sh/usb_auto.sh
文件中。
Step6: 編譯耐能環境並安裝耐能官方指定的套件
這個部分的知識點跟前面相同,沒有太多好介紹。直接在終端機執行以下程序就可以了。等到程序執行完畢,你可以像前面一樣執行dme_keras專案。
cd AIA_Kneron
unzip host_lib__v0.8.zip
cd host_lib__v0.8
sudo apt -y install libusb-1.0-0-dev
mkdir build && cd build
cmake ..
cmake -DBUILD_OPENCV_EX=on ..
make -j4
結論:
如果你只想要快速準備好推論KL520的環境,你可以參考Super Qucih-starts章節,直接在AIA_Kneron這個專案中(專案連結),執行bash kneron_env_auto.sh
就可以了。
那麼如果你有在建立其他邊緣裝置的環境上遇到問題,或是在安裝任何套件遇到error,希望本篇文章可以提供你一些幫助。
最後記得給些Clap或回饋讓我知道這篇文章到底有沒有用,拜拜。
參考
調整usb權限
https://blog.csdn.net/qq_23670601/article/details/88756372安裝cmake
https://www.claudiokuenzler.com/blog/611/installing-cmake-3.4.1-ubuntu-14.04-trusty-using-alternatives安裝opencv
https://towardsdatascience.com/installing-opencv-3-4-3-on-raspberry-pi-3-model-b-e9af08a9f1d9安裝與使用pyenv(可選)
https://learningsky.io/python-development-on-ubuntu-with-pyenv-virtualenv/