Firefly Core-3399pro-jd4 rknn環境搭建

来源:https://www.cnblogs.com/wangchuan753/archive/2022/04/18/16160836.html
-Advertisement-
Play Games

官方numpy1.16.3,scipy,onnx的whl包有問題,不要直接安裝,自己編譯。 1.1安裝Python3.7 sudo apt update #檢查可更新文件 sudo apt install software-properties-common #安裝可添加源的工具 sudo add- ...


官方numpy1.16.3,scipy,onnx的whl包有問題,不要直接安裝,自己編譯。

1.1安裝Python3.7

sudo apt update #檢查可更新文件

sudo apt install software-properties-common  #安裝可添加源的工具

sudo add-apt-repository ppa:deadsnakes/ppa #添加源,否則會無法找到python3.7-dev軟體包

sudo apt install python3.7-dev #安裝python3.7

1.2修改python預設為python3.7:

為了因為C++調用python時,預設是調用python2.7,這導致很多python3.7的語法報錯。所以需要更改python預設軟連接

 

#查看路徑python,python3.7路徑

which python python3.7

/usr/bin/python

/usr/bin/python3.7

sudo rm /usr/bin/python

sudo rm /usr/bin/python3

#創建python3.軟連接到python&Python3

sudo ln -s /usr/bin/python3.7 /usr/bin/python

sudo ln -s /usr/bin/python3.7 /usr/bin/python3

至此Python3.7環境配置完成。

 

2.0 安裝相關依賴包(numpy、h5py 、opencv、scipy)

2.0.1安裝並更新相關依賴包

sudo apt-get update

sudo apt-get install cmake gcc g++ libprotobuf-dev protobuf-compiler

sudo apt-get install liblapack-dev libjpeg-dev zlib1g-dev

pip3 install --upgrade pip #更新pip包的版本

pip3 install wheel setuptools #安裝 Python 打包工具

 

報錯:sudo apt-get update出錯

No module named 'apt_pkg'問題

sudo vi /usr/bin/apt-add-repository

#! /usr/bin/python3.6

cd /usr/lib/python3/dist-packages

sudo cp apt_pkg.cpython-36m-aarch64-linux-gnu.so apt_pkg.so

 

2.0.2 安裝並編譯numpy、h5py

註:直接安裝離線安裝包安裝完成要驗證一下,避免後續找不到問題出在哪。

 

(PS:opencv-python和h5py同時依賴的numpy包的版本必須是1.16.3,故需先安裝編譯numpy包)

重要 :安裝包的順序不可調換,否則預設安裝的依賴包版本與RKNN所要求的衝突

執行以下命令:

 註意:numpy,scipy,onnx官方給的包有問題,儘量自己編譯。

pip3 install numpy==1.16.3 #安裝numpy包,編譯完成即可進行下一步

sudo apt-get install libhdf5-dev
pip3 install h5py==2.8.0 -i https://pypi.tuna.tsinghua.edu.cn/simple #安裝h5py包,編譯完成即可進行下一步 


#驗證是否安裝成功
import numpy

numpy.__version__

import h5py

 

2.0.3 安裝並編譯opencv-python

安裝並編譯opencv-Python包,如果不指定版本,預設會從清華源下載已編譯好的最新版本包opencv_python-4.5.1.48-cp37-cp37m-manylinux2014_aarch64.whl (34.5 MB),但該包預設依賴numpy的版本要求numpy>=1.19.3,RKNN Toolkit依賴的numpy版本必須是1.16.3,所以不可安裝最新版本的opencv_python-4.5.1.48版本,需下載4.3.0.38版本的opencv-python源碼包編譯

opencv-python的各個版本可此鏈接下載https://pypi.tuna.tsinghua.edu.cn/simple/opencv-python/

 

pip3 install opencv-python==4.3.0.38  -i https://pypi.tuna.tsinghua.edu.cn/simple --default-timeout=200 #安裝源碼包進行編譯

 

#或將離線包下載後安裝opencv-python

#pip3 install opencv_python-4.3.0.38-cp37-cp37m-linux_aarch64.whl #

大約要1小時左右方可編譯完成。

 

2.0.4 安裝並編譯scipy

sudo apt-get install gfortran

pip3 install scipy==1.3.0

2.0.4 安裝RKNN-Toolkit 1.6.0

執行以下命令,系統會根據RKNN的版本要求安裝編譯固定版本的依賴包,如psutil5.6.2 lmdb0.93 onnx1.6.0 scipy>=1.1.0 protobuf3.11.2 Pillow==5.3.0等。大概10-30分鐘左右編譯安裝成功。

(RKNN的各個版本可從此鏈接下載http://repo.rock-chips.com/pypi/simple/,其他編譯好的whl依賴包不可直接用到AIO-3399ProC上,如onnx,scipy,numpy等,這些包在python中會因未知原因導入失敗,並導致OpenCV、TensorFlow和RKNN-Toolkit無法使用)

 

 pip3 install rknn_toolkit-1.6.0-cp37-cp37m-linux_aarch64.whl

 

2.0.5 安裝TensorFlow 1.14.0

下載地址:http://repo.rock-chips.com/pypi/simple/

將下載好的tensorflow-1.14.0-cp37-none-linux_aarch64.whl 放置目錄下,安裝並編譯,編譯grpcio依賴包大約十多分鐘,耐心等待即可。(若使用pip3 install tensorflow 會自動安裝最新版本的tensorflow包,依賴的numpy包的版本與RKNN要求衝突,故需手動安裝)

基於arm的已編譯好的各版本tensorflow whl包也可從此地址下載https://github.com/lhelontra/tensorflow-on-arm/releases

pip3 install grpcio==1.36.1 --default-timeout=200 

pip3 install tensorflow-1.14.0-cp37-none-linux_aarch64.whl --default-timeout=200

 

2.0.6 安裝matplotlib

下載地址:http://repo.rock-chips.com/pypi/simple/

pip3 install matplotlib-3.2.1-cp37-cp37m-linux_aarch64.whl

 

3、測試官方給出的rknn-toolkit\examples\darknet\yolov3路徑下的demo

3.1 在python中測試各模塊是否正常

firefly@firefly:~/RKNN1.6$ python3

 Python 3.7.10 (default, )

 [GCC 7.5.0] on linux

 Type "help", "copyright", "credits" or "license" for more information.

 >>> import h5py

 >>> h5py.__version__

 '2.8.0'

 >>> import cv2

 >>> import numpy

 >>> from rknn.api import RKNN

 >>>import tensorflow as tf

 >>>tf.__version__

 >>>1.14.0

 >>>

 >>> import matplotlib

 >>> matplotlib.__version__

'3.0.3'

 

3.2 運行官方提供的demo,測試RKNN是否安裝成功

 先從https://pjreddie.com/media/files/yolov3.weights下載yolov3.weights

firefly@firefly:~/RKNN1.6/examples/tensorflow/ssd_mobilenet_v1$ python3 test.py

 

Traceback (most recent call last):

   File "test.py", line 61, in <module>

   ...                           ...

File "/home/firefly/venv/lib/python3.7/site-

packages/tensorflow/contrib/__init__.py", line 31, in <module>

  from tensorflow.contrib import cloud

 ImportError: cannot import name 'cloud' from 'tensorflow.contrib'

 

解決方法:

打開

/usr/local/lib/python3.7/dist-packages/tensorflow/contrib/__init__.py 找到 "from tensorflow.contrib import cloud",註釋掉

縮進下一行 from tensorflow.contrib import cluster_resolver

 

在下一句還需縮進,不然會提示以下錯誤代碼:

File "/home/firefly/venv/lib/python3.7/site-packages/tensorflow/contrib/__init__.py", line 33

from tensorflow.contrib import cluster_resolver

      ^

 IndentationError: expected an indented block

 

進入/example/tflite目錄下,運行test.py,測試開發環境是否正常

 

firefly@firefly:~/RKNN1.6/examples/tflite/mobilenet_v1$ python3 test.py

--> config model
done
--> Loading model
W:tensorflow:From /usr/local/lib/python3.7/dist-packages/rknn/api/rknn.py:104: The name tf.ConfigProto is deprecated. Please use tf.compat.v1.ConfigProto instead.


W:tensorflow:From /usr/local/lib/python3.7/dist-packages/rknn/api/rknn.py:104: The name tf.Session is deprecated. Please use tf.compat.v1.Session instead.


W:tensorflow:From /usr/local/lib/python3.7/dist-packages/rknn/api/rknn.py:104: The name tf.placeholder is deprecated. Please use tf.compat.v1.placeholder instead.


done
--> Building model
W The target_platform is not set in config, using default target platform rk1808.
W:tensorflow:From /usr/local/lib/python3.7/dist-packages/rknn/api/rknn.py:244: The name tf.reset_default_graph is deprecated. Please use tf.compat.v1.reset_default_graph instead.


W:tensorflow:From /usr/local/lib/python3.7/dist-packages/rknn/api/rknn.py:244: The name tf.FIFOQueue is deprecated. Please use tf.queue.FIFOQueue instead.


W:tensorflow:From /usr/local/lib/python3.7/dist-packages/tensorflow/python/ops/control_flow_ops.py:1814: py_func (from tensorflow.python.ops.script_ops) is deprecated and will be removed in a future version.
Instructions for updating:
tf.py_func is deprecated in TF V2. Instead, there are two
options available in V2.
- tf.py_function takes a python function which manipulates tf eager
tensors instead of numpy arrays. It's easy to convert a tf eager tensor to
an ndarray (just call tensor.numpy()) but having access to eager tensors
means `tf.py_function`s can use accelerators such as GPUs as well as
being differentiable using a gradient tape.
- tf.numpy_function maintains the semantics of the deprecated tf.py_func
(it is not differentiable, and manipulates numpy arrays). It drops the
stateful argument making all functions stateful.


W:tensorflow:From /usr/local/lib/python3.7/dist-packages/rknn/api/rknn.py:244: The name tf.nn.avg_pool is deprecated. Please use tf.nn.avg_pool2d instead.


W:tensorflow:From /usr/local/lib/python3.7/dist-packages/rknn/api/rknn.py:244: add_dispatch_support.<locals>.wrapper (from tensorflow.python.ops.array_ops) is deprecated and will be removed in a future version.
Instructions for updating:
Use tf.where in 2.0, which has the same broadcast rule as np.where
done
--> Export RKNN model
done
--> Init runtime environment
E Only support ntb mode on ARM64 platform. But can not find device with ntb mode.
E Catch exception when init runtime!
E Traceback (most recent call last):
E File "rknn/api/rknn_base.py", line 815, in rknn.api.rknn_base.RKNNBase.init_runtime
E File "rknn/api/rknn_runtime.py", line 170, in rknn.api.rknn_runtime.RKNNRuntime.__init__
E File "rknn/api/rknn_platform_utils.py", line 307, in rknn.api.rknn_platform_utils.start_ntp_or_adb
E Exception: Init runtime environment failed!
Init runtime environment failed

解決方法:

更新NPU驅動 :

sudo apt install firefly-3399pronpu-driver

重啟設備

再次運行test.py

 

執行tensorflow和Onnx文件夾下的test.py

後續可以根據需要安裝其他依賴包,示例運行成功一個就說明rknn已經安裝好了。

 

當編譯其他依賴包出錯時,可能是缺少依賴工具鏈,可嘗試下列命令:

pip3 install Cython

sudo apt-get install gcc python3-dev

sudo apt-get install libhdf5-dev

sudo apt-get install cmake gcc g++ libprotobuf-dev protobuf-compiler libgfortran5-dbg libopenblas-dev gfortran libprotoc-dev

 

 

 

4、總結

不同平臺,RKNN提供的基於不同Python版本的安裝包,安裝時不同平臺對應的依賴關係需要處理好,具體如下:

1.Windows只提供 Python3.6的安裝包。

2. MacOS提供 python3.6和 python3.7的安裝包。

3. ARM64平臺(安裝 Debian 9或 10操作系統)提供 Python3.5( Debain 9)和 Python3.7(Debian10)的安裝包。

4. Linux_x64平臺提供基於 python3.5和 python3.6的安裝包。

5.開發板編譯好的whl包一般會存放在/.cache/pip/wheels/路徑下,可將這些包導出保存。

 

 

項目可能用到的指令

sudo rm -rf ~/.cache/pip  #刪除pip3緩存文件

source /home/firefly/venc/bin/activate #進入venc環境

#加速Python pip安裝速度,更改Python軟體源,操作方法:

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

pip install pip -U

 

#RKNN啟動可視化視窗命令 

python3 -m rknn.bin.visualization\

 

#列印內核調試信息

cat /proc/kmsg

dmesg | grep ov13850 #查看ov13850驅動是否正常

cd /usr/local/bin/  #相機測試腳本路徑

ls /dev/video #列出設備掛載到video節點信息

v4l2-ctl -D #列出攝像頭的驅動信息

v4l2-ctl -d /dev/video0 --list-formats-ext #列出視頻節點設備所支持的視頻格式,解析度

v4l2-ctl --list-devices #列出視頻設備掛載節點信息

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 函數是帶名字的代碼塊,要執行函數定義的特定任務,可調用該函數。 需要在程式中多次執行同一項任務時,你無需反覆編寫完成該任務的代碼,而只需調用執行該任務的函數,通過使用函數,程式的編寫、閱讀、測試和修複都將更容易。主程式文件的組織更為有序 一、如何定義一個函數 使用關鍵字 def 來定義一個函數。 d ...
  • #尾部加”/”匹配useTrailingSlashMatch ##參數初始化 參數初始化取決於requestMapping這個bean,這個bean在spring的IOC容器中初始化 我們重載一下requestMapping這個類即可 而在springboot中的初始化的bean名稱預設是reque ...
  • 對於一些帶著固定標簽的欄位來說,我們通常把它們配置到欄位中,而在資料庫中存它們的字典code,或者是字典主鍵,不是一個整型的數字,而在前端顯示時,有時需要將它們翻譯成名稱,這時後端可以幫他們進行翻譯,或者前端通過code自己使用字典翻譯;下麵說一下第一種,後端在View model中將integer ...
  • 定義 是指在讀取一行數據時,記下它的版本號、最近修改的時間戳或校驗和。然後,你可以在修改記錄之前檢查版本有沒有發生變化。 適用場景 適用於讀多寫少的場景,樂觀鎖相信事務之間的數據競爭概率較小,因此儘可能地直接做下去,直到提交的時候才去鎖定。 實現方式 取出記錄時,獲取當前 version 執行更新時 ...
  • 怎麼會有人不喜歡花呢?今天我們也來鑒定一下網路熱門植物!最近春天很多花都開了,我正好趁著清明假期到戶外踏青並拍攝 了不少花卉的照片。 由於對很多花不是特別熟悉,所以我們需要藉助軟體來識別究竟是什麼花的種類。市面上的識花軟體有很多,比如花伴侶、形 色、百度等等,我測試後發現百度的識別效果最為優秀。於是 ...
  • BlockingQueue阻塞隊列 BlockingQueue的四組API /**BlockQueue的四組API * 1.拋出異常 * 2.有返回值,不拋出異常 * 3.阻塞等待 * 4.超時等待 */public class BlockQueueTest { public static void ...
  • 前言 大家之前用python編寫過飛機大戰的部分代碼,只能夠展示英雄飛機,背景,敵機和發射子彈,今天把背景音樂,擊毀敵機,爆 炸特效,得分等等相關功能一併加入進來,代碼有點長,三百多行,你們要的代碼來了哦? 編程思路 主要使用pygame庫,類的創建,函數的調用等等來實現,話不多說,上程式。 編程實 ...
  • 反射機制雖然說增加了代碼的複雜程度但是提高代碼的靈活性,在以後的框架的學習中,配置文件的修改大部分都是利用的反射機制。和利用反射機制去做Runtime類這下麵方法exec,進行命令執行,後面去學習一下 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...