# Develop your own application

Source: [https://docs.qualcomm.com/doc/80-70015-15B/topic/develop-own-app.html](https://docs.qualcomm.com/doc/80-70015-15B/topic/develop-own-app.html)

Developers can write AI/ML applications, using one of the following
        methods.

- Using Qualcomm IM SDK – Developers can leverage existing reference applications to
                deploy their models or extend capabilities of Qualcomm IM SDK to add support for
                their models and use cases. More details are given in the next section.
- Native C/C++ apps using AI SDK APIs – Developers can leverage AI SDK samples for
                native AI/ML application development. Developers need to implement
                pre-/postprocessing in C/C++.

Qualcomm IM SDK, is a unified SDK enabling seamless multimedia and artificial
            intelligence/machine learning (AI/ML) application deployment. This SDK uses GStreamer,
            an open-source multimedia framework and exposes easy APIs and plugins in both multimedia
            and ML domains. For details, refer to the [official SDK documentation](https://docs.qualcomm.com/bundle/publicresource/topics/80-70015-50/overview.html).

Qualcomm IM SDK implements the following plugins for AI/ML applications. A complete list
            of plugins can be found in the Qualcomm IM SDK [plugin documentation](https://docs.qualcomm.com/bundle/publicresource/topics/80-70015-50/qim-sdk-plugins.html).

**Download source code for development**

The eSDK (extensible SDK) needs to be setup to develop application/plugin code. See [Compile application,
                Qualcomm IM SDK](https://docs.qualcomm.com/doc/80-70015-15B/topic/compile-app-esdk.html) for instructions on setting up the eSDK and downloading and
            compiling the source code.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by Microsoft Visio, SVG Export develop-own-app-imsdk-plugins.svg develop-own-app -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="11.5052in" height="5.29646in" viewbox="0 0 828.375 381.345" xml:space="preserve" color-interpolation-filters="sRGB" class="st13 svg-1"><v:documentproperties v:langid="1033" v:viewmarkup="false">	<v:userdefs>		<v:ud v:nameu="msvNoAutoConnect" v:val="VT0(1):26"></v:ud>	</v:userdefs></v:documentproperties>
<style>.svg-1 .st1 { fill: none; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 0.75 }
.svg-1 .st2 { fill: #2a2aea; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 0.75 }
.svg-1 .st3 { fill: #ffffff; font-family: Roboto; font-size: 1.16666em }
.svg-1 .st4 { fill: #f5f6f7; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 0.75 }
.svg-1 .st5 { fill: #000000; font-family: Roboto; font-size: 1.33333em; font-weight: bold }
.svg-1 .st6 { font-size: 1em }
.svg-1 .st7 { fill: #2a2aea; font-family: Roboto; font-size: 1.16666em }
.svg-1 .st8 { fill: #000000; font-family: Roboto; font-size: 1.16666em }
.svg-1 .st9 { marker-end: url("#1-mrkr13-59"); stroke: #843aff; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-1 .st10 { fill: #843aff; fill-opacity: 1; stroke: #843aff; stroke-opacity: 1; stroke-width: 0.35714285714286 }
.svg-1 .st11 { marker-end: url("#1-mrkr4-65"); stroke: #843aff; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-1 .st12 { fill: #ffffff; font-family: Roboto; font-size: 1.16666em; letter-spacing: -0.00714292em }
.svg-1 .st13 { fill: none; fill-rule: evenodd; font-size: 12px; overflow: visible; stroke-linecap: square; stroke-miterlimit: 3 }</style>
<defs id="Markers">	<g id="lend13">		<path d="M 3 1 L 0 0 L 3 -1 L 3 1 " style="stroke:none"></path>	</g>	<marker id="1-mrkr13-59" class="st10" v:arrowtype="13" v:arrowsize="1" v:setback="8.4" refx="-8.4" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend13" transform="scale(-2.8,-2.8) "></use>	</marker>	<g id="lend4">		<path d="M 2 1 L 0 0 L 2 -1 L 2 1 " style="stroke:none"></path>	</g>	<marker id="1-mrkr4-65" class="st10" v:arrowtype="4" v:arrowsize="1" v:setback="5.6" refx="-5.6" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend4" transform="scale(-2.8,-2.8) "></use>	</marker></defs><g v:mid="5" v:index="1" v:groupcontext="foregroundPage">	<title>develop-own-app</title>	<v:pageproperties v:drawingscale="1" v:pagescale="1" v:drawingunits="19" v:shadowoffsetx="9" v:shadowoffsety="-9"></v:pageproperties>	<v:layer v:name="Connector" v:index="0"></v:layer>	<g id="shape2-1" v:mid="2" v:groupcontext="shape" transform="translate(18.375,-18.375)">		<title>Sheet.2</title>		<rect x="0" y="36.75" width="791.625" height="344.595" class="st1"></rect>	</g>	<g id="shape1-3" v:mid="1" v:groupcontext="shape" transform="translate(32.5112,-177.814)">		<title>Sheet.1</title>		<desc>qtimlvconverter</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="63.6127" cy="367.201" width="127.23" height="28.2876"></v:textrect>		<rect x="0" y="353.057" width="127.225" height="28.2876" class="st2"></rect>		<text x="15.07" y="371.4" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qtimlvconverter</text>		</g>	<g id="shape3-6" v:mid="3" v:groupcontext="shape" transform="translate(226.883,-72)">		<title>Sheet.3</title>		<desc>ML inference plugin selected based on model type</desc>		<v:textblock v:margins="rect(4,4,4,4)" v:verticalalign="0"></v:textblock>		<v:textrect cx="118.39" cy="241.003" width="236.79" height="280.683"></v:textrect>		<rect x="0" y="100.661" width="236.781" height="280.683" class="st4"></rect>		<text x="14.2" y="119.06" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>ML inference plugin selected <tspan x="43.72" dy="1.2em" class="st6">based on model type</tspan></text>		</g>	<g id="shape4-10" v:mid="4" v:groupcontext="shape" transform="translate(560.261,-72)">		<title>Sheet.4</title>		<desc>Use cases supported by Qualcomm IM SDK</desc>		<v:textblock v:margins="rect(4,4,4,4)" v:verticalalign="0"></v:textblock>		<v:textrect cx="118.39" cy="241.003" width="236.79" height="280.683"></v:textrect>		<rect x="0" y="100.661" width="236.781" height="280.683" class="st4"></rect>		<text x="43.12" y="119.06" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Use cases supported <v:lf></v:lf><tspan x="40.4" dy="1.2em" class="st6">by Qualcomm IM SDK</tspan></text>		</g>	<g id="shape5-14" v:mid="5" v:groupcontext="shape" transform="translate(252.505,-110.953)">		<title>Sheet.5</title>		<desc>qtimlqnn</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="92.7686" cy="367.201" width="185.54" height="28.2876"></v:textrect>		<rect x="0" y="353.057" width="185.537" height="28.2876" class="st2"></rect>		<text x="65.27" y="371.4" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qtimlqnn</text>		</g>	<g id="shape6-17" v:mid="6" v:groupcontext="shape" transform="translate(249.855,-177.814)">		<title>Sheet.6</title>		<desc>qtimlsnpe</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="92.7686" cy="367.201" width="185.54" height="28.2876"></v:textrect>		<rect x="0" y="353.057" width="185.537" height="28.2876" class="st2"></rect>		<text x="61.86" y="371.4" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qtimlsnpe</text>		</g>	<g id="shape7-20" v:mid="7" v:groupcontext="shape" transform="translate(249.855,-247.248)">		<title>Sheet.7</title>		<desc>qtimltflite</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="92.7686" cy="367.201" width="185.54" height="28.2876"></v:textrect>		<rect x="0" y="353.057" width="185.537" height="28.2876" class="st2"></rect>		<text x="62.86" y="371.4" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qtimltflite</text>		</g>	<g id="shape8-23" v:mid="8" v:groupcontext="shape" transform="translate(583.963,-164.25)">		<title>Sheet.8</title>		<desc>qtimlvsegmentation</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="92.7686" cy="367.201" width="185.54" height="28.2876"></v:textrect>		<rect x="0" y="353.057" width="185.537" height="28.2876" class="st2"></rect>		<text x="30.7" y="371.4" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qtimlvsegmentation</text>		</g>	<g id="shape9-26" v:mid="9" v:groupcontext="shape" transform="translate(584.705,-205.712)">		<title>Sheet.9</title>		<desc>qtimlvdetection</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="92.7686" cy="367.201" width="185.54" height="28.2876"></v:textrect>		<rect x="0" y="353.057" width="185.537" height="28.2876" class="st2"></rect>		<text x="44.43" y="371.4" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qtimlvdetection</text>		</g>	<g id="shape10-29" v:mid="10" v:groupcontext="shape" transform="translate(584.705,-247.891)">		<title>Sheet.10</title>		<desc>qtimlvclassification</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="92.7686" cy="367.201" width="185.54" height="28.2876"></v:textrect>		<rect x="0" y="353.057" width="185.537" height="28.2876" class="st2"></rect>		<text x="32.05" y="371.4" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qtimlvclassification</text>		</g>	<g id="shape11-32" v:mid="11" v:groupcontext="shape" transform="translate(583.963,-123.106)">		<title>Sheet.11</title>		<desc>qtimlvpose</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="92.7686" cy="367.201" width="185.54" height="28.2876"></v:textrect>		<rect x="0" y="353.057" width="185.537" height="28.2876" class="st2"></rect>		<text x="58.34" y="371.4" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qtimlvpose</text>		</g>	<g id="shape12-35" v:mid="12" v:groupcontext="shape" transform="translate(226.883,-18)">		<title>Sheet.12</title>		<desc>ML inference plugins</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="118.39" cy="361.87" width="236.79" height="38.949"></v:textrect>		<rect x="0" y="342.396" width="236.781" height="38.949" class="st1"></rect>		<text x="53.45" y="366.07" class="st7" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>ML inference plugins</text>		</g>	<g id="shape13-38" v:mid="13" v:groupcontext="shape" transform="translate(561.11,-18.7755)">		<title>Sheet.13</title>		<desc>Qualcomm IM SDK postprocessing plugins</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="118.39" cy="361.87" width="236.79" height="38.949"></v:textrect>		<rect x="0" y="342.396" width="236.781" height="38.949" class="st1"></rect>		<text x="59.67" y="357.67" class="st7" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Qualcomm IM SDK <v:lf></v:lf><tspan x="45.89" dy="1.2em" class="st6">postprocessing plugins</tspan></text>		</g>	<g id="shape14-42" v:mid="14" v:groupcontext="shape" transform="translate(32.5112,-146.25)">		<title>Sheet.14</title>		<desc>Preprocessing</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="63.6127" cy="367.201" width="127.23" height="28.2876"></v:textrect>		<rect x="0" y="353.057" width="127.225" height="28.2876" class="st1"></rect>		<text x="18.75" y="371.4" class="st7" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Preprocessing</text>		</g>	<g id="shape15-45" v:mid="15" v:groupcontext="shape" transform="translate(252.505,-87.1062)">		<title>Sheet.15</title>		<desc>Used by BIN models</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="92.7686" cy="367.201" width="185.54" height="28.2876"></v:textrect>		<rect x="0" y="353.057" width="185.537" height="28.2876" class="st1"></rect>		<text x="30.18" y="371.4" class="st8" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Used by BIN models</text>		</g>	<g id="shape16-48" v:mid="16" v:groupcontext="shape" transform="translate(249.855,-153.962)">		<title>Sheet.16</title>		<desc>Used by DLC models</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="92.7686" cy="367.201" width="185.54" height="28.2876"></v:textrect>		<rect x="0" y="353.057" width="185.537" height="28.2876" class="st1"></rect>		<text x="28.52" y="371.4" class="st8" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Used by DLC models</text>		</g>	<g id="shape17-51" v:mid="17" v:groupcontext="shape" transform="translate(249.855,-222.75)">		<title>Sheet.17</title>		<desc>Used by TFLite models</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="92.7686" cy="367.201" width="185.54" height="28.2876"></v:textrect>		<rect x="0" y="353.057" width="185.537" height="28.2876" class="st1"></rect>		<text x="21.93" y="371.4" class="st8" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Used by TFLite models</text>		</g>	<g id="shape24-54" v:mid="24" v:groupcontext="shape" v:layermember="0" transform="translate(159.737,-182.958)">		<title>Dynamic connector</title>		<path d="M0 372.34 L58.75 372.34" class="st9"></path>	</g>	<g id="shape26-60" v:mid="26" v:groupcontext="shape" transform="translate(464.253,-191.958)">		<title>Sheet.26</title>		<path d="M0 381.34 L90.41 381.34" class="st11"></path>	</g>	<g id="shape27-66" v:mid="27" v:groupcontext="shape" transform="translate(583.963,-82.6062)">		<title>Sheet.27</title>		<desc>qtimlvsuperresolution</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="92.7686" cy="367.201" width="185.54" height="28.2876"></v:textrect>		<rect x="0" y="353.057" width="185.537" height="28.2876" class="st2"></rect>		<text x="26.08" y="371.4" class="st12" v:langid="1033"><v:paragraph v:spbefore="2.95" v:horizalign="1" v:bulletsize="0.166667"></v:paragraph><v:tablist></v:tablist>qtimlvsuperresolution</text>		</g></g>
</svg>

Below are the ML plugins for pre-/postprocessing available with Qualcomm IM SDK.
            Developers can use these plugins to develop their own use case.

| Plugin | Functionality |
| --- | --- |
| qtimlvconverter | Transforms incoming video buffers into neural-network tensors while<br>                            performing required format conversion and resizing. |
| qtimlvclassification | Performs postprocessing of output tensors for classification use<br>                                cases. |
| qtimlvdetection | Performs postprocessing of output tensors for detection use<br>                                cases. |
| qtimlvsegmentation | Performs postprocessing of output tensors for pixel-level use cases,<br>                                like image segmentation, depth-map, etc. |
| qtimlvpose | Performs postprocessing of output tensors for pose estimation use<br>                            cases. |
| qtimlvsuperresolution | Performs postprocessing of the output tensors for video super<br>                            resolution use cases. |

Qualcomm IM SDK, currently supports the following use cases and related models.

| Use cases supported by Qualcomm IM SDK | Supported Models |
| --- | --- |
| Classification | Models like Mobilenet. Currently Qualcomm AI Hub has 11<br>                            classification models supported. New models will keep getting added to<br>                            AI Hub. |
| Detection | Models like ssd-mobilenet, yolov5, yolo-nas, and yolov8 |
| Segmentation | Models like deeplabv3\_resnet and ffnet |
| Pose detection | Models like posenet\_mobilenet |
| Super resolution | Models like QuickSRNet, XLSR, etc. |

Note: A list of verified models from Qualcomm AI Hub is available in a different table
            below. Developers can use many other models with similar postprocessing requirements,
            however it is recommended to verify postprocessing support in the relevant Qualcomm IM
            SDK plugins before integrating your own model.

Last Published: Jan 21, 2026

[Previous Topic
Customize reference application](https://docs.qualcomm.com/bundle/publicresource/80-70015-15B/topics/customize-reference-app.md) [Next Topic
Integrate Custom Model in an Application](https://docs.qualcomm.com/bundle/publicresource/80-70015-15B/topics/integrate-custom-model.md)