RV1126B学习嵌入式AI应用--DAY2

📅 2026/8/19 12:41:11
RV1126B学习嵌入式AI应用--DAY2
目标首次接触linux应用通过视频学习对嵌入式AI应用有初步了解硬件elf-rv1126b参考学习视频B站海归博士Dr魏的高密乡文档内容只记录操作知识点不做记录DAY-2残差网络部署YOLO模型部署chrootOpenCV显示摄像头1.残差网络部署进入module下载模型onnx模型——进入python生成onnx模型——生成推理程序流程和Day1的例程基本一致例程位置rknn_model_zoo-main/examples在这个目录下有很多rk官方已经做好的模型包括yolo、resnet等。1.1 下载模型进入残差模型的module目录后执行命令下载模型。在 rknn_model_zoo-main/examples/resnet/model 目录下执行命令./download_model.sh注意记得保证脚本是可执行文件主要是下载onnx文件1.2 模型转换将onnx模型转换为rknn文件进入残差模型的python目录后执行命令转换成rknn文件。在 rknn_model_zoo-main/examples/resnet/python 目录下执行以下命令python3 resnet.py ../model/resnet50-v2-7.onnx rv1126b1.3 推理程序进入到 rknn_model_zoo-main 目录执行编译脚本./build-linux.sh -t rv1126b -a aarch64 -d resnet使用elf-rv1126b开发板在执行此命令时会出现以下报错注意elf的开发板使用的是debian文件系统不是buildroot就无需交叉编译。可以通过chroot的方式进行编译。对chroot方式的介绍我放到第3章节讲解。编译成功生成的推理程序主要位于install 目录下1.4 板端测试进入开发板进入到 /rknn_model_zoo-main/examples/resnet 目录下输入以下命令../../install/rv1126b_linux_aarch64/rknn_resnet_demo/rknn_resnet_demo model/resnet50-v2-7.rknn model/dog_224x224.jpg2.YOLO模型YOLO具体内容可以自行学习如果想对yolo进行魔改推荐一下魔鬼面具老师。具体部署过程和之前部署的两个都一样。3.chrootchroot的方式说白了就是直接用开发板的环境和自己计算机的算力进行编译一般对于debian这种文件系统我们可以直接在开发板上编译但是对于有的开发板算力不够如果在开发板上编译时间很久甚至无法编译成功此时就可以将开发板镜像中的文件系统镜像拷贝到虚拟机中然后将此镜像挂载再通过chroot的方式就可以使用电脑的算力和开发板的环境进行编译。操作步骤解包找到rootfs.img挂载chroot编译烧录测试3.1 解包打开瑞芯微的开发工具和elf官方提供的update.img镜像将其解包解包后在路径里就可以找到rootfs.img镜像3.2 挂载将rootfs.img镜像拷贝到虚拟机中。并将此镜像放到自己工作目录里自己创建一个mnt任意名字都可以的目录将这个文件系统挂载进去mkdir mnt sudo mount rootfs.img mnt/此时mnt目录里就是文件系统镜像里的东西然后将ai例程都拷贝进去准备进行编译我自己创建了一个叫ai的目录然后拷贝进来3.3 chroot输入以下命令进行chroot。sudo chroot mnt/3.4 编译输入1.3 章节中的编译命令进行编译。编译好的程序在如下目录里。输入exit退出chroot再输入以下命令对文件系统进行解挂载sudo umount mnt可以看到确实解挂载成功了3.5 烧录测试将rootfs.img从虚拟机中拷贝出来在串口终端同时按住ctrld然后同时开发板进行复位重启就可进入loader模式烧录。如果用maskrom模式烧录需要勾选miniloader和分区表文件。烧录完成后在板卡上执行推理命令测试成功。4.OpenCV显示摄像头4.1测试gstream播放摄像头飞凌精灵的摄像头支持两个13855和UVC摄像头。我用UVC摄像头演示。# 查看摄像头节点主要获得uvc摄像头是vido52 v4l2-ctl --list-devices # 测试摄像头播放 因为我用VNC进行的桌面显示所以用一下命令播放 export DISPLAY:1 gst-launch-1.0 v4l2src device/dev/video52 ! videoconvert ! ximagesink handle-eventsfalse4.2 opencv播放使用OpenCV播放摄像头其实可以自己用AI写一个Opencv的程序在板卡上进行编译。自己ai搜索了一下编译命令g -stdc11 -O2 -Wall -o video_capture main.cpp pkg-config --cflags --libs opencv4能够显示画面但是延迟很高看着像是软件解码CPU占用率也很高。没有去仔细看视频中的源码不知道博主用什么播放的。4.3 gstreamopencvgstmearopencv播放基本不卡顿我用AI写了一个测试脚本。注意因为我用的VNC的远程桌面所以gst播放命令和手册中的播放命令不太一样如果是接的真实屏幕可以直接用手册中的gst命令。#include opencv2/opencv.hpp #include iostream int main() { // 构建 GStreamer 管道字符串 // v4l2src 从 /dev/video52 采集videoconvert 转成 BGR 格式 // 最后用 appsink 将数据输出给 OpenCV std::string pipeline v4l2src device/dev/video52 ! videoconvert ! video/x-raw,formatBGR ! appsink; // 使用 CAP_GSTREAMER 标志打开 cv::VideoCapture cap(pipeline, cv::CAP_GSTREAMER); if (!cap.isOpened()) { std::cout 无法打开摄像头GStreamer 管道 std::endl; return -1; } // 可选设置缓冲区大小以减少延迟部分后端支持 cap.set(cv::CAP_PROP_BUFFERSIZE, 1); cv::namedWindow(Video, cv::WINDOW_NORMAL); cv::resizeWindow(Video, 1280, 720); // 可以先不用全屏便于测试 cv::Mat frame; while (true) { if (!cap.read(frame)) { std::cout 无法获取帧 std::endl; break; } // 如果还需要旋转可以保留但会增加 CPU 开销 // cv::rotate(frame, frame, cv::ROTATE_90_CLOCKWISE); cv::imshow(Video, frame); if (cv::waitKey(1) 27) break; // ESC 退出 } cap.release(); cv::destroyAllWindows(); return 0; }5.YOLO摄像头推理