# Linux_kvm **Repository Path**: kenthank/linux_kvm ## Basic Information - **Project Name**: Linux_kvm - **Description**: No description available - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-28 - **Last Updated**: 2026-10-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 鲁班猫 Linux 应用项目 本仓库管理鲁班猫 4 V1(RK3588S)Linux 应用项目的源码。已保留的源码基线包含图片读写、Letterbox、BGR/RGB 和坐标往返;它们既是当前小程序,也为后续图像处理和 RKNN 集成提供回归验证入口。 RKNN Phase A/B 已通过外部配套 Demo 验证、独立复测与用户验收,源码位于 `/home/cat/rknn_examples/examples/rknn_yolov5_demo`,当前没有移入本仓库。模型契约、Letterbox/颜色/坐标基线与运行限制见 `docs/M1_STATIC_BASELINE.md`。Phase C1/C2 的项目实现见下文;M1 发布仍需完成节点整理与确认。 Phase C1 的 `rknn_single_image` 单图接口已于 2026-09-29 通过源码审查、独立复测和用户验收,使用系统 RKNN SDK/Runtime,只获取量化 INT8 张量和统计,不解码检测框。原始 API、资源归属、构建与验收步骤见 [docs/RKNN_C1.md](docs/RKNN_C1.md)。C1 通过不表示 M1 或视频链路已经完成。 Phase C2 新增 `rknn_yolov5_image` 与真实模块 CPU 测试 `yolov5_postprocess_test`。配套解码、半开 NMS、实际比例回映、显式标签路径和验收命令见 [docs/RKNN_C2.md](docs/RKNN_C2.md),派生模块来源见 [docs/THIRD_PARTY_NOTICES.md](docs/THIRD_PARTY_NOTICES.md)。C2 已于 2026-09-30 通过源码审查、独立复测和用户看图验收;M1 节点发布仍需按 Git 规则完成整理、合并与确认。 ## Git 与文档分工 - 源码仓库:`/home/cat/My_Project`,后续云端 push 使用这个仓库。 - 学习复盘与任务主枢:Windows `D:\xitong\Desktop\学习复盘`,保留学习笔记和完整 Workflow。 - 规则:测试阶段不 commit;技术验证通过且用户验收大任务后,保留后续需要的代码再 commit;完整框架节点验收后才允许 push。 - 开始节点前从最新 `main` 建立节点分支,大任务验收后在分支本地 commit;节点整体验收后 `merge --no-ff` 合并 `main`,创建 annotated tag,再 push `main` 与该节点标签。 - 不删除分支;后续增改从最新 `main` 新建分支,不复用旧阶段分支。当前 M1 剩余工作在 `feature/m1-static-rknn`,起点为已发布基线 `3147f8b`。 - 源码远端:`origin = git@gitee.com:kenthank/linux_kvm.git`。节点验收后按确认清单整理不需要的实验文件,再验证、commit 和 push;具体准备状态见 `docs/GIT_POLICY.md`。 - 详见 `docs/GIT_POLICY.md` 和 `AGENTS.md`。 ## 已验证环境 - Ubuntu 22.04.5 LTS,aarch64,Linux 6.1.84 - GCC/G++、CMake - OpenCV 4.5.4 的 `core`、`imgproc`、`imgcodecs` 模块 - 源码目录:`/home/cat/My_Project` 项目不依赖完整的 `libopencv-dev` 元包,也不假定存在 `opencv4.pc` 或 `OpenCVConfig.cmake`。CMake 直接查找头文件和三个模块库。 ## 构建 ```bash cd /home/cat/My_Project mkdir -p outputs cmake -S . -B build cmake --build build -j2 ``` 最低 CMake 版本为 3.18,因为 `CMakeLists.txt` 使用了 `find_path(... REQUIRED)` 和 `find_library(... REQUIRED)`。 ## 程序与运行方式 ```bash # 第 1 步:真实图片读写和 Mat 信息 ./build/image_io_step1 test_images/landscape_320x240.ppm outputs/step1.png # 第 2 步:等比例缩放并居中补边 ./build/letterbox_step2 test_images/landscape_320x240.ppm outputs/step2.png # 第 3 步:BGR/RGB 顺序与 UINT8 HWC 缓冲区 ./build/color_order_step3 test_images/red_blue_64x32.ppm \ outputs/step3_correct.png outputs/step3_misread.png outputs/step3_rgb.bin # 第 4 步:半开边界框的坐标映射与往返 ./build/coordinate_roundtrip_step4 test_images/odd_321x239.ppm \ outputs/step4_original.png outputs/step4_letterbox.png ``` `letterbox_step2` 与 `coordinate_roundtrip_step4` 共用 `letterbox.h/.cc`,避免两份缩放、取整和补边逻辑产生差异。 ## 本轮练习约定 - `cv::imread(..., IMREAD_COLOR)` 读入 BGR、`CV_8UC3`。 - Letterbox 目标画布暂定为 640×640,补边值暂定为 `(114,114,114)`。 - 缩放后记录实际 `scale_x`、`scale_y` 和四边补边量;坐标还原使用实际比例。 - 模型输入练习缓冲区为 RGB、UINT8、HWC、连续内存;未做归一化。 - 检测框采用半开边界 `[x1,y1,x2,y2)`,其中 `x2/y2` 不属于框内;完整图像边界可表示为 `[0,0,width,height)`。 - 写图失败或 OpenCV 抛出 `cv::Exception` 时,程序打印目标路径与错误原因并返回非零状态码。 ## 已知边界 - 640×640、补边值 114 和 RGB UINT8 HWC 都是练习约定,接入模型后必须按模型输入属性调整。 - 第 3 步的颜色像素断言专门面向“左红右蓝”的测试图,不是通用图片检测器。 - 第 4 步验证内部框、完整边界框及超界拒绝;本轮不实现超界框裁剪。 - 本仓库入口限定静态单图;C1 实现自己的 RKNN 调用,外部 Demo 的验收不替代 C1 验收,也不代表视频采集或实时链路已通过。