> ## Documentation Index
> Fetch the complete documentation index at: https://dragonwingdocs-staging.qualcomm.com/llms.txt
> Use this file to discover all available pages before exploring further.

# QIM SDK 简介

Qualcomm® Intelligent Multimedia SDK (QIM SDK) 是一个硬件加速的多媒体和 AI 框架,用于在 Qualcomm® 平台上构建智能边缘应用程序。它提供可复用的管线组件、经过优化的插件以及参考应用程序,适用于智能摄像头、机器人、无人机、家用电器、AI 设备和联网设备等用例。

<Frame caption="QIM SDK 将每个管线阶段映射到最合适的硬件模块">
  <img src="https://mintcdn.com/qualcomm-staging/1jJHcYa3k8uGjf_G/Key-Documents/AI-Developer-Workflow/_images/qimsdk-hw-pipeline.png?fit=max&auto=format&n=1jJHcYa3k8uGjf_G&q=85&s=af1c0c966c7ffeca447eaa6c69706ef1" alt="QIM SDK 跨摄像头 ISP、GPU、NPU、视频和显示模块的硬件加速管线" width="100%" style={{ width: "100%", maxWidth: "900px" }} data-path="Key-Documents/AI-Developer-Workflow/_images/qimsdk-hw-pipeline.png" />
</Frame>

QIM SDK 将摄像头采集、媒体处理、AI 预处理、AI 推理、后处理、渲染、编码和流式传输整合到单一应用程序工作流中。您可以从可直接运行的示例开始,调整参考管线,或使用最适合您用例的编程模型构建自定义应用程序。

<Note>
  本页提供 AI 开发者工作流的工作流级概述。有关完整的 SDK 参考资料,包括安装、插件目录、App Builder API、示例管线和参考应用程序,请参阅 [QIM SDK 文档](https://imsdkdocs.qualcomm.com/index)。
</Note>

<Tip>
  如果您还没有准备好编写代码,请先运行预构建的应用程序。请参阅[运行 Qualcomm IM SDK 示例应用程序](../topic/sample-app-evk),在开始构建之前先在设备上验证可正常工作的 AI 管线。
</Tip>

## 为什么使用 QIM SDK?

QIM SDK 可减少在 Qualcomm 平台上构建经过优化的 AI 和多媒体应用程序所需的工作量。它具有以下优势:

<CardGroup cols={2}>
  <Card title="统一的多媒体和 AI 管线" icon="arrows-to-circle">
    在一个基于 GStreamer 的工作流中运行采集、预处理、推理、后处理、渲染、编码和流式传输,而无需将多个独立的应用程序拼接在一起。
  </Card>

  <Card title="默认硬件加速" icon="rabbit-running">
    使用 Qualcomm CPU、GPU、NPU/HTP、摄像头 ISP、视频、显示和 DSP 引擎,使每个管线阶段都在最适合该任务的硬件模块上运行。
  </Card>

  <Card title="零拷贝缓冲区流转" icon="bolt">
    以 DMA-buf 句柄的形式在兼容的管线阶段之间传递帧,以减少 CPU 拷贝、内存带宽占用和延迟。
  </Card>

  <Card title="GPU 加速的前处理和后处理" icon="microchip">
    在 Adreno GPU 上运行缩放、颜色转换、张量布局转换和叠加渲染,使 CPU 可用于应用程序逻辑。
  </Card>

  <Card title="灵活的 AI 运行时支持" icon="microchip-ai">
    根据模型格式、性能目标和部署要求,选择 LiteRT/TFLite、ONNX、Qualcomm AI Engine Direct 或 SNPE 运行时路径。
  </Card>

  <Card title="Qualcomm AI Hub 集成" icon="cloud-arrow-down" href="../topic/ai-hub">
    从 Qualcomm AI Hub 中预训练并经过优化的模型开始,并将其集成到 QIM SDK 参考管线中。
  </Card>
</CardGroup>

## 零拷贝如何提升性能

传统媒体管线通常会在各阶段之间拷贝帧。这些拷贝会增加 CPU 使用率、内存流量和端到端延迟。当路径中的所有插件都支持零拷贝操作时,QIM SDK 会以共享 DMA-buf 句柄的形式传递帧,从而避免不必要的拷贝。

```mermaid theme={null}
%%{init: {"themeVariables": {"fontSize": "13px"}, "flowchart": {"htmlLabels": true, "nodeSpacing": 18, "rankSpacing": 26, "curve": "basis", "padding": 6}}}%%
flowchart TB
    subgraph T["❌ 传统管线 — 每个阶段都会拷贝帧"]
        direction LR
        T1["采集<br/><i>缓冲区 1</i>"] -->|"memcpy"| T2["预处理<br/><i>缓冲区 2</i>"]
        T2 -->|"memcpy"| T3["推理<br/><i>缓冲区 3</i>"]
        T3 -->|"memcpy"| T4["显示<br/><i>缓冲区 4</i>"]
        T4 --- TC["4 个缓冲区 · 内存流量高<br/>CPU 耗费在搬运数据上 · 延迟增加"]
    end

    subgraph Q["✅ QIM SDK — 一个缓冲区,通过句柄共享"]
        direction LR
        Q1["采集<br/><i>ISP</i>"] -->|"DMA-buf 句柄"| Q2["预处理<br/><i>GPU</i>"]
        Q2 -->|"DMA-buf 句柄"| Q3["推理<br/><i>NPU / HTP</i>"]
        Q3 -->|"DMA-buf 句柄"| Q4["显示<br/><i>Display</i>"]
        Q4 --- QC["1 个共享缓冲区 · 内存流量低<br/>CPU 可用于应用程序逻辑 · 延迟更低"]
    end

    T ~~~ Q

    classDef copy fill:#5B6770,stroke:#5B6770,color:#ffffff,stroke-width:2px;
    classDef zc fill:#31017D,stroke:#31017D,color:#ffffff,stroke-width:2px;
    classDef notec fill:#ffffff,stroke:#5B6770,color:#5B6770,stroke-dasharray:4 3;
    classDef notez fill:#ffffff,stroke:#31017D,color:#31017D,stroke-dasharray:4 3;
    class T1,T2,T3,T4 copy;
    class Q1,Q2,Q3,Q4 zc;
    class TC notec;
    class QC notez;
```

* 摄像头 ISP、GPU、NPU/HTP、视频和显示模块可以对共享缓冲区进行操作,而无需反复进行 CPU 内存拷贝。
* GStreamer 分配协商机制使兼容的插件能够就 DMA-buf 的分配和导入行为达成一致。
* 其结果是内存带宽更低、CPU 负载更小、延迟得到改善,这对于高分辨率、多路流和实时工作负载尤为明显。

<Note>
  只有当路径中的**每个**插件都支持零拷贝时,零拷贝才会生效。如果您添加了需要 CPU 映射缓冲区的元素,管线将在该位置回退为拷贝。在向加速管线中添加自定义或第三方元素时,请考虑这一点。
</Note>

## GPU 加速的前处理和后处理

当 NPU/HTP 能够不间断地接收格式正确的张量时,AI 推理性能最佳。QIM SDK 使用 Adreno GPU 执行数据整形和叠加工作,从而降低 CPU 负载并帮助保持推理路径的高效。

```mermaid theme={null}
%%{init: {"themeVariables": {"fontSize": "13px"}, "flowchart": {"htmlLabels": true, "nodeSpacing": 18, "rankSpacing": 26, "curve": "basis", "padding": 6}}}%%
flowchart LR
    F["视频帧<br/><i>NV12 · 任意分辨率</i>"]
    PRE["<b>qtimlvconverter</b><br/><i>GPU</i><br/><br/>颜色转换<br/>缩放 · 张量布局"]
    INF["<b>推理</b><br/><i>NPU / HTP</i><br/><br/>运行模型"]
    POST["<b>qtimlpostprocess</b><br/><br/>将输出张量解码<br/>为 ML 元数据"]
    OVL["<b>qtivoverlay</b><br/><i>GPU</i><br/><br/>在帧上绘制边界框 · 标签<br/>掩码"]
    OUT["带标注的帧<br/><i>显示 · 录制 · 流式传输</i>"]

    F --> PRE -->|"输入张量"| INF -->|"输出张量"| POST -->|"元数据"| OVL --> OUT

    classDef gpu fill:#31017D,stroke:#31017D,color:#ffffff,stroke-width:2px;
    classDef npu fill:#3253DC,stroke:#3253DC,color:#ffffff,stroke-width:2px;
    classDef io fill:#5B6770,stroke:#5B6770,color:#ffffff,stroke-width:2px;
    class PRE,OVL gpu;
    class INF,POST npu;
    class F,OUT io;
```

* **前处理:** `qtimlvconverter` 在 GPU 上执行颜色空间转换、缩放和张量布局变换,以生成模型所需的输入张量。
* **后处理:** `qtimlpostprocess` 将模型输出张量解码为结构化的 ML 元数据,例如边界框、标签和掩码。随后 `qtivoverlay` 使用 GPU 将这些元数据渲染到帧上。

## 后续步骤

<Card title="使用 QIM SDK 进行应用程序开发" icon="code" href="../topic/imsdk-app-development">
  继续了解开发工作流,查看重要的 QIM SDK 组件、应用程序开发工作流,以及后处理模块和支持的用例。
</Card>

## 相关信息

* [运行推理](../map/use-available-frameworks-and-runtimes) — 将 QIM SDK 与其他运行时和集成路径进行比较。
* [准备您的模型](../map/compile-and-optimize-model) — 在集成模型之前对其进行转换、量化或微调。
* [使用 QAIRT C++ API 开发 AI 应用程序](../topic/develop-your-own-application-qairt-cpp) — 当您的应用程序不是多媒体管线时,使用更底层的 API 路径。
* [QIM SDK 文档](https://imsdkdocs.qualcomm.com/index) — 完整的 SDK 参考。
