VisionFive 2 机器视觉入门 1: 环境准备

分享作者:EricWang
评测品牌:赛昉科技
评测型号:VF202040-A0
申请理由(产品应用):拟完成从经典方法到深度学习的基于OpenCV的机器视觉项目,包括: 1. 基于霍夫变换的几何检测(直线,曲率) 2. 基于Balze的手势检测 3. 基于LeNet光学字符检测
发布时间:2024-09-23 11:19:47
0
概要
久闻VisionFive 2的大名,心向往之但是一直没有机会上手,这次有机会评测,感谢`ICEasy`给予的宝贵机会。闲话少叙, VisionFive 2和树莓派,飞腾派外观相似,配置差异见下表,唯一不同的是VisionFive 2使用的是RV64处理器,与基于ARM 指令集的树莓派,飞腾派有较大的差别。 作为全球首款集成3D GPU的高性能量产RISC-V 单板,VisionFive 2搭载StarFive JH7110 64bit RV64GC处理器,最大频率1.5GHz, 这款处理器最大的亮点在于首次在RV64处理器上搭载了IMG BXE-4-32 MC1 GPU (@600MHz),支持OpenCL 3.0,OpenGL ES 3.2和Vulkan 1.2, 可以为计算机视觉、深度学习、图形渲染等应用提供充足的算力支持。 本系列文章将围绕VisionFive 2的机器视觉能力展开,和大家一起学习相关的技术,力有不逮之处,还请多多交流指教。
开源口碑分享内容

1. 环境准备

VisionFive 2支持多种操作系统,例如OpenWRT,Fedora,Ubuntu, Debian等,在这里本文选用官方提供的Debian12作为主开发系统。

下载系统镜像,将镜像烧录至SD卡,插卡,上电开机。

检查系统版本

$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux bookworm/sid"
NAME="Debian GNU/Linux"
VERSION_CODENAME=bookworm
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
BUILD_ID=24
BUILD_DATE=T2024-05-06

检查cpu核心

$ lscpu
Architecture:          riscv64
  Byte Order:          Little Endian
CPU(s):                4
  On-line CPU(s) list: 0-3 

1.1 下载交叉编译器

交叉编译器的版本视板子运行的系统为准,一般而言,如果使用官方提供的`Debian12`,GCC版本为12.2,GLIBCXX最高支持版本3.4.30

$ strings /lib/riscv64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBCXX_3.4.22
GLIBCXX_3.4.23
GLIBCXX_3.4.24
GLIBCXX_3.4.25
GLIBCXX_3.4.26
GLIBCXX_3.4.27
GLIBCXX_3.4.28
GLIBCXX_3.4.29
GLIBCXX_3.4.30
GLIBCXX_DEBUG_MESSAGE_LENGTH

由于GCC版本与支持的GLIBCXX版本有关,

因此需要的下载GCC交叉编译器版本 < 12.2,在此首先从[RISCV-GNU-toolchain](https://github.com/riscv-collab/riscv-gnu-toolchain/releases)页面

下载`riscv64-glibc-ubuntu-20.04-llvm-nightly-2023.09.26-nightly.tar.gz`

1.2 配置工具链

解压工具链

$ tar -xzvf riscv64-glibc-ubuntu-20.04-llvm-nightly-2023.09.26-nightly.tar.gz

将`bin`添加到环境变量中

$ export PATH=$PATH:${YOUR_PATH}/riscv/bin

查看交叉编译器版本

$ riscv64-unknown-linux-gnu-gcc -v
Using built-in specs.
COLLECT_GCC=riscv64-unknown-linux-gnu-gcc
COLLECT_LTO_WRAPPER=/home/allwinner/Documents/riscv/bin/../libexec/gcc/riscv64-unknown-linux-gnu/12.2.0/lto-wrapper
Target: riscv64-unknown-linux-gnu
Configured with: /home/runner/work/riscv-gnu-toolchain/riscv-gnu-toolchain/gcc/configure --target=riscv64-unknown-linux-gnu --prefix=/opt/riscv --with-sysroot=/opt/riscv/sysroot --with-pkgversion= --with-system-zlib --enable-shared --enable-tls --enable-languages=c,c++,fortran --disable-libmudflap --disable-libssp --disable-libquadmath --disable-libsanitizer --disable-nls --disable-bootstrap --src=.././gcc --disable-multilib --with-abi=lp64d --with-arch=rv64gc --with-tune=rocket --with-isa-spec=20191213 'CFLAGS_FOR_TARGET=-O2    -mcmodel=medlow' 'CXXFLAGS_FOR_TARGET=-O2    -mcmodel=medlow'
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 12.2.0 ()

交叉编译器已安装完成。

2. 交叉编译 OpenCV

OpenCV ,是一个使用`Apache License 2.0`开源许可证的计算机视觉库。虽然官方已经提供了OpenCV-deb安装包,然而由于

版本较低,并缺少cmake配置文件,使用开发不便,在这里本文重新使用交叉工具链编译新版本的OpenCV-4.10。

1. 设置编译器

$ export PATH=$PATH:${YOUR_PATH}/riscv/bin
$ export CC=riscv64-unknown-linux-gnu-gcc
$ export CXX=riscv64-unknown-linux-gnu-g++

2. 获取opencv源码

$ git clone --depth=1 https://gitcode.net/mirrors/opencv/opencv.git 

3. 配置并编译

OpenCV组件众多,然后在实际使用中我们并不会都使用,因此为了加快编译速度,取消一些组件的编译,最终的配置如下

$ cmake -Bbuild -S. \
-D BUILD_opencv_python3=ON \
-D BUILD_opencv_java=OFF \
-D BUILD_opencv_gapi=OFF \
-D BUILD_opencv_objc=OFF \
-D BUILD_opencv_js=OFF \
-D BUILD_opencv_ts=OFF \
-D BUILD_opencv_dnn=OFF \
-D BUILD_opencv_calib3d=OFF \
-D BUILD_opencv_objdetect=OFF \
-D BUILD_opencv_stitching=OFF \
-D BUILD_opencv_ml=ON \
-D BUILD_opencv_world=OFF \
-D BUILD_EXAMPLES=OFF \
-D OPENCV_ENABLE_NONFREE=OFF \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D INSTALL_C_EXAMPLES=OFF \
-D INSTALL_PYTHON_EXAMPLES=OFF\
-DCMAKE_BUILD_TYPE=Release

编译安装

$ cmake --build build
$ sudo cmake --install build 
将`install/bin`目录的opencv_version,传输到板子,运行验证,成功的话,opencv_version将在控制台打印opencv版本
$ chmod +x opencv_version
$ opencv_version
4.10.0

3. 交叉编译 MNN

[MNN](https://www.mnn.zone/m/0.3/)是阿里巴巴开发的一款速度超快的轻量级深度学习框架,支持OpenCL,Vulkan加速,可以充分发挥VisionFive 2

搭载的高性能GPU的实力。

3.1 下载MNN

使用git将MNN代码块复制到本地

$ git clone --recursive https://github.com/alibaba/MNN.git

3.2 交叉编译MNN

1. 设置编译器

$ export PATH=$PATH:${YOUR_PATH}/riscv/bin
$ export CC=riscv64-unknown-linux-gnu-gcc
$ export CXX=riscv64-unknown-linux-gnu-g++

2. 编译配置

由于VisionFive 2支持OPENCL以及VULKAN,我们将MNN的OPENCL以及VULKAN支持打开。

$ cmake -Bbuild -S. \
-DMNN_SEP_BUILD=OFF \
-DMNN_BUILD_TOOLS=ON \
-DCMAKE_BUILD_TYPE=Release \
-DMNN_BUILD_SHARED_LIBS=OFF \
-DMNN_OPENCL=ON \
-DMNN_VULKAN=ON \
-DMNN_BUILD_TEST=ON\
-DMNN_BUILD_BENCHMARK=ON

-- Use Threadpool, forbid openmp
-- >>>>>>>>>>>>>
-- MNN BUILD INFO:
--      System: Linux
--      Processor: riscv64
--      Version: 2.9.3
--      Metal: OFF
--      OpenCL: ON
--      OpenGL: OFF
--      Vulkan: ON
--      ARM82: OFF
--      oneDNN: OFF
--      TensorRT: OFF
--      CoreML: OFF
--      NNAPI: OFF
--      CUDA: OFF
--      OpenMP: OFF
--      BF16: OFF
--      ThreadPool: ON
--      Hidden: TRUE
--      Build Path: /home/VisionFive/MNN-2.9.0/build
--      CUDA PROFILE: OFF
-- WIN_USE_ASM:
-- Configuring done (0.1s)
-- Generating done (0.2s)

3. 编译

$ cmake --build build

将`build`目录的*.out,传输到板子,运行验证


$ chmod +x run_test.out
$ sudo ./run_test.out

验证mnn推理性能

$ chmod +x benchmark.out
$ sudo ./benchmark.out ${MODEL_PATH} 10 

全部评论
暂无评论
0/144