实验环境
- 虚拟机——开发环境
- Ubuntu 18.04 x86操作系统
- CANN toolkit 5.0.4.alpha005的x86版本和aarch64版本
- 开发板——运行环境
- 固件版本1.0.12.alpha
- **Ubuntu 18.04 arm **操作系统
- 200DK的CANN 5.0.4的nnrt驱动包
1. 环境部署
1.1 制作SD卡——mksd方式
- 制卡环境:含TF卡插槽的计算机,搭载VMware虚拟机 Ubuntu 18.04 X86操作系统
1.1.1 创建制卡目录mksd,下载制卡所需的文件
#创建目录
sudo mkdir mksd
cd mksd
# 下载制卡脚本
wget https://gitee.com/ascend/tools/raw/master/makesd/generic_script/make_sd_card.py
wget https://gitee.com/ascend/tools/raw/master/makesd/generic_script/make_ubuntu_sd.sh
#下载ubuntu arm版操作系统镜像
wget http://old-releases.ubuntu.com/releases/18.04.3/ubuntu-18.04.5-server-arm64.iso
#下载200DK的CANN 5.0.4的nnrt驱动包
wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/5.0.4.alpha005/Ascend-cann-nnrt_5.0.4.alpha005_linux-aarch64.run
#下载固件
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/turing/resource/atlas200dk/1.0.12/A200dk-npu-driver-21.0.3.1-ubuntu18.04-aarch64-minirc.tar.gz
1.1.2 TF卡格式化
将TF卡插入电脑插槽
格式化TF卡
1.1.3 制卡
#安装依赖
pip3 install pyyaml -i https://pypi.tuna.tsinghua.edu.cn/simple --user
sudo apt-get install qemu-user-static binfmt-support python3-yaml squashfs-tools gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
#查看TF卡所在目录
sudo fdisk -l
#开始制卡
python3 make_sd_card.py local /dev/sdb
出现Make SD Card successfully!
则制卡成功
1.1.4 运行环境安装
将制卡完成的TF卡从笔记本电脑的卡槽拔出,再插入200DK的TF卡槽,开始加电:200DK的4个灯会先亮右边两个灯,然后左边两个灯会闪烁(貌似在固件更新),然后变得4个灯都长亮。
耐心等待4个灯全绿——表示200DK启动成功。
1.2 连接开发板并配置网络
- 连接方式:通过数据线连接开发板和笔机本,通过网线共享网络
1.2.1 USB连接并下载驱动
参考资料:https://blog.csdn.net/qq_38597208/article/details/127878304
使用USB线连接开发板和笔机本,此时电脑缺少相关网卡驱动
在RNDIS上点击右键,选择更新驱动程序
选择浏览我的电脑以查找驱动程序
选择让我从计算机上的可用驱动程序列表中选取
滑动鼠标找到网络适配器并选择选择,然后点击下一页
在接下来的窗口中,先在左边厂商找到Microsoft,右边型号处找到USB RNDIS6适配器,最后点击下一页
最弹出如下窗口便完成了USB虚拟网卡驱动安装
此时能够正常识别
这时可以在虚拟机的USB接入处选择接入该设备
#下载网络配置脚本
wget https://gitee.com/ascend/tools/raw/master/configure_usb_ethernet/for_20.1/configure_usb_ethernet.sh
#运行脚本
bash configure_usb_ethernet.sh -s 192.168.1.188
虚拟机设置为192.168.1.188,开发板默认192.168.1.2
可以使用 ssh [email protected] 连接200DK(密码Mind@123)
运行环境安装完成
1.2.2 环境变量配置
# 以安装用户在运行环境任意目录下执行以下命令,打开.bashrc文件。
vi ~/.bashrc
# 在文件最后一行后面添加如下内容。CPU_ARCH环境变量请根据运行环境cpu架构填写,如export CPU_ARCH=aarch64
export CPU_ARCH=`arch`
export THIRDPART_PATH=${HOME}/Ascend/thirdpart/${CPU_ARCH} #代码编译时链接第三方库
export LD_LIBRARY_PATH=${HOME}/Ascend/thirdpart/${CPU_ARCH}/lib:$LD_LIBRARY_PATH #运行时链接库文件
export INSTALL_DIR=${HOME}/Ascend/ascend-toolkit/latest #CANN软件安装后文件存储路径
# 执行命令保存文件并退出。
:wq!
# 执行命令使其立即生效。
source ~/.bashrc
# 创建第三方依赖文件夹
mkdir -p ${THIRDPART_PATH}
# 拷贝相关数据,其中X.X.X.X为开发环境ip地址。
sudo scp -r [email protected]:${THIRDPART_PATH}/common ${THIRDPART_PATH}
还需要执行以下命令拷贝media_mini等动态库及相关头文件,满足摄像头样例运行需要
mkdir ${INSTALL_DIR}/driver
cp /usr/lib64/libmedia_mini.so ${INSTALL_DIR}/driver/
cp /usr/lib64/libslog.so ${INSTALL_DIR}/driver/
cp /usr/lib64/libc_sec.so ${INSTALL_DIR}/driver/
cp /usr/lib64/libmmpa.so ${INSTALL_DIR}/driver/
cp /usr/local/Ascend/include/peripheral_api.h ${INSTALL_DIR}/driver/
1.2.3 配置网络
通过网线连接笔机本和DK,选择共享无线网给以太网

1.2.4 安装opencv
#运行环境联网并执行以下命令进行安装(注:确保是3.x版本)
sudo apt-get install libopencv-dev
1.3 配置开发环境
切换至虚拟机——开发环境
1.3.1 下载相关文件
#root下安装相关依赖
apt-get install -y gcc g++ make cmake zlib1g-dev libbz2-dev libsqlite3-dev libssl-dev libxslt1-dev libffi-dev net-tools libncursesw5-dev
#安装CANN Toolkit
#需要同时安装CANN toolkit的x86版本和aarch64版本
wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/5.0.4.alpha005/Ascend-cann-toolkit_5.0.4.alpha005_linux-x86_64.run
wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/5.0.4.alpha005/Ascend-cann-toolkit_5.0.4.alpha005_linux-aarch64.run
#安装Toolkit
./Ascend-cann-toolkit_5.0.4.alpha005_linux-x86_64.run --install --chip=Ascend310-minirc
./Ascend-cann-toolkit_5.0.4.alpha005_linux-aarch64.run --install --chip=Ascend310-minirc
1.3.2 环境变量配置
由于采用的是分设环境开发,需要进行环境变量配置
# 以安装用户在开发环境任意目录下执行以下命令,打开.bashrc文件。
vi ~/.bashrc
# 在文件最后一行后面添加如下内容。CPU_ARCH环境变量请根据运行环境cpu架构填写,如export CPU_ARCH=aarch64
export CPU_ARCH=aarch64
# THIRDPART_PATH需要按照运行环境安装路径设置,如运行环境为arm,指定安装路径为Ascend-arm,则需要设置为export THIRDPART_PATH=${HOME}/Ascend-arm/thirdpart/${CPU_ARCH}
export THIRDPART_PATH=${HOME}/Ascend/thirdpart/${CPU_ARCH} #代码编译时链接第三方库
# CANN软件安装后文件存储路径,最后一级目录请根据运行环境设置,运行环境为arm,这里填arm64-linux;运行环境为x86,则这里填x86_64-linux,以下以arm环境为例
export INSTALL_DIR=${HOME}/Ascend/ascend-toolkit/latest/arm64-linux
# 执行命令保存文件并退出。
:wq!
# 执行命令使其立即生效。
source ~/.bashrc
# 创建第三方依赖文件夹
mkdir -p ${THIRDPART_PATH}
# 拷贝公共文件到第三方依赖文件夹
cd $HOME
git clone https://gitee.com/ascend/samples.git
cp -r ${HOME}/samples/common ${THIRDPART_PATH}
还需要执行以下命令拷贝media_mini等动态库及相关头文件,满足摄像头样例编译需要
mkdir -p ${INSTALL_DIR}/driver
sudo scp -r [email protected]:/usr/lib64/libmedia_mini.so ${INSTALL_DIR}/driver/
sudo scp -r [email protected]:/usr/lib64/libslog.so ${INSTALL_DIR}/driver/
sudo scp -r [email protected]:/usr/lib64/libc_sec.so ${INSTALL_DIR}/driver/
sudo scp -r [email protected]:/usr/lib64/libmmpa.so ${INSTALL_DIR}/driver/
sudo scp -r [email protected]:/usr/local/Ascend/include/peripheral_api.h ${INSTALL_DIR}/driver/
1.3.3 安装opencv
执行以下命令拷贝对应so
# 将arm下的opencv相关的so拷贝到X86的aarch64-linux-gnu目录,不会对本地X86环境本身使用产生任何问题。
cd /usr/lib/aarch64-linux-gnu
# 拷贝相关so,其中X.X.X.X为运行环境ip地址。
sudo scp -r [email protected]:/lib/aarch64-linux-gnu/* ./
sudo scp -r [email protected]:/usr/lib/aarch64-linux-gnu/* ./
sudo scp -r [email protected]:/usr/lib/*.so.* ./
# 拷贝opencv相关头文件。
sudo scp -r [email protected]:/usr/include/opencv* /usr/include
1.3.4 安装ffmpeg和x264、acllite
- 下载并安装x264。
# 下载x264
cd ${HOME}
git clone https://code.videolan.org/videolan/x264.git
cd x264
# 安装x264
./configure --enable-shared --disable-asm
make
sudo make install
sudo cp /usr/local/lib/libx264.so.164 /lib
- 下载并安装ffmpeg。
./configure --enable-shared --enable-pic --enable-static --disable-x86asm --cross-prefix=aarch64-linux-gnu- --enable-cross-compile --arch=aarch64 --target-os=linux --enable-libx264 --enable-gpl --prefix=${THIRDPART_PATH}
make -j8
make install
- 安装acllite并将结果文件拷贝到运行环境
# 下载源码并安装git
cd ${HOME}
sudo apt-get install git
git clone https://gitee.com/ascend/samples.git
# 编译并安装acllite
cd ${HOME}/samples/cplusplus/common/acllite/
make
make install
# 拷贝相关so,其中X.X.X.X为运行环境ip地址。
sudo scp -r ${THIRDPART_PATH}/* [email protected]:${THIRDPART_PATH}
2. 摄像头相关实践
强烈建议自行去gitee仓库查看教程
2.1 源码下载
切换至开发环境
git clone https://gitee.com/ascend/samples.git
cd samples
git checkout v0.3.0
2.2 源码编译
切换到ascendcamera目录,创建目录用于存放编译文件,例如,本文中,创建的目录为 build/intermediates/host
cd $HOME/samples/cplusplus/level1_single_api/5_200dk_peripheral/ascendcamera
mkdir -p build/intermediates/host
切换到 build/intermediates/host目录,执行cmake生成编译文件
cd build/intermediates/host
make clean
cmake ../../../src -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ -DCMAKE_SKIP_RPATH=TRUE
执行make命令,生成的可执行文件main在 ascendcamera/out目录下
make
2.3 样例运行(图片保存至本地)
执行以下命令,将开发环境的 ascendcamera目录上传到运行环境中,例如 /home/HwHiAiUser,并以HwHiAiUser(运行用户)登录运行环境(Host)。
# 【xxx.xxx.xxx.xxx】为运行环境ip,200DK在USB连接时一般为192.168.1.2。
scp -r $HOME/samples/cplusplus/level1_single_api/5_200dk_peripheral/ascendcamera [email protected]:/home/HwHiAiUser
ssh [email protected]
切换到运行环境并执行
cd $HOME/ascendcamera/out
./main -i -c 1 -o ./output/filename.jpg --overwrite
参数说明:
- -i:代表获取jpg格式的图片。
- -c:表示摄像头所在的channel,此参数有“0”和“1”两个选项,“0“对应“Camera1“,“1“对应“Camera2“,如果不填写,默认为“0”。
- -o:表示文件存储位置,此处output为本地已存在的文件夹名称,filename.jpg为保存的图片名称,可用户自定义。
- --overwrite:覆盖已存在的同名文件。
(内容转自:天马司空)