福建百益建设集团有限公司网站,怎么做网站的轮播图,网络舆情系统,上城网站建设[嵌入式AI从0开始到入土]嵌入式AI系列教程
注#xff1a;等我摸完鱼再把链接补上 可以关注我的B站号工具人呵呵的个人空间#xff0c;后期会考虑出视频教程#xff0c;务必催更#xff0c;以防我变身鸽王。
第1期 昇腾Altas 200 DK上手 第2期 下载昇腾案例并运行 第3期 官…[嵌入式AI从0开始到入土]嵌入式AI系列教程
注等我摸完鱼再把链接补上 可以关注我的B站号工具人呵呵的个人空间后期会考虑出视频教程务必催更以防我变身鸽王。
第1期 昇腾Altas 200 DK上手 第2期 下载昇腾案例并运行 第3期 官方模型适配工具使用 第4期 炼丹炉的搭建基于Ubuntu23.04 Desktop 第5期 炼丹炉的搭建基于wsl2_Ubuntu22.04 第6期 Ubuntu远程桌面配置 第7期 下载yolo源码及样例运行验证 第8期 在线Gpu环境训练基于启智ai协作平台 第9期 转化为昇腾支持的om离线模型 第10期 jupyter lab的使用 第11期 yolov5在昇腾上推理 第12期 yolov5在昇腾上应用 第13期_orangepi aipro开箱测评 第14期 orangepi_aipro小修补含yolov7多线程案例 未完待续… 文章目录 [嵌入式AI从0开始到入土]嵌入式AI系列教程前言一、opencv安装1、下载源码2、配置cmake3、编译4、安装5、验证安装 二、torch_npu的安装1、克隆torch_npu代码仓2、构建镜像3、进入Docker容器4、编译torch_npu5、安装6、验证安装 三、sampleYOLOV7MultiInput案例1、环境准备2、下载模型和数据3、转换模型4、编译程序5、运行推理6、查看推理结果 四、问题1、自动休眠问题2、 vnc配置3、dialog: command not found3、apt autoremove4、apt upgrade在firebox卡住5、jupyter lab外部网络访问6、jupyter需要输入密码或者token 总结 前言
注本文基于orangepi_aipro于2023.2.3公布的ubuntu_desktop镜像 拿到手有段时间了小问题还是比较的多的整体上和Atlas 200i DK A2差不多。 emmm没错连产品名也套娃了。 说明本文是作者测试成功并生成完善的镜像后写的因此截图会比较少存粹是因为为了一张图需要重走一遍而一遍需要好几个小时也可能需要好几遍才能把图凑齐。因此只挑重点截图了。
一、opencv安装
虽然镜像内带了opencv4.5.4但是opencv应该是从4.7.0开始支持CANN后端的。这里我参考opencv官方github仓库的Wiki重新编译了支持cann的opencv4.9.0见文章顶部的资源。 至于为什么要换版本看下图
使用我提供的资源时请将其放置于/home/HwHiAiUser目录下进入/home/HwHiAiUser/opencv4/build目录执行第四步即可
1、下载源码
git clone https://github.com/fengyuentau/opencv.git
cd opencv
git checkout cann_backend_221010git clone https://gitee.com/opencv/opencv.git #也可以直接使用gitee镜像2、配置cmake
这里是大坑
cd opencv
mkdir build
cd build
cmake -D WITH_CANNON\-D PYTHON3_EXECUTABLE/usr/local/miniconda3/bin/python3.9 \-D CMAKE_INSTALL_PREFIX/usr \-D BUILD_opencv_python3ON \-D BUILD_opencv_gapiOFF \-D PYTHON3_LIBRARY/usr/local/miniconda3/lib/libpython3.so \-D PYTHON3_INCLUDE_DIR/usr/local/miniconda3/lib/ \-D PYTHON3_NUMPY_INCLUDE_DIRS/usr/local/miniconda3/lib/python3.9/site-packages/numpy/core/include \..不要更改CMAKE_INSTALL_PREFIX参数会导致python import或者cmake include报错找不到文件 请确保cmake后生成如下图所示的配置 如非必要在生成配置后不要更改opencv文件夹包括内部文件的位置否则将会导致错误。 如果你的python不是使用的官方镜像miniconda的base环境,需要在配置时修改为自己的路径
3、编译
make -j$(nproc) #-j$(nproc) 表示使用所有可用的 CPU 核心来并行编译这里一定要在开发板上编译大约需要2小时左右。编译到97%后可能会报错fatal error: Python.h: No such file or directory,实际上这个文件是在的我尝试过各种方法不仅没用还导致从头开始编译。这里我用了一个最简单粗暴的方法就是把/usr/local/miniconda3/include/python3.9整个文件夹内的东西都复制的到opencv/build文件夹内完美解决。
4、安装
sudo make install5、验证安装
新建mobilenetv1.py执行python3 mobilenetv1.py
import numpy as np
import cv2 as cvdef preprocess(image):out image.copy()out cv.resize(out, (256, 256))out out[16:240, 16:240, :]out cv.dnn.blobFromImage(out, 1.0/255.0, mean(0.485, 0.456, 0.406), swapRBTrue)out out / np.array([0.229, 0.224, 0.225]).reshape(1, -1, 1, 1)return outdef softmax(blob, axis1):out blob.copy().astype(np.float64)e_blob np.exp(out)return e_blob / np.sum(e_blob, axisaxis)image cv.imread(/path/to/image) # replace with the path to your image
input_blob preprocess(image)net cv.dnn.readNet(/path/to/image_classification_mobilenetv1_2022apr.onnx) # replace with the path to the model
net.setPreferableBackend(cv.dnn.DNN_BACKEND_CANN)
net.setPreferableTarget(cv.dnn.DNN_TARGET_NPU)net.setInput(input_blob)
out net.forward()prob softmax(out, axis1)
_, max_prob, _, max_loc cv.minMaxLoc(prob)
print(cls {}, score {:.4f}.format(max_loc[0], max_prob))或者使用c版本 CMakeList.txt
cmake_minimum_required(VERSION 3.5.1)
project(cann_demo)# OpenCV
find_package(OpenCV 4.6.0 REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})# PP-ResNet50
add_executable(ppresnet50 ppresnet50.cpp)
target_link_libraries(ppresnet50 ${OpenCV_LIBS})# MobileNetV1
add_executable(mobilenetv1 mobilenetv1.cpp)
target_link_libraries(mobilenetv1 ${OpenCV_LIBS})# YOLOX
add_executable(yolox yolox.cpp)
target_link_libraries(yolox ${OpenCV_LIBS})
mobilenetv1.cpp
#include iostream
#include vector#include opencv2/opencv.hppvoid preprocess(const cv::Mat src, cv::Mat dst)
{src.convertTo(dst, CV_32FC3);cv::cvtColor(dst, dst, cv::COLOR_BGR2RGB);// center cropcv::resize(dst, dst, cv::Size(256, 256));cv::Rect roi(16, 16, 224, 224);dst dst(roi);dst cv::dnn::blobFromImage(dst, 1.0/255.0, cv::Size(), cv::Scalar(0.485, 0.456, 0.406));cv::divide(dst, cv::Scalar(0.229, 0.224, 0.225), dst);
}void softmax(const cv::Mat src, cv::Mat dst, int axis1)
{using namespace cv::dnn;LayerParams lp;Net netSoftmax;netSoftmax.addLayerToPrev(softmaxLayer, Softmax, lp);netSoftmax.setPreferableBackend(DNN_BACKEND_OPENCV);netSoftmax.setInput(src);cv::Mat out netSoftmax.forward();out.copyTo(dst);
}int main(int argc, char** argv)
{using namespace cv;Mat image imread(/path/to/image); // replace with the path to your imageMat input_blob;preprocess(image, input_blob);dnn::Net net dnn::readNet(/path/to/image_classification_mobilenetv1_2022apr.onnx); // replace with the path to the modelnet.setPreferableBackend(dnn::DNN_BACKEND_CANN);net.setPreferableTarget(dnn::DNN_TARGET_NPU);net.setInput(input_blob);Mat out net.forward();Mat prob;softmax(out, prob, 1);double min_val, max_val;Point min_loc, max_loc;minMaxLoc(prob, min_val, max_val, min_loc, max_loc);std::cout cv::format(cls %d, score %.4f\n, max_loc.x, max_val);return 0;
}二、torch_npu的安装
这里我参考了官方文档 注意需要提前安装docker
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository deb [archamd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable
sudo apt update
sudo apt install docker-ce
sudo systemctl start docker
sudo systemctl enable docker #设置Docker服务开机自启
sudo docker run hello-world #验证Docker是否安装成功1、克隆torch_npu代码仓
git clone https://gitee.com/ascend/pytorch.git -b v2.1.0-5.0.0 --depth 12、构建镜像
cd pytorch/ci/docker/{arch} # {arch} for X86 or ARM
docker build -t manylinux-builder:v1 .3、进入Docker容器
docker run -it -v /{code_path}/pytorch:/home/pytorch manylinux-builder:v1 bash
# {code_path} is the torch_npu source code path4、编译torch_npu
cd /home/pytorch
bash ci/build.sh --python3.95、安装
pip install ./torch_npu-2.1.0gitb2bbead-cp39-cp39-linux_aarch64.whl6、验证安装
终端执行
pythonimport torch
import torch_npux torch.randn(2, 2).npu()
y torch.randn(2, 2).npu()
z x.mm(y)print(z)三、sampleYOLOV7MultiInput案例
官方镜像内置的是python案例缺少c案例我们访问仓库获取案例
git clone https://gitee.com/ascend/samples.git为了压榨板子我选取了sampleYOLOV7MultiInput这个案例
1、环境准备
cd sample_master/inference/modelInference/sampleYOLOV7MultiInput
sudo apt install libx11-dev
sudo apt-get install libjsoncpp-dev
sudo ln -s /usr/include/jsoncpp/json/ /usr/include/json
vim src/main.cpp
#添加
#include fstream
sudo ln -s /usr/include/opencv4/opencv2 /usr/include/opencv2 #这样就不用去将opencv版本了这里readme中说需要安装x264ffmpegopencv(3.x版本)但是经过我实测镜像内都已经内置了。
2、下载模型和数据
cd data
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/YOLOV3_carColor_sample/data/car0.mp4 --no-check-certificate
cd ../model
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/yolov7/yolov7x.onnx --no-check-certificate
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/yolov7/aipp.cfg --no-check-certificate3、转换模型
atc --modelyolov7x.onnx --framework5 --outputyolov7x --input_shapeimages:1,3,640,640 --soc_versionAscend310B4 --insert_op_confaipp.cfg此处大约耗时10-15分钟。
4、编译程序
vim scripts/sample_build.sh
#将29行处make修改为以下内容来使用多线程编译
make -j$(nproc)sudo bash scripts/sample_build.sh5、运行推理
bash scripts/sample_run.sh注意此处不要使用root用户执行否则可能会提示找不到libascendcl.so
6、查看推理结果
推理大约需要1分钟输出的视频在out文件夹可以下载至本地查看
四、问题
1、自动休眠问题
这个问题仅存在于ubuntu桌面镜像经过和群友的讨论和测试在不登陆桌面的情况下大约5分钟会自动休眠且无法唤醒。 目前解决方案如下注意这种方法会直接禁用休眠
sudo systemctl status sleep.target
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target2、 vnc配置
vncserver
netstat -antup | grep vnc #查看vnc端口
vncserver -kill :3 #我们需要杀掉刚才启动的vnc服务我这是3视情况而定
vim .vnc/xstartup
#添加以下内容否则没有桌面是黑屏的
startxfce4
#修改完成后重新启动vnc
vncserver在本地使用vncview等工具使用ip:端口的方式访问
3、dialog: command not found
这个错误多在使用apt命令的时候会遇到在Linux系统中尝试执行含有该命令的脚本或命令行操作时发生。 解决方案如下
sudo apt install dialog3、apt autoremove
慎用经大量测试会导致卸载netplan.io这将导致除你当前正在使用的网络外其余的全部嗝屁。 解决方案
sudo apt-mark hold netplan.io4、apt upgrade在firebox卡住
这个应该是snap导致的如果你暂时不需要新版的firebox使用以下指令跳过升级
sudo apt-mark hold firebox #升级时保留选定的软件包当我们需要升级保留的软件包或者指定的软件包时执行
sudo apt-mark unhold firebox #删除保留设置
sudo apt --only-upgrade install package1 package2 #只升级指定的package5、jupyter lab外部网络访问
这里使用镜像notebook文件夹内自带的start.sh只能在本地浏览器访问因此我建议使用命令手动启动jupyter,记得把ip改成开发板的ip或者将其写入start.sh文件内
jupyter lab --ip 192.168.3.200 --allow-root --no-browser6、jupyter需要输入密码或者token
这个密码只能说防君子还使得我们使用变得麻烦因此我选择直接去掉 执行以下命令二选一即可
jupyter notebook password #连续两次回车密码就变成空白了直接点登录即可当然作为终极懒人这还是太麻烦了
jupyter lab --generate-config
vim /home/HwHiAiUser/.jupyter/jupyter_lab_config.py
#找到c.ServerApp.token这一行修改为
c.ServerApp.token 总结
不得不说这个官方镜像小毛病还是挺多的我已经打包了一份镜像关注我B站动态获取。