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

# 概述

> 使用 GStreamer 和 Qualcomm 智能多媒体 SDK（IM SDK）构建 AI/ML 应用：零拷贝管道和 GPU 前/后处理的工作原理，以及完整参考文档的位置。

Qualcomm® 智能多媒体 SDK（IM SDK）是一个统一的、硬件加速的框架，用于在 Qualcomm Dragonwing IoT 平台上构建多媒体和 AI/ML 应用。它基于 [GStreamer](https://gstreamer.freedesktop.org/) 构建，提供 40 多个 Qualcomm 优化插件，可组合成单流或多流的**摄像头 → AI → 显示/流传输**管道，而无需深入了解底层硬件。

当您的应用是**实时摄像头、视频或视觉管道**时，请使用 IM SDK：它将采集、预处理、推理和渲染组合到一个管道中，并让每个阶段在最高效的引擎上运行。

<Note>
  IM SDK 作为 Qualcomm Linux 镜像的一部分提供，因此 AI 开发者工作流无需单独安装。有关完整的 SDK 参考（安装替代方案、完整插件目录、管道构建指南和示例应用），请参见 **[Discover SDKs → IM SDKs](https://imsdkdocs.qualcomm.com)**。
</Note>

## 为什么使用 IM SDK

<CardGroup cols={2}>
  <Card title="统一的多媒体 + AI 框架" icon="arrows-to-circle">
    采集、预处理、推理、后处理和渲染都在单个 GStreamer 管道中完成，而不是将独立的应用拼接在一起。
  </Card>

  <Card title="默认硬件加速" icon="rabbit-running">
    插件原生使用 Qualcomm CPU、GPU、NPU（HTP）、摄像头 ISP、视频（VPU）和 DSP，因此每个阶段都在合适的引擎上运行。
  </Card>

  <Card title="零拷贝（zero-memcpy）缓冲区" icon="bolt">
    帧以 DMA-buf 句柄的形式在管道中流转，因此同一缓冲区在 ISP、GPU 和 NPU 之间共享，无需 CPU 拷贝。
  </Card>

  <Card title="GPU 前处理和后处理" icon="microchip">
    缩放、颜色转换、张量布局和叠加渲染都在 Adreno GPU 上运行，使 CPU 保持空闲并持续为推理供给数据。
  </Card>

  <Card title="灵活的 AI 运行时支持" icon="microchip-ai">
    通过 LiteRT/TFLite、ONNX、Qualcomm AI Engine Direct（QNN）或 SNPE 运行模型。可按模型选择，无需重写管道。
  </Card>

  <Card title="Qualcomm AI Hub 集成" icon="cloud-arrow-down">
    从 [Qualcomm AI Hub](https://aihub.qualcomm.com/) 下载预训练的量化模型，并直接在参考管道中运行。
  </Card>
</CardGroup>

## IM SDK 管道的工作原理

一个典型的视觉 AI 管道包含五个阶段。IM SDK 在专用硬件上加速高亮显示的（⚡）阶段，并以零拷贝 DMA-buf 句柄的形式在各阶段之间传递帧。

```mermaid theme={null}
flowchart LR
    classDef gpu fill:#31017D,color:#fff,stroke:#31017D
    classDef npu fill:#3253DC,color:#fff,stroke:#3253DC
    classDef io  fill:#5B6770,color:#fff,stroke:#5B6770

    Cam["Data source<br/>qticamsrc · v4l2 decode · RTSP/file"]:::io
    Pre["⚡ Preprocessing: GPU<br/>qtimlvconverter<br/>resize · color convert · tensor layout"]:::gpu
    Inf["⚡ Inference: NPU/HTP<br/>qtimltflite · qtimlqnn<br/>qtimlonnx · qtimlsnpe"]:::npu
    Post["⚡ Post-processing: GPU<br/>qtimlpostprocess + qtivoverlay"]:::gpu
    Out["Use AI metadata<br/>display · RTSP/WebRTC · MQTT/Kafka · actions"]:::io

    Cam -->|"DMA-buf (zero-copy)"| Pre -->|"DMA-buf"| Inf -->|"tensors"| Post -->|"DMA-buf"| Out
```

| 阶段           | IM SDK 插件                                                                                    | 硬件引擎                     |
| ------------ | -------------------------------------------------------------------------------------------- | ------------------------ |
| 采集 / 解码      | `qticamsrc`、`v4l2h264dec` / `v4l2h265dec`                                                    | 摄像头 ISP、视频（VPU）          |
| 预处理          | `qtimlvconverter`                                                                            | GPU（Adreno）              |
| 推理           | `qtimltflite`（LiteRT）、`qtimlqnn`（AI Engine Direct / QNN）、`qtimlonnx`（ONNX）、`qtimlsnpe`（SNPE） | NPU/HTP（Hexagon）、CPU、GPU |
| 后处理          | `qtimlpostprocess`                                                                           | CPU / GPU                |
| 叠加 / 合成 / 编码 | `qtivoverlay`、`qtivcomposer`、`v4l2h264enc`                                                   | GPU、视频（VPU）              |

有关构建这些管道的逐阶段指南，请参见 Discover SDKs 中的[构建 AI 管道](https://imsdkdocs.qualcomm.com/qimsdk-overview/sdkoverview)和[插件参考](https://imsdkdocs.qualcomm.com/plugin-reference/introduction)。

### 为什么零拷贝（zero-memcpy）很重要

在朴素的管道中，每个阶段都会将帧复制到自己的缓冲区中，消耗内存带宽和 CPU 周期，并增加延迟。而 IM SDK 让**同一个帧缓冲区**以共享的 **DMA-buf** 句柄形式在解码 → 预处理 → 推理 → 叠加 → 编码之间流转：

* 摄像头 ISP 只写入一次帧数据；GPU 和 NPU 读取**同一物理缓冲区**，引擎之间无需 `memcpy`。
* 插件通过 GStreamer 的分配查询（allocation-query）机制自动协商 DMA-buf 分配；当管道中的每个阶段都支持时即可启用零拷贝（例如，在解码/编码元素上设置 `capture-io-mode=dmabuf` / `output-io-mode=dmabuf-import`）。
* 结果是**更低的内存流量、更低的 CPU 负载和更低的端到端延迟**，这对高分辨率和多流工作负载尤为重要。

### 在 GPU 上进行前处理和后处理

只有当 NPU 从不等待 CPU 时，NPU 上的推理才够快。IM SDK 将数据整形工作放到 Adreno GPU 上运行：

* **预处理**：`qtimlvconverter` 直接在 GPU 上执行色彩空间转换和张量布局变换，生成模型所需的精确张量，避免推理前出现 CPU 瓶颈。
* **后处理**：`qtimlpostprocess` 将模型的输出张量解码为结构化元数据（边界框、标签、掩码），`qtivoverlay` 则在 GPU 上就地将这些元数据绘制回帧上。

## 后续步骤

<CardGroup cols={2}>
  <Card title="下载用于开发的源代码" icon="download" href="../topic/download-source-code">
    设置 Qualcomm IM SDK 可扩展 SDK（eSDK）并下载源代码，以开发 AI/ML 应用和插件代码。
  </Card>

  <Card title="在应用中集成自定义 AI 模型" icon="puzzle-piece" href="../topic/integrate-custom-model">
    选择合适的 Qualcomm SDK 路径，使用 Qualcomm IM SDK 或 Qualcomm AI Runtime SDK 在应用中部署自定义 AI 模型。
  </Card>

  <Card title="为自定义模型添加后处理支持" icon="sliders" href="../topic/add-postprocessing-support-custom-model">
    使用 qtimlpostprocess 插件为 Qualcomm IM SDK 管道添加自定义模型后处理支持。
  </Card>
</CardGroup>
