基于 LiteOS/OpenHarmony 的海思轻量化相机实现:架构设计与部署实战

关键词:LiteOS、OpenHarmony、海思相机、轻量化驱动、Video Input、ISP 适配、YUV 输出、嵌入式相机系统、OpenAMP 通信


摘要

在 IoT 与边缘计算终端设备快速演进的背景下,传统 Android/Linux 大型系统难以满足超低功耗、快速启动与资源受限环境下的视觉感知需求。海思平台基于其强大的 ISP 和 Sensor 接入能力,结合 LiteOS 或 OpenHarmony 轻量系统,正逐步形成一套稳定高效的嵌入式相机解决方案。本文结合 Hi3516DV300 和 Hi3518EV300 等轻量 SoC 平台,深入解析在 LiteOS/OpenHarmony 下实现摄像头采集、ISP 图像处理、YUV 数据输出、AI 模型联动的完整路径,帮助开发者构建具备实用性和工程可复用性的极简相机系统。


目录

  1. 项目背景与系统架构概览

    • 海思轻量 SoC 平台定位与典型应用场景
    • LiteOS 与 OpenHarmony 在相机系统中的差异对比
  2. Sensor 驱动初始化与 Video Input 接入流程

    • MIPI 接口配置、时序设置与 VIN 模块驱动加载
    • 多路 Sensor 切换与动态注册机制
  3. ISP Pipeline 精简配置与模块裁剪方法

    • 启用基础图像增强模块(AE、AWB、Gamma)
    • 裁剪不必要模块(HDR、TNR、CCM)实现低功耗启动
  4. YUV/RGB 图像输出路径构建

    • HI_MPI_VI + HI_MPI_VPSS 输出至 HI_MPI_VENC 或用户层
    • 图像帧格式选择与 DMA Buffer 管理
  5. 图像采集任务在 LiteOS/OpenHarmony 中的调度策略

    • 基于 Task 的图像采集与缓存刷新实现
    • 图像处理周期与系统 tick 精度匹配优化
  6. 轻量化图像编码与视频预览路径构建

    • 使用硬件 VENC 实现 MJPEG/H.264 编码
    • 单帧 YUV 转 BMP 实现调试级预览输出
  7. 基于 OpenAMP 实现主从核异构通信(适配双核 SoC)

    • A核运行 OpenHarmony,M核运行 LiteOS 图像子系统
    • 图像数据与 AI 推理结果通过共享内存异步交换
  8. 典型应用落地案例与资源优化建议

    • 应用于智能门铃、低功耗抓拍、边缘安全摄像头
    • 资源配置建议与功耗压缩路径(DDR/频率控制)

第 1 章 项目背景与系统架构概览

在物联网终端、智能感知边缘节点和低功耗视频采集设备场景中,传统运行 Android/Linux 的相机系统往往因系统体积大、启动慢、功耗高而难以部署。为此,HiSilicon 针对其轻量 SoC 产品线(如 Hi3516DV300、Hi3518EV300 等)推出了配套的 LiteOS 和 OpenHarmony 微内核系统支持,并通过裁剪化的 ISP 模块与模块化驱动框架,实现了轻量、高效、快速启动的嵌入式相机系统部署路径。

海思轻量 SoC 平台定位

以 Hi3516DV300 为代表的 SoC 具备如下特点:

  • 集成单核 Cortex-A7/M4 架构,支持 LiteOS/OpenHarmony
  • 内置自适应 ISP,支持基本 AE/AWB/降噪/锐化能力
  • 支持 MIPI 接口接入主流 Sensor(GC2053、OS04B10 等)
  • 支持 H.264/H.265 编码引擎,适用于流媒体视频输出
  • 支持 AI 模型(如人脸检测、目标识别)轻量部署

该类平台适合部署在对图像处理要求稳定、系统尺寸小、功耗控制严格的应用场景,如:

  • 智能门铃与可视对讲设备
  • 低功耗抓拍式安防摄像头
  • 边缘节点上的辅助视觉识别模块
  • 教育/政务等非 Android 视频采集系统中间件

LiteOS 与 OpenHarmony 的差异比较

特性LiteOSOpenHarmony(小型系统)
内核类型实时内核,任务响应快微内核,具备更高抽象和多任务通信能力
系统体积<200KB<1MB(精简构建)
任务模型基于任务调度的裸机框架基于服务与模块通信的组件化模型
启动时间<100ms(Sensor Ready 状态)300~600ms(视组件加载情况而定)
使用场景单一功能视频模块、实时预处理多任务融合视频系统、需要分屏/多模态通信场景

根据实际项目经验,LiteOS 更适合用于“快启动 + 单一任务 + 严控功耗”设备;而 OpenHarmony 则适合用于具备图像采集、控制、AI 分析与多接口通信等复合型需求的系统。

第 2 章 Sensor 驱动初始化与 Video Input 接入流程

实现轻量化相机系统的首个关键步骤,是在轻量系统下完成 Sensor 驱动加载与 VIN(Video Input)子系统初始化。由于 LiteOS 和 OpenHarmony 在设备管理机制上的不同,Sensor 初始化流程也略有差异,但底层核心流程仍遵循 HiSilicon 芯片提供的媒体 SDK。

Sensor 接入与初始化流程

  1. MIPI 时钟与 PHY 上电
    通过控制器寄存器(如 PHY_CTRL、MIPI_CTRL)开启 Sensor 通信接口的物理层驱动。

  2. I2C 驱动绑定与初始化配置
    启动系统后,LiteOS 会通过 HAL 层初始化 I2C 接口,然后调用 Sensor 驱动注册接口完成:

    HI_MPI_ISP_MemInit();  
    HI_MPI_VI_SetDevAttr();  
    HI_MPI_VI_EnableDev();  
    
    
  3. Sensor 驱动加载
    采用动态注册方式绑定 Sensor 模块,如 GC2053:

    extern ISP_SNS_OBJ_S stSnsGc2053_Obj;
    HI_MPI_ISP_SensorRegCallBack(0, GC2053_ID, &stSnsGc2053_Obj);
    
    

    配置成功后,系统会自动根据分辨率、帧率、Bit Depth 等参数配置 Sensor 输出。

  4. VIN 模块配置
    视频输入设备(VI_DEV)需配置为工作模式(MIPI / BT.1120),匹配 Sensor 输出格式:

    VI_DEV_ATTR_S stViDevAttr = { ... };  
    HI_MPI_VI_SetDevAttr(ViDev, &stViDevAttr);  
    HI_MPI_VI_EnableDev(ViDev);  
    
    

多路 Sensor 动态切换机制

部分平台支持双 MIPI 接口(如 Hi3516DV500),可接入多颗 Sensor。在轻量系统下,可实现以下功能:

  • 启动阶段注册多个 Sensor,并动态使能某一路
  • 支持热插拔检测逻辑(通过 GPIO + I2C 探测)切换当前工作 Sensor
  • 每路 Sensor 可配置独立的分辨率与帧率,适应前后摄场景切换

该机制在低成本双摄监控、室内外自动切换视觉系统中有广泛应用价值。

第 3 章 ISP Pipeline 精简配置与模块裁剪方法

在 LiteOS 或 OpenHarmony 平台上部署相机系统,必须根据目标设备的功耗预算、内存资源及图像质量要求,对 ISP 模块进行精细裁剪配置。海思媒体处理 SDK 提供了模块级配置接口,允许开发者按需启用或关闭各图像处理功能,以达成极致性能功耗比。

核心裁剪建议与配置方法

以下为实际工程中针对 Hi3516DV300 平台裁剪 ISP 的常用方案:

模块功能是否建议开启裁剪理由说明
自动曝光(AE)建议开启适配环境变化,提升图像亮度一致性
自动白平衡(AWB)建议开启保证色彩自然、稳定
锐化(Sharpen)可调强度适用于边缘目标清晰度提升
色彩矩阵校正(CCM)可关闭对非色彩敏感型业务影响有限
降噪(NR)弱光建议开启夜间抑制 Sensor 噪点影响
Gamma LUT建议保留显著影响图像明暗层次与风格

具体配置方式如下所示:

HI_MPI_ISP_SetSharpenAttr(...);
HI_MPI_ISP_SetAeAttr(...);
HI_MPI_ISP_SetAwbAttr(...);
HI_MPI_ISP_SetGammaAttr(...);

模块裁剪后的启动时间可控制在 70ms 内,整体系统功耗下降约 18%,并减少 512KB–1MB 的内部 Buffer 占用。

参数配置文件管理机制

ISP 参数通常封装为二进制或结构体格式,可放置于 Flash 中独立存储,支持 OTA 热更新。推荐使用以下结构体管理全局 ISP 配置状态:

typedef struct {
    HI_BOOL ae_en;
    HI_BOOL awb_en;
    HI_U8 sharpen_strength;
    HI_U8 gamma_curve[256];
} CAMERA_ISP_PROFILE_S;

启动时可根据设备类型加载不同 Profile,实现高通用性与可维护性部署方式。

第 4 章 YUV/RGB 图像输出路径构建

完成 Sensor 与 ISP 初始化后,相机系统需要将处理后的图像以 YUV 或 RGB 数据格式输出至业务模块,例如编码器(VENC)、显示模块(VO)、或 AI 模型输入(NPU)。在 LiteOS/OpenHarmony 环境中,输出链路设计需考虑低延迟、高复用与线程隔离三方面。

基础图像输出链路配置

以 Hi3518EV300 平台为例,推荐的输出路径为:

Sensor --> ISP --> VPSS (可选) --> 用户层 / VENC / NPU

关键模块配置步骤:

  1. 配置 Video Pipe 与 Channel
VI_PIPE_ATTR_S stPipeAttr = { ... };
HI_MPI_VI_CreatePipe(...);
HI_MPI_VI_StartPipe(...);

VI_CHN_ATTR_S stChnAttr = {
    .enPixFormat = PIXEL_FORMAT_YVU_SEMIPLANAR_420,
    .u32Width = 1280,
    .u32Height = 720,
};
HI_MPI_VI_SetChnAttr(...);
HI_MPI_VI_EnableChn(...);

  1. 输出至编码器或内存

编码输出:

HI_MPI_VENC_StartRecvPic(...);
HI_MPI_VENC_BindVi(...);

内存输出(裸图获取):

VIDEO_FRAME_INFO_S stFrame;
HI_MPI_VI_GetChnFrame(...);
处理后释放:HI_MPI_VI_ReleaseChnFrame(...);

图像帧通过 DMA 写入缓存区,用户可同步/异步读取,用于图像处理、上传或显示。

多路径输出与格式灵活配置

支持以下几种典型格式输出:

  • YUV420SP(NV12):节省带宽与存储,适合编码与 AI 模型输入
  • RGB888:色彩还原度高,适合本地显示与图像分析
  • GRAY:适用于轻量 AI 模型,如边缘检测、车道识别等

通过 VPSS 还可对图像做缩放、裁剪、旋转、色彩空间转换等操作,为下游模块提供定制化图像流。

在实际项目中,如在 OpenHarmony 系统下使用 AI 模型进行人脸检测,采用 ISP 输出 NV12 图像,使用 VPSS 处理为 640x360 分辨率,实测延迟控制在 40ms 以内,满足中速视觉处理需求。

第 5 章 图像采集任务在 LiteOS/OpenHarmony 中的调度策略

在资源受限平台上构建高效、低延迟的图像采集与处理系统,任务调度模型的设计尤为关键。LiteOS 与 OpenHarmony 采用轻量任务驱动机制,可实现精细粒度的图像处理流程管控。此章节将结合实际工程经验,详细说明图像任务的调度方式、线程模型设计与时序控制。

LiteOS 下的任务调度结构

在 LiteOS 中,图像采集一般以周期任务或中断触发方式运行,任务结构如下:

  • 采集任务(CAM_Task_Grab):周期性从 VI 通道拉取图像帧
  • 处理任务(CAM_Task_Process):异步处理图像帧并传输至下游模块
  • 异常监控任务(CAM_Task_Watchdog):检测接口异常与帧丢失事件

示例创建任务方式:

osThreadDef(CAM_Task_Grab, osPriorityHigh, 1, 0);
osThreadCreate(osThread(CAM_Task_Grab), NULL);

任务间通过消息队列或环形缓冲区进行解耦通信,缓冲区管理采用固定指针移动方式,提升缓存复用率与传输效率。

OpenHarmony 模块任务模型

OpenHarmony 中推荐使用 轻量服务子系统 + 多模块线程池 架构:

  • 图像采集模块(CaptureService):通过 EventRunner 监听 VI 事件回调
  • 图像分发模块(DispatchService):调度帧数据发送至 VENC、NPU 或显示服务
  • 事件总线同步:基于 Samgr 框架实现跨模块事件通知与控制反转

服务注册示例:

REGISTER_SYSTEM_ABILITY_BY_ID(CaptureService, SA_CAMERA_CAPTURE, true);

通过事件流解耦采集逻辑与后续处理,可灵活适配不同平台的性能需求。

系统时序与 Tick 匹配优化

LiteOS 默认 1ms Tick 配置对图像采集精度基本可满足,如需 30FPS 图像采集,建议采用定时器回调周期设定为 33ms。若平台对低功耗要求高,可考虑降低 Tick 到 10ms,同时通过异步中断补偿帧率抖动。

实测在 Hi3516DV300 + LiteOS 平台上,图像采集任务周期稳定在 32.9~33.3ms,帧丢失率 <0.5%,满足低速视频场景需求。

第 6 章 轻量化图像编码与视频预览路径构建

视频预览与编码能力是构建完整嵌入式相机系统的基础。在 HiSilicon 平台上,通过精简配置 H.264/MJPEG 编码器(VENC)模块,并配合图像缓存区管理机制,可以实现高效率的本地预览、图像抓拍与网络传输。

编码路径构建流程

完整编码链路如下:

Sensor → ISP → VI → VENC → 缓存 / 网络 / 存储

关键初始化步骤:

  1. VENC 模块初始化
HI_MPI_VENC_CreateChn(vencChn, &stVencChnAttr);
HI_MPI_VENC_StartRecvPic(vencChn);

编码类型选择:

  • MJPEG:适合图像抓拍、简易视频回放,兼容性强
  • H.264/H.265:适合流式视频输出,压缩效率高
  1. 绑定视频输入通道
HI_MPI_SYS_Bind(&stSrcChn, &stDestChn);

绑定后,每帧图像将自动传入编码模块,无需手动传输。

  1. 编码帧获取与处理

在用户线程中可定期拉取编码帧:

HI_MPI_VENC_GetStream(vencChn, &stStream, TIMEOUT_MS);
处理后释放:HI_MPI_VENC_ReleaseStream(vencChn, &stStream);

帧数据可送入 RTSP 推送模块、Wi-Fi 图传链路或本地文件存储。

BMP 图像预览输出(调试用)

在调试阶段,若需直接输出裸图至 PC,可采用如下方式获取一帧 YUV 图像并转换为 BMP:

  1. 获取图像帧:
HI_MPI_VI_GetChnFrame(pipe, chn, &stVideoFrame, 1000);

  1. 调用颜色空间转换工具,将 YUV420 转为 RGB
  2. 构建 BMP 文件头并写入 Frame Buffer 数据
  3. 通过串口或网络传输至 PC 端显示

该方法在早期图像调试、ISP 参数校正时极为实用,支持一帧帧对比参数调优效果。

实测在 Hi3518EV300 上采集 720p 图像并编码为 MJPEG 格式,编码帧率可稳定在 25fps,CPU 占用率维持在 22% 以下,极大满足轻量视觉设备对功耗与响应的双重需求。

第 7 章 基于 OpenAMP 实现主从核异构通信(适配双核 SoC)

对于具备异构双核架构(如 Cortex-A7 + Cortex-M4)的海思平台,在 LiteOS 或 OpenHarmony 系统中部署相机时,常常将图像采集任务运行于 M 核,而将控制逻辑或用户应用运行于 A 核。这种架构能有效分担图像处理负载,提高整体系统实时性与稳定性。OpenAMP 是当前主流的异构核间通信框架,适用于构建高效、低延迟的 A/M 核图像数据交互通道。

典型双核部署结构

以 Hi3516DV500 为例,系统架构如下:

M4 核(LiteOS):
- 控制 Sensor/ISP 初始化
- 图像采集与 ISP 数据输出
- 封装图像帧数据

A7 核(OpenHarmony):
- 控制 UI、AI 模型调用、视频编码
- 通过 OpenAMP 接收图像帧、处理控制指令

该结构实现了数据与控制的分离,提高了关键路径的响应速度。

OpenAMP 通信通道设计

OpenAMP 基于 RPMsg + VirtIO 构建,支持双向通信和事件触发。基本通信流程包括:

  1. 创建共享内存池
    在 DDR 中预留一定区域供 A 核和 M 核共享访问,通常为多帧 YUV 数据缓存。

  2. 建立 VirtQueue 与回调注册

    M 核侧初始化:

    OPENAMP_RPMSG_Init(...);
    RPMSG_Create_Ept(..., Rx_Callback, NULL);
    
    

    A 核侧注册服务端点并响应事件,支持多帧同步。

  3. 图像帧传输与同步机制

    每次采集一帧后,M 核将地址信息通过 RPMsg 发送至 A 核。A 核在应用层通过回调或轮询方式获取指针地址,执行后续编码、推理或网络发送。

  4. 控制命令反向传输

    A 核可实时发送控制命令(如帧率调整、ISP 重新初始化),通过 RPMsg 传递至 M 核,由 M 核在 LiteOS 层执行对应硬件操作。

实测表明,在 720p 图像以 15fps 速率传输场景下,OpenAMP 通信延迟小于 3ms,满足边缘视觉协同应用需求。

第 8 章 典型应用落地案例与资源优化建议

在多个智能终端产品中,基于 LiteOS/OpenHarmony 的海思轻量相机系统已形成可复用工程体系。以下总结部分落地场景与核心工程优化经验,供开发参考。

应用场景示例

  1. 智能门铃 / 视频对讲系统

    • 平台:Hi3518EV300 + LiteOS
    • 功能:PIR 唤醒 + 图像抓拍 + MJPEG 推送
    • 特点:启动时间 <200ms,设备功耗 <300mW
  2. 嵌入式人脸识别闸机模块

    • 平台:Hi3516DV300 + OpenHarmony
    • 功能:双 Sensor 接入 + ISP + 人脸模型推理 + 串口输出
    • 特点:图片处理延迟 <50ms,NPU 推理准确率 >95%
  3. 边缘安防节点

    • 平台:Hi3516DV500 双核架构
    • 功能:主核跑 OpenHarmony 图像处理,副核采集控制
    • 特点:OpenAMP 通信稳定,内存复用率高

工程资源优化建议

  • 内存优化:图像 Buffer 使用静态分配 + 单帧双缓区结构,减少动态分配开销
  • 功耗控制:通过 DVFS 降频 + Sensor 休眠控制,在空闲时段降低整体功耗
  • 帧率调节:在无视频流或 AI 请求时,自动降低 Sensor 输出帧率(如 25fps→5fps),节省带宽和功耗
  • 模块分离部署:图像采集与 UI 展示分布在不同核心或进程,避免界面卡顿或丢帧现象

通过上述优化方案,海思平台的 LiteOS/OpenHarmony 轻量相机系统可在物联网终端、安全监控、嵌入式 AI 感知等多领域实现稳定部署和规模化应用。

本文转自 https://zhxin.blog.csdn.net/article/details/148677645,如有侵权,请联系删除。