ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

RK3588嵌入式AI开发:从LCD显示到OpenCV与YOLOv8 NPU部署全攻略

RK3588嵌入式AI开发:从LCD显示到OpenCV与YOLOv8 NPU部署全攻略 经常有人问我RK3588做嵌入式AI到底该从哪一步学起我的回答一直很明确——先把LCD显示和OpenCV这条图像通路打通。原因很简单不管你是做实时检测、视频监控还是一个能现场演示的功能原型AI推理的结果最终都要落到屏幕上。屏幕能不能亮、图像显示得对不对、图像预处理跑得够不够快这些问题不解决后面谈再多NPU算力和模型优化都是空中楼阁。这篇文章是把我在实际项目里用RK3588从零跑通LCD显示、ARM环境下编译OpenCV、再把YOLOv8部署到RK3588 NPU上推理的完整链路做一个梳理。不绕弯子原理、命令、坑位、排查逻辑都会讲到适合刚接触ARM嵌入式AI开发或者手里正好有一块RK3588开发板的朋友。1. 为什么是RK3588——从0搭建ARM嵌入式AI开发环境1.1 选型思路RK3588在嵌入式AI开发里到底强在哪先说说为什么选RK3588而不是树莓派或者Jetson系列。树莓派5现在性能不弱但它的算力集中在CPU和GPU上跑传统视觉算法没问题真正要跑YOLOv8这类检测模型还是得依赖外部推理框架或者极简模型实时性很难拉满。Jetson系列有CUDA生态推理表现确实好但价格高而且对于很多国产屏幕、国产模组、定制载板来说软件适配和驱动资源并没有RK那么开放。RK3588的优势其实很直白CPU部分是4个A76大核加4个A55小核主频能到2.4GHz左右GPU是Mali-G610NPU号称6TOPS算力同时内置VPU支持硬件编解码8K视频都能解。最关键的是瑞芯微对Linux和Android两条线的驱动都有长期维护LCD、MIPI、PCIe、USB、以太网这些外设出来就能用不用你从头写底层的寄存器操作。对搞嵌入式AI的人来说这意味着你可以把80%的精力放在业务算法上而不是跟内核驱动死磕。我做选型的时候还额外看中一点RK3588的NPU支持INT8和INT16量化模型YOLOv8这种主流检测网络经过转换成RKNN格式后在NPU上跑得非常顺。整个链路下来一块板子的成本比Jetson低不少却能把屏幕显示、摄像头采集、OpenCV预处理和模型推理全部塞进去这是它最吸引人的地方。1.2 系统烧录与第一次启动先让板子跑起来开发板到手后的第一件事不是急着编译代码而是把系统稳定跑起来。RK3588有非常成熟的官方固件体系推荐优先烧录官方Linux镜像比如Ubuntu或者Debian系的系统镜像。刷机方式有两种一种是用瑞芯微的RKDevTool在Windows下通过USB烧录另一种是直接用Linux下的dd命令把镜像写到TF卡或者U盘里。用RKDevTool烧录时有几个细节很容易踩坑进入MaskROM模式之前先把开发板的电源断开然后按住板子上的恢复键Recovery再插USB电脑端才能正确识别到设备。识别之后的分区表不要随意改动官方固件包里已经分好了uboot、kernel、resource、rootfs这些分区全程选默认配置就能正常启动。我个人更推荐用官方提供的SDK配套镜像RK3588的系统初始化、设备树和驱动都调试得比较完整比自己从头定制Debian省太多时间。系统起来之后我习惯用两种方式登录开发板一种是用串口线连接调试串口通过minicom或者screen直接看内核日志这种方式在出问题排查时最可靠第二种是连接HDMI显示器之后通过有线网口SSH登录。在嵌入式开发里SSH是日常主力串口则专门留给系统起不来、网络配置错乱这些极端情况。另外第一次登录后建议顺手更新一下软件源和基础工具不然后面装OpenCV依赖库的时候会一路卡壳。1.3 交叉编译环境直接在PC上编ARM程序的高效方案RK3588是ARM架构板子本身就是一台小型Linux电脑很多教程会让你直接在板子上敲代码、编项目。这个方法不是不行但对于编译OpenCV这种体积大、模块多的库板载编译的耗时和内存压力都让人焦虑。更高效的做法是在PC上搭一套交叉编译环境编译出来的ARM可执行文件再传到板子上跑。交叉编译的核心是准备好aarch64的编译工具链。在Ubuntu PC上只需要装官方自带的交叉编译器就能覆盖大部分场景sudo apt update sudo apt install -y gcc-aarch64-linux-gnu g-aarch64-linux-gnu如果是给板子编译带第三方库依赖的项目一定要在PC上准备一套和板子系统匹配的sysroot也就是目标系统根文件系统的镜像目录。否则链接的时候会报一堆找不到libxxx.so的错误。平时我会用一个CMake toolchain文件来管理这套环境内容大致是这样的set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR aarch64) set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc) set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g) set(CMAKE_SYSROOT /home/user/rk3588-sysroot) set(CMAKE_FIND_ROOT_PATH /home/user/rk3588-sysroot) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)用这套toolchain编译出来的程序只要板端库版本跟sysroot一致拷过去就能直接跑。经验之谈交叉编译遇到明明编好了但板子上运行报段错误这类问题九成是系统库版本不一致导致的优先核对libc、libstdc和板端的关联版本。1.4 环境自检一条命令验证LCD和OpenCV是否就绪环境搭好之后最忌讳的就是一上来跑大项目结果底层的显示和图像库都是坏的。我习惯先做一轮快速自检确认LCD有帧缓冲设备节点、确认摄像头V4L2节点存在、确认OpenCV在目标系统里可以正常import。一键自检命令大致这样ls /dev/fb* /dev/video* 2/dev/null \ python3 -c import cv2; print(OpenCV, cv2.__version__)关于LCD验证/dev/fb0存在意味着内核已经为显示设备创建了帧缓冲接口后续可以用它做屏幕填充测试。摄像头则看/dev/video0这类节点是否存在。至于OpenCV如果你用的是源码编译版本这里会正常打印出版本号。只要这三个信息都正常你的RK3588开发环境就已经具备了继续往下折腾的所有基础条件。2. LCD显示适配MIPI DSI屏幕调通与背光控制2.1 LCD在嵌入式AI项目里到底承担什么角色很多人把LCD显示当成一个板卡出厂必须保证能用的功能实际上在嵌入式AI开发中LCD是你观察算法效果的最直接窗口。拿RK3588做一个实时物体识别项目来说摄像头采集画面给NPU算出结果后如果不把画面上屏算法到底识别了什么、识别框位置准不准、帧率是否流畅你完全没有直观感知。屏幕显示调试不好整个AI开发都像盲人摸象。在RK3588开发中LCD通常走MIPI DSI接口。MIPI DSI是移动设备常用的显示接口协议它把像素数据通过差分信号传给屏幕和普通台式机显示器用的HDMI、DP不是一个体系。所以很多做习惯了上位机开发的朋友第一次接触RK3588的屏幕适配会有点不习惯——屏幕上电并不是插上排线就能工作还涉及内核设备树、屏幕驱动、时序参数和背光控制。2.2 MIPI DSI屏幕适配的核心逻辑参数、设备树与驱动屏幕适配的第一件事是拿到屏幕的数据手册里面的关键参数包括分辨率比如1080x1080或者800x1280像素时钟频率也就是pixel clock行同步和帧同步的前后肩参数即hsync、hbp、hfp、vsync、vbp、vfp。这些参数最终会写进内核的设备树文件里内核根据它们把数据按照屏幕要求的时序发出。RK3588的设备树里DSI节点通常长这样mipi_dsi0 { status okay; panel0 { compatible panel-mipi-dsi; reg 0; backlight backlight; reset-gpios gpio3 RK_PA5 GPIO_ACTIVE_LOW; port { panel_in_dsi0: endpoint { remote-endpoint dsi0_out_panel; }; }; panel-timing { clock-frequency 72000000; hactive 800; vactive 1280; hback-porch 40; hfront-porch 40; hsync-len 4; vback-porch 20; vfront-porch 20; vsync-len 4; }; }; };这段内容不是给你死记的而是强调一个逻辑屏幕适配本质上是把你的屏幕参数翻译成内核能理解和输出的时序配置。如果屏幕是标准的、已经有厂商提供ddr或者dts适配好的型号直接复用或微调就行如果是非标屏幕就必须照着数据手册一栏一栏填对。这里有个容易忽略的点除了时序参数屏幕的初始化序列也很关键。很多MIPI屏内建控制芯片需要在上电后发送一串初始化命令比如设置显示方向、色彩模式、亮度调整寄存器等。这类init序列一般由屏幕模组厂提供可以放在驱动或者设备树中项目里最常见的屏幕不亮原因就是reset引脚或者初始化时序没符合屏的要求。2.3 背光亮度、分辨率与色彩屏幕点亮后的三个必查项屏幕亮起来之后先别急着跑图形界面把下面三个东西查清楚能帮你避免后面一大堆莫名其妙的问题。第一个是背光。RK3588的背光一般在设备树里被抽象成一个backlight节点系统起来后在sysfs里能看到对应目录。控制亮度很简单cat /sys/class/backlight/*/brightness echo 128 /sys/class/backlight/*/brightness注意RK3588的背光方案分两种一种是独立背光驱动芯片通过PWM调光另一种是屏幕自带背光主板上的GPIO只做使能。如果你发现brightness文件不存在说明背光控制逻辑可能不在这个路径下需要检查设备树里的backlight节点以及驱动是否加载正常。第二是分辨率。执行modetest -M rockchip -p可以看到当前各显示接口的输出模式包括分辨率、刷新率、连接状态。如果屏幕实际分辨率和内核配置不一致显示内容会拉伸或者只有一部分能看见这时候务必检查panel-timing里的hactive和vactive。第三是色彩。MIPI DSI既支持RGB888也支持RGB666甚至更低的色彩格式。如果内核配置的像素格式和屏幕实际支持的不一致屏幕可能偏色比如红色变成蓝色、画面淡白或出现彩色噪点。这种情况不用怀疑屏坏了改设备树里的bpp或format字段再重新编译内核即可。2.4 屏幕点不亮一套不吃玄学的排查链路屏幕点不亮时很多人第一反应是换屏幕、换板子、重烧系统其实90%的情况是有明确规律的。我通常按下面这个顺序排查按优先级从物理层到协议层走一遍排查项检查方法常见问题供电万用表量排线附近电压供电不足导致屏幕白屏或者闪烁背光观察屏幕是否透光背光未使能画面实际存在但看不清复位示波器或GPIO状态检查reset引脚电平不对屏幕没有退出复位信号dmesg看DSI probe日志DPHY lane配置错误时钟或数据线反了时序对照数据手册核对dts像素时钟过高屏幕无法锁相格式检查bpp/color format格式不匹配导致花屏或偏色实际操作中如果背光亮了但屏幕上什么都看不见我一般先用dmesg | grep -i dsi看驱动日志确认是probe失败还是panel on失败。probe失败往往是设备树里的compatible没匹配上屏幕驱动panel on失败则多半是init序列或时序参数的问题。如果屏幕有一点点亮但颜色完全乱掉先怀疑时序参数里hsync和vsync极性配置这个坑特别隐蔽数据手册里用High Active和Low Active两个词就能让你调一个下午。这套排查逻辑的关键是不要跳步骤。先把物理连接和供电确认无误再谈软件配置。我有一次排查了一个通宵最后发现是屏幕排线接口松了一脚这种低级错误最耗人。3. OpenCV在ARM上的源码编译与加速配置3.1 为什么不直接apt install预编译包在ARM上的先天短板RK3588的板载系统是ARM64 Ubuntu理论上可以直接apt install python3-opencv装一个可用的OpenCV。但真做嵌入式AI项目的人很少这么干原因是预编译包有几个硬伤一是功能裁剪严重很多模块如cv2.xfeatures2d、cv2.dnn可能在发行版里没编译进去二是视频I/O后端支持不全你从摄像头读取数据时用V4L2后端有时候apt版本根本没编译V4L2支持三是optimization标志一般是通用的没有针对ARMv8和NEON指令集做优化。嵌入式视觉开发里图像预处理是要吃CPU资源的同一块RK3588一个针对NEON优化的OpenCV和通用预编译包跑同一个高斯滤波或者缩放操作性能可能差三四倍。所以结论很明确在RK3588上做正儿八经的视觉开发源码编译OpenCV是绕不开的一步。3.2 源码编译OpenCV的CMake配置项与踩坑编译OpenCV之前先把依赖库装齐否则编译到一半会各种报头文件缺失。我常用的依赖清单是sudo apt update sudo apt install -y build-essential cmake git pkg-config \ python3-dev python3-numpy \ libjpeg-dev libpng-dev libtiff-dev \ libavcodec-dev libavformat-dev libswscale-dev \ libv4l-dev libgtk-3-dev libusb-1.0-0-dev然后从官方仓库拉取源码建议选择带contrib的版本这样SIFT等算法也能用git clone https://github.com/opencv/opencv.git git clone https://github.com/opencv/opencv_contrib.git cd opencv mkdir build cd buildCMake配置是核心环节直接决定编译出的OpenCV到底适用于你的场景还是只能hello world。我常用参数如下cmake -DCMAKE_BUILD_TYPERelease \ -DCMAKE_INSTALL_PREFIX/usr/local \ -DWITH_NEONON \ -DWITH_V4LON \ -DWITH_FFMPEGON \ -DWITH_GTKON \ -DWITH_OPENCLON \ -DBUILD_opencv_python3ON \ -DOPENCV_EXTRA_MODULES_PATH../../opencv_contrib/modules \ ..这里重点解释几个参数WITH_NEON是让OpenCV使用ARM的NEON SIMD指令集图像矩阵运算能获得大幅加速WITH_V4L决定是否支持V4L2摄像头设备WITH_FFMPEG保证视频解码能力。如果编译环境内存不够建议加上-DWITH_OPENMPON或者直接-j4编译别一次性顶满所有核我踩过编译到一半内存不足直接死机的坑。编译完成后make -j6 sudo make install sudo ldconfig整个编译过程在RK3588板载环境下大约需要40分钟到1个多小时取决于你配置的模块数量。如果嫌慢就先用1.3节讲到的交叉编译思路在PC上编好再整体搬到板子上。3.3 验证OpenCV正确性从读取摄像头到LCD输出代码编译和安装只是第一步验证OpenCV能否正常驱动摄像头我才敢继续往下做。最简单的验证代码长这样import cv2 cap cv2.VideoCapture(0) if not cap.isOpened(): print(camera open failed) else: ret, frame cap.read() if ret: cv2.imwrite(/tmp/test.jpg, frame) print(capture ok, frame size:, frame.shape)在嵌入式环境里需要注意摄像头可能不是/dev/video0而是/dev/video1或者更靠后的节点。可以用v4l2-ctl --list-devices查看设备名和节点的对应关系。画面能不能在LCD上显示是OpenCV和LCD联调的关键。如果你的系统里有桌面环境用cv2.imshow会弹出一个窗口但在纯命令行或者显示服务没起来的环境下imshow往往报Could not initialize OpenCV UI这类错误。这时候不要浪费时间折腾GUI直接把推理结果做完后保存成图片再用显示工具一张张上屏或者改用DRM/KMS接口直接全屏渲染。对AI项目来说绝大多数时候你在LCD上看到的不是OpenCV的原始窗口而是你自行拼接的带识别框和状态信息的完整画面这个后面第5节会详细说。4. 把YOLOv8部署到RK3588的完整链路4.1 NPU与RKNN Toolkit为什么模型不能直接在板子上跑YOLOv8是PyTorch生态下的模型而石头剑下的RK3588 NPU并不认识PyTorch的模型格式。NPU只能运行厂商自己定义格式的模型在瑞芯微平台里就是RKNN格式。所以整个部署链路的核心是把PyTorch模型转成RKNN模型再把RKNN模型交给NPU推理。这里还要区分两套东西rknn-toolkit2是跑在PC上的模型转换和仿真工具负责加载PyTorch/ONNX模型、做量化、导出RKNN文件rknn-toolkit-lite也常写为rknnlite是跑在开发板上的运行时库负责加载RKNN文件并调用NPU执行推理。很多人第一次接触时把这两个搞混在板子上装了一个大几百兆的PC端工具包自然到处报错。瑞芯微官方提供的转换套件版本很重要不同RK3588固件配套的RKNN Runtime版本可能不同必须确保你的转换工具版本和板端运行时版本对应否则会出现rknn版本不匹配这类极其恼人的问题。经验之谈去板端执行python3 -c from rknnlite.api import RKNNLite; print(RKNNLite.__doc__)看看安装的是哪个版本再去PC端用同版本的toolkit2做转换可以省去八成兼容性问题。4.2 pt到ONNX到RKNN模型转换的全流程先把YOLOv8的PyTorch模型导出成ONNX。这一步用YOLO官方提供的CLI工具即可pip install ultralytics yolo export modelyolov8n.pt formatonnx opset12为什么要先转ONNX因为RKNN Toolkit对ONNX格式的支持最成熟直接从PyTorch导出也能转但各种自定义算子容易出幺蛾子走ONNX这个中间层最稳定。导出时注意opset一般设置在12到13之间太高了可能会触发部分算子兼容问题。接着写一个Python脚本用rknn-toolkit2完成核心转换from rknn.api import RKNN rknn RKNN() rknn.config(mean_values[[0, 0, 0]], std_values[[255, 255, 255]], target_platformrk3588) rknn.load_onnx(modelyolov8n.onnx) rknn.build(do_quantizationTrue, datasetdataset.txt) rknn.export_rknn(yolov8n.rknn)dataset.txt是一个文本文件每行写一张用于量化校准的图片路径一般放几十到上百张覆盖不同场景的图片就够。量化这一步如果do_quantizationFalse模型会以FP16精度导出NPU性能得不到充分利用如果开启do_quantizationTrue模型会压缩成INT8推理速度明显提升但精度会有小额损失。转换成功后把yolov8n.rknn文件拷贝到开发板上板端推理就只依赖rknnlite这个轻量库了。我建议在PC端先用模拟器验证转换出来模型的输出shape如果推理输出是空或者维度异常先回头检查YOLOv8导出ONNX时是否勾选了simplify和正确的推理模式。4.3 板端推理代码从摄像头取帧到识别框上屏板端推理的代码结构非常固定核心是先初始化运行时然后循环读取图像做预处理、推理、后处理。一个裸的推理循环长这样import cv2 from rknnlite.api import RKNNLite rknn RKNNLite() rknn.load_rknn(yolov8n.rknn) rknn.init_runtime() cap cv2.VideoCapture(0) while True: ret, frame cap.read() if not ret: break # 预处理缩放、色彩转换、数据对齐 img cv2.resize(frame, (640, 640)) img cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 推理 outputs rknn.inference(inputs[img]) # 后处理解析 outputs生成检测框和类别 dets post_process(outputs) for det in dets: x1, y1, x2, y2, score, cls det cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2) cv2.putText(frame, str(cls), (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 2) # 显示到LCD show_to_lcd(frame)这段代码里最隐蔽的问题是预处理对齐。YOLOv8训练时用的是letterbox加归一化你在板端只用cv2.resize直接把原始图拉成640x640检测精度会下降很多因为宽高比变了。正确的做法是做letterbox把原图等比缩放到640x640里剩下的区域用灰色填充推理完成后再把检测框坐标映射回原始分辨率。这类细节不处理好你会发现同样的模型在PC上跑得很准到RK3588上框的位置总是偏移那不是模型转换的问题而是预处理和后处理不等价。显示到LCD的部分最简单的方案是把绘制好的图像压缩到屏幕分辨率后写入帧缓冲也可以通过工具或自定义渲染显示。只要你在第2节已经把显示链路打通了这里就只是一次图像拷贝的问题。4.4 部署常见的精度损失和帧率瓶颈部署好后如果你发现精度不如预期先从这三个点下手排查量化校准集覆盖不广吗预处理和训练时不一致吗后处理阈值和anchors设置正确吗我见过很多部署后什么都检测不到的问题最后查到是输入图像的通道顺序反了训练是RGB推理时却送了BGR。帧率瓶颈方面RK3588的NPU跑YOLOv8n的INT8模型本来是可以很流畅的但实际项目往往被其他环节拖慢。最容易拖后腿的是Python层的不必要拷贝、图像resize用CPU串行处理、后处理全是纯Python循环。建议用循环里提前分配内存、把图像缩放放到OpenCV的NEON优化路径、后处理用向量化或者C实现这样整体帧率能明显提升。另外模型初始化rknn.init_runtime()只调用一次就行千万别放在循环里否则每帧都在加载模型性能直接腰斩。5. 把LCD、OpenCV、AI串起来的闭环流程5.1 完整数据流摄像头采集、预处理、NPU推理、屏幕显示当屏幕、OpenCV、YOLOv8这三个部分各自能独立工作时真正的嵌入式AI项目才算开始。闭环的数据流是USB或MIPI摄像头采集原始画面OpenCV做预处理把图像调整到模型需要的尺寸和格式RKNN负责在NPU上执行推理结果绘制到原图上最终输出到LCD屏幕。我在实际项目里一般用下面这样的结构来组织代码采集线程负责从V4L2设备读取帧只做最基础的格式转换。预处理线程做letterbox、归一化、通道转换把处理好的数据交给NPU。推理线程调用RKNN接口执行推理推理完成后立刻把结果发出去不参与任何绘制。绘制与显示线程把检测框叠加到原始图像同时把FPS、运行状态等监控信息一起画上去最后更新LCD。这样设计的原因是RK3588虽然性能不错但把采集、预处理、推理、显示全部杂糅在一个循环里稍微一点操作卡顿就会拖垮整条链路。线程化之后即使某帧预处理慢了采集线程还是能继续取新帧系统整体不会直接卡死。5.2 提升流畅度的两个关键手段双缓冲与共享内存在嵌入式显示应用里双缓冲是控制画面撕裂和抖动的基本手段。简单说你准备两个帧缓冲后台线程往buffer A写入新画面显示线程同时从buffer B读取旧画面写完后再交换引用。这样一个写一个读互不干扰LCD上的画面始终是完整的不会出现上屏过程中被改了一半的撕裂效果。RK3588的DRM接口本身就支持多plane和page flip机制如果能直接走DRM的异步提交效果比把整帧拷到framebuffer顺滑得多。共享内存则是用来减少数据搬运。OpenCV读出的帧默认在CPU内存里传给NPU时要经过内存拷贝RKNN的zero copy模式可以让你传入DMA buffer或已申请好的物理连续内存在硬件层面共享数据减少一次昂贵的拷贝。使用zero copy需要在编译和初始化RKNN时开启对应参数虽然代码会复杂一些但帧率带来的提升非常直观特别是在高分辨率视频流场景下。我在跑一个1080p实时检测项目时启用了双缓冲和RKNN共享内存之后整体端到端延迟从之前的300毫秒级别降到了100毫秒以内画面也再没有出现过闪烁和撕裂。这两个手段对RK3588这类嵌入式平台来说不是锦上添花而是必备优化。5.3 从Demo到产品的增量路径很多教程讲到这里就结束了因为一个能实时识别、带屏幕显示的Demo已经非常有说服力。但从Demo走向产品还有几个方向可以考虑第一是相机标定把OpenCV的cv2.solvePnP用起来让检测框不仅能框住目标还能估算距离和位姿这对机械臂抓取、机器人避障特别有价值第二是模型版本管理RKNN模型通常要针对不同场景做多版本量化通过软件动态选择加载哪个模型而不用重新烧录系统第三是接入其他端侧组件比如在串口上扩展一个IMU或者通过CAN总线把识别结果发出去让屏幕从监视器变成真正能下发指令的控制中枢。每一个方向做扎实都是独立的项目能力。关键是先把眼前这条LCD、OpenCV、NPU的链路彻底跑通因为它是你后续所有优化的地基。地基的每一层都要自己亲手验证过后面你才敢放心盖高楼。我自己在这个平台上前前后后调过好几块板子最大的体会是RK3588的坑不是芯片本身的坑而是驱动和库之间的兼容性的坑。屏幕参数写对了系统日志里一切正常画面就是不亮时不妨退回去从物理层重新查一遍。测LCD时把万用表放在手边比反复改设备树管用得多编OpenCV时先把依赖库列全比对着报错一个个装高效得多部署YOLOv8时把模型转换版本钉死比改半天推理代码踏实得多。这套经验不是看一两篇文档就能攒出来的得多烧几块板子、多看几遍dmesg才能形成直觉。但好在RK3588的资料和社区已经足够厚实只要你按这条LCD显示到OpenCV再到NPU推理的路径走每一步都有迹可循。等全套跑通之后你会发现嵌入式AI开发这件事其实没有想象中那么玄乎。
返回列表