跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++AI算法

嵌入式 Linux 实战:基于泰山派的 AI 网络摄像头

一个基于立创泰山派 RK3566 开发板的嵌入式 Linux 实战项目,实现了网络 AI 摄像头的功能。项目采用 Buildroot 构建定制系统,集成 Rockit 进行视频采集与硬件编码,利用 RKNN 部署 YOLOv5 模型进行目标检测,并通过 ZLMediaKit 实现 RTSP 实时推流。文章详细阐述了硬件组成、系统构建、依赖环境配置(OpenCV, Rockit, RKNN, ZLMediaKit)、CMake 工程搭建及核心代码逻辑(多线程捕获、推理、推流),最后提供了板端部署与测试方法。

忘忧发布于 2026/4/6更新于 2026/10/19135 浏览
嵌入式 Linux 实战:基于泰山派的 AI 网络摄像头

嵌入式 Linux 实战:基于泰山派的 AI 网络摄像头

一、项目整体架构

1. 硬件组成

硬件包含三个部分:泰山派 RK3566 开发板,扩展板和一个MIPI 摄像头,以及一根网线。

使用扩展板是因为开发板本身没有网口。需要更新内核以适配扩展板的网口驱动。

MIPI 摄像头型号为 OV5695。

摄像头和开发板的硬件接线需参考官方手册。

2. 系统框图

项目主要涉及软件部分,流程如下:

  • 视频采集与硬件编码:使用 Rockchip Rockit (RK MPI)
  • YOLOv5 推理:使用 RKNN
  • 推流服务:使用 ZLMediaKit

二、Buildroot 系统构建和依赖环境配置

1. Buildroot 构建 Linux 系统

在资源有限的嵌入式平台中,使用 Buildroot 构建定制化 Linux 系统以节省资源。

1.1 系统烧录

完整编译耗时较长,建议采用第二种方法:烧录官方 Buildroot 镜像,然后单独编译内核和根文件系统。

具体步骤参考官方文档中的镜像下载与烧录教程。

1.2 更新内核

使用扩展板时,需更新内核以加载网口驱动。将提供的 boot.img 单独烧录进系统即可。

1.3 Buildroot 添加 OpenCV 和编译下载

下载 Linux SDK 和 Buildroot 相关库。

进入 Buildroot 配置界面:

source buildroot/build/envsetup.sh
make menuconfig

依次选择 Target packages --> Libraries —> Graphics —> opencv3,点击 'y' 键选择。 保存配置并编译根文件系统:

make savedefconfig
./build.sh rootfs

编译成功后 rockdev 目录下会出现 rootfs.ext4。

Buildroot 结构说明:

  • output/rockchip_rk3566/target:烧录进开发板的根文件系统内容。
  • output/rockchip_rk3566/host/bin:交叉编译器路径(如 aarch64-buildroot-linux-gnu-gcc)。
2. 项目依赖环境配置
2.1 Rockit

Rockit (RK MPI) 提供媒体处理接口,支持视频捕获、编码、解码等功能。

资源位于 SDK 目录 linux_sdk/external/rockit。 关键文件:

  • 动态库:lib/lib64/librockit.so
  • 静态库:mpi/example/common/librt_test_comm.a
  • 头文件:mpi/example/include 和 mpi/sdk/include

编译 Demo 示例:

 build
 build
cmake .. -DCMAKE_TOOLCHAIN_FILE=../toolchainfile.cmake
make
mkdir
cd

将 librockit.so 拷贝到板端 /usr/lib,可执行文件拷贝到板端运行。

2.2 RKNN

RKNN 是将 AI 模型部署到板端的软件栈。

所需组件:

  1. rknn-toolkit2:用于模型转换、推理评估。
  2. rknn_model_zoo:包含 YOLOv5 等算法例程。

构建项目所需资源:

  • 模型文件:yolov5s_relu.rknn 和标签文件 coco_80_labels_list.txt
  • 依赖库:librga.so, librknnrt.so, libturbojpeg.a
  • 头文件:utils, 3rdparty/librga, 3rdparty/rknpu2 等目录下的文件。
2.3 ZLMediaKit

用于视频推流。

修改 CMakeLists.txt 指定交叉编译器:

set(CMAKE_C_COMPILER <sdk_path>/host/bin/aarch64-buildroot-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER <sdk_path>/host/bin/aarch64-buildroot-linux-gnu-g++)

编译后获取 release/linux/Debug/libmk_api.so 及 api/include 头文件。

3. 板端静态 IP 配置

推流使用网线连接,需设置板子 IP 与电脑在同一网段。

ifconfig eth0 up
ifconfig eth0 192.168.1.100 netmask 255.255.255.0

可将配置写入 /etc/init.d/rcS 实现开机自动配置。

三、代码实现

1. CMake 项目构建

整理好依赖库、头文件和源码后,配置 CMakeLists.txt。

cmake_minimum_required(VERSION 3.10)
PROJECT(rk_cmake_project)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)

# 指定交叉编译器
set(CMAKE_C_COMPILER <sdk_path>/host/bin/aarch64-buildroot-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER <sdk_path>/host/bin/aarch64-buildroot-linux-gnu-g++)

include_directories(
    ${CMAKE_SOURCE_DIR}/include/mpi/example
    ${CMAKE_SOURCE_DIR}/include/mpi/sdk
    ${CMAKE_SOURCE_DIR}/include/rknn/rknpu2
    ${CMAKE_SOURCE_DIR}/include/ZLMediaKit
)

link_directories(${CMAKE_SOURCE_DIR}/lib)
add_executable(rk_cmake_project src/main.cpp src/rk_mpi.cpp ...)
target_link_libraries(rk_cmake_project pthread rockit rt_test_comm opencv_core rknnrt mk_api)
2. 具体代码实现

代码结构由主线程和两个线程池组成:视频捕获任务、YOLOv5 推理任务、编码及推流任务。

需修改两处配置:

  1. src/main.c 中设置 mode_path 为板子上 RKNN 模型位置。
  2. src/postprocess.cc 中设置 LABEL_NALE_TXT_PATH 为标签文件位置。
2.1 视频捕获任务

使用 RK_MPI_VI_GetChnFrame 捕获帧,转换为 image_buffer_t 格式后送入推理队列。

void capture_task(){
    VIDEO_FRAME_INFO_S stViFrame;
    RK_S32 s32Ret = RK_MPI_VI_GetChnFrame(0, 0, &stViFrame, -1);
    if(s32Ret == RK_SUCCESS){
        // 转换数据格式...
        rknnPool.enqueue(rknn_task, src_image);
    }
    RK_MPI_VI_ReleaseChnFrame(0, 0, &stViFrame);
}
2.2 YOLOv5 推理任务

接收 YUV420SP 格式图像,通过 RKNN 进行推理,绘制检测框,转换为 RGB888 格式后送入编码队列。

void rknn_task(image_buffer_t src_image){
    object_detect_result_list od_results;
    inference_yolov5_model(&rknn_app_ctx, &src_image, &od_results);
    // 绘制结果...
    cv::Mat yuv420sp(...);
    cv::Mat frame(height, width, CV_8UC3);
    cv::cvtColor(yuv420sp, frame, cv::COLOR_YUV420sp2BGR);
    h264encPool.enqueue(encode_task, frame);
}
2.3 编码以及推流任务

调用 RK_MPI_VENC_SendFrame 发送原始图像进行硬件编码,获取码流后通过 ZLMediaKit 推流。

void encode_task(cv::Mat frame){
    // 添加 FPS 信息...
    RK_MPI_VENC_SendFrame(0, &h264_frame, -1);
    RK_MPI_VENC_GetStream(0, &stFrame, -1);
    
    // 推流
    void* pData = RK_MPI_MB_Handle2VirAddr(stFrame.pstPack->pMbBlk);
    uint32_t len = stFrame.pstPack->u32Len;
    int64_t timestamp = ...;
    mk_frame frame = mk_frame_create(MKCodecH264, timestamp, timestamp, (char*)pData, (size_t)len, NULL, NULL);
    mk_media_input_frame(media, frame);
    mk_frame_unref(frame);
    
    RK_MPI_VENC_ReleaseStream(0, &stFrame);
}
3. 交叉编译项目并拷贝到板端执行

修改 CMakeLists.txt 中的编译器路径,进入 build 目录编译。

运行前确保:

  1. 所有 .so 动态库已拷贝至板端 /usr/lib。
  2. 模型和标签文件已拷贝且路径正确。
  3. 板子 IP 设置正确。

在电脑端使用 VLC 播放器打开网络串流,输入 URL:rtsp://<board_ip>:8554/live/camera。

四、总结

本项目实现了基于 RK3566 的摄像头实时采集、YOLOv5 目标检测、硬件编码及 RTSP 推流功能。该架构可扩展应用于车牌识别、人脸识别门禁等场景。

目录

  1. 嵌入式 Linux 实战:基于泰山派的 AI 网络摄像头
  2. 一、项目整体架构
  3. 1. 硬件组成
  4. 2. 系统框图
  5. 二、Buildroot 系统构建和依赖环境配置
  6. 1. Buildroot 构建 Linux 系统
  7. 1.1 系统烧录
  8. 1.2 更新内核
  9. 1.3 Buildroot 添加 OpenCV 和编译下载
  10. 2. 项目依赖环境配置
  11. 2.1 Rockit
  12. 2.2 RKNN
  13. 2.3 ZLMediaKit
  14. 3. 板端静态 IP 配置
  15. 三、代码实现
  16. 1. CMake 项目构建
  17. 指定交叉编译器
  18. 2. 具体代码实现
  19. 2.1 视频捕获任务
  20. 2.2 YOLOv5 推理任务
  21. 2.3 编码以及推流任务
  22. 3. 交叉编译项目并拷贝到板端执行
  23. 四、总结

更多推荐文章

查看全部
  • 基于高阶控制障碍函数的端到端无人机高速避障方法
  • Spring AI MCP Server 集成与源码解析
  • ROG 携超神 27 二代显示器与 AR 眼镜亮相 CES 2026
  • C++ 哈希表详解:开散列与闭散列
  • Linux 多线程核心:资源划分与控制实战指南
  • Windows 下安装 OpenClaw 并接入飞书机器人指南
  • 2023 网络安全零基础学习路线与进阶指南
  • Whisper 模型国内镜像源汇总及各版本快速获取方法
  • 鸿蒙金融理财全栈项目:基础架构、数据安全与用户体验
  • AI产品经理必备技能与职业发展路径指南
  • 基于 Whisper 的多语种交互异常检测框架实战
  • 论文 AIGC 检测原理与降重工具实测指南
  • 鸿蒙金融理财全栈项目:生态合作与用户运营优化
  • macOS 与 Android 文件传输工具 OpenMTP 使用指南
  • Node.js 下载安装与环境配置全流程
  • Python 爬虫实战:爬取飞猪旅行酒店套餐信息
  • 基于 GLM-4.6V-Flash-WEB 的红外相机物种自动识别实践
  • 从生产者 - 消费者模型看 Socket 缓冲区:C++高效数据流管理
  • 基于 Django 和 Vue 的快递驿站收发管理系统
  • Elasticsearch 与 Kibana 实战:安装部署及 C++ 客户端封装

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online