官方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 #列出視頻設備掛載節點信息