# Get started

Source: [https://docs.qualcomm.com/doc/80-70015-54/topic/getting-started.html](https://docs.qualcomm.com/doc/80-70015-54/topic/getting-started.html)

This information explains how to run TensorFlow Lite models on the Qualcomm Linux
        Development Kit.

Before you get started, do the following:

- Set up the Qualcomm Linux Development Kit. For instructions, see the following:
    - QCS6490/QCS5430: [RB3 Gen 2 Quick Start Guide](bundle/publicresource/topics/80-70015-253)
    - QCS9075: [Qualcomm^®^ IQ-9100 Beta
                            Evaluation Kit Quick Start Guide](https://docs.qualcomm.com/bundle/80-70015-263/resource/80-70015-263_REV_AB_Qualcomm_IQ-9100_Beta_Evaluation_Kit_Quick_Start_Guide.pdf)
Note: This
                            guide is currently available for Authorized users only. To upgrade your
                            access, go to [www.qualcomm.com/support/working-with-qualcomm](https://www.qualcomm.com/support/working-with-qualcomm).
- Connect the Qualcomm Linux Development Kit to a monitor using HDMI.
- Upgrade the Qualcomm Linux Development Kit with the latest software release
                available on [CodeLinaro Artifactory Service](https://artifacts.codelinaro.org/ui/native/qli-ci/flashable-binaries/).
- Flash the image to the device. For instructions, see [Flash images](https://docs.qualcomm.com/bundle/publicresource/topics/80-70015-254/flash_images.html).

## Run a TensorFlow Lite model using the Gstreamer-based IM SDK

Source: [https://docs.qualcomm.com/doc/80-70015-54/topic/getting-started.html](https://docs.qualcomm.com/doc/80-70015-54/topic/getting-started.html)

The Qualcomm Linux Development Kit ships with precompiled TensorFlow Lite sample
        applications to run sample TensorFlow Lite models.

The gst-ai-classification sample application uses the IM SDK plug-ins to run a TensorFlow
            Lite classification model on the Qualcomm Linux Development Kit with hardware
            acceleration using TensorFlow Lite delegates.

Figure : Workflow to run a TensorFlow Lite model using IM SDK
            
            <?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 workflow-to-run-tflite-model-using-qualcomm-im-sdk.svg Page-1 -->
<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="12.8802in" height="4.20833in" viewbox="0 0 927.375 303" xml:space="preserve" color-interpolation-filters="sRGB" class="st14"><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: #f7f8fa; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 0.75 }
.svg-1 .st2 { fill: none; marker-end: url("#mrkr5-8"); marker-start: url("#mrkr5-6"); stroke: #3253dc; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-1 .st3 { fill: #3253dc; fill-opacity: 1; stroke: #3253dc; stroke-opacity: 1; stroke-width: 0.28409090909091 }
.svg-1 .st4 { fill: none; stroke: #3253dc; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-1 .st5 { fill: #000000; font-family: Arial; font-size: 0.75em }
.svg-1 .st6 { font-size: 1em }
.svg-1 .st7 { fill: #3253dc; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 6.375 }
.svg-1 .st8 { fill: #3253dc; fill-opacity: 1; stroke: #3253dc; stroke-opacity: 1; stroke-width: 0.71669477234401 }
.svg-1 .st9 { marker-end: url("#mrkr5-54"); stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-1 .st10 { fill: #000000; fill-opacity: 1; stroke: #000000; stroke-opacity: 1; stroke-width: 0.28409090909091 }
.svg-1 .st11 { fill: none; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-1 .st12 { marker-end: url("#mrkr5-54"); marker-start: url("#mrkr5-106"); stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-1 .st13 { stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-1 .st14 { fill: none; fill-rule: evenodd; font-size: 12px; overflow: visible; stroke-linecap: square; stroke-miterlimit: 3 }</style>
<defs id="Markers">	<g id="lend5">		<path d="M 2 1 L 0 0 L 1.98117 -0.993387 C 1.67173 -0.364515 1.67301 0.372641 1.98465 1.00043 " style="stroke:none"></path>	</g>	<marker id="mrkr5-6" class="st3" v:arrowtype="5" v:arrowsize="2" v:setback="6.16" refx="6.16" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend5" transform="scale(3.52) "></use>	</marker>	<marker id="mrkr5-8" class="st3" v:arrowtype="5" v:arrowsize="2" v:setback="6.16" refx="-6.16" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend5" transform="scale(-3.52,-3.52) "></use>	</marker>	<marker id="mrkr5-48" class="st8" v:arrowtype="5" v:arrowsize="2" v:setback="2.44176" refx="-2.4417647058824" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend5" transform="scale(-1.3952941176471,-1.3952941176471) "></use>	</marker>	<marker id="mrkr5-54" class="st10" v:arrowtype="5" v:arrowsize="2" v:setback="6.16" refx="-6.16" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend5" transform="scale(-3.52,-3.52) "></use>	</marker>	<marker id="mrkr5-106" class="st10" v:arrowtype="5" v:arrowsize="2" v:setback="5.8" refx="5.8" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend5" transform="scale(3.52) "></use>	</marker></defs><g v:mid="0" v:index="1" v:groupcontext="foregroundPage">	<title>Page-1</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="shape1002-1" v:mid="1002" v:groupcontext="shape" transform="translate(18.2813,-18)">		<title></title>		<rect x="0" y="36" width="891.094" height="267" class="st1"></rect>	</g>	<g id="shape1000-3" v:mid="1000" v:groupcontext="shape" transform="translate(306.562,-26.0619)">		<title></title>		<rect x="0" y="82.5" width="139.5" height="220.5" class="st2"></rect>	</g>	<g id="shape1-9" v:mid="1" v:groupcontext="shape" transform="translate(323.812,-179.437)">		<title></title>		<desc>TensorFlow Lite inferencing</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="49.5" cy="280.5" width="99" height="45"></v:textrect>		<rect x="0" y="258" width="99" height="45" class="st4"></rect>		<text x="17.49" y="277.8" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>TensorFlow Lite <tspan x="27.49" dy="1.2em" class="st6">inferencing</tspan></text>		</g>	<g id="shape3-13" v:mid="3" v:groupcontext="shape" transform="translate(323.812,-107.437)">		<title></title>		<desc>Delegate (CPU, GPU, external)</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="49.5" cy="280.5" width="99" height="45"></v:textrect>		<rect x="0" y="258" width="99" height="45" class="st4"></rect>		<text x="31.49" y="277.8" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Delegate<v:lf></v:lf><tspan x="6.24" dy="1.2em" class="st6">(CPU, GPU, external)</tspan></text>		</g>	<g id="shape4-17" v:mid="4" v:groupcontext="shape" transform="translate(323.812,-35.4369)">		<title></title>		<desc>External: Qualcomm Hexagon Tensor Processor</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="49.5" cy="280.5" width="99" height="45"></v:textrect>		<rect x="0" y="258" width="99" height="45" class="st4"></rect>		<text x="31.74" y="272.4" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>External: <v:lf></v:lf><tspan x="8.48" dy="1.2em" class="st6">Qualcomm Hexagon </tspan><tspan x="13.99" dy="1.2em" class="st6">Tensor Processor</tspan></text>		</g>	<g id="shape5-22" v:mid="5" v:groupcontext="shape" transform="translate(205.687,-179.437)">		<title></title>		<desc>Preprocessing</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="40.5" cy="280.5" width="81" height="45"></v:textrect>		<rect x="0" y="258" width="81" height="45" class="st4"></rect>		<text x="11.74" y="283.2" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Preprocessing</text>		</g>	<g id="shape6-25" v:mid="6" v:groupcontext="shape" transform="translate(205.687,-35.4369)">		<title></title>		<desc>TensorFlow Lite model</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="40.5" cy="280.5" width="81" height="45"></v:textrect>		<rect x="0" y="258" width="81" height="45" class="st4"></rect>		<text x="8.49" y="277.8" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>TensorFlow Lite <tspan x="28.24" dy="1.2em" class="st6">model</tspan></text>		</g>	<g id="shape7-29" v:mid="7" v:groupcontext="shape" transform="translate(97.6875,-179.437)">		<title></title>		<desc>Camera source</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="40.5" cy="280.5" width="81" height="45"></v:textrect>		<rect x="0" y="258" width="81" height="45" class="st4"></rect>		<text x="9.74" y="283.2" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Camera source</text>		</g>	<g id="shape8-32" v:mid="8" v:groupcontext="shape" transform="translate(458.812,-179.437)">		<title></title>		<desc>Postprocessing</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="40.5" cy="280.5" width="81" height="45"></v:textrect>		<rect x="0" y="258" width="81" height="45" class="st4"></rect>		<text x="9.73" y="283.2" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Postprocessing</text>		</g>	<g id="shape9-35" v:mid="9" v:groupcontext="shape" transform="translate(618.562,-152.437)">		<title></title>		<desc>qtivcomposer (Layer composition)</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="45.5625" cy="258" width="91.13" height="90"></v:textrect>		<rect x="0" y="213" width="91.125" height="90" class="st4"></rect>		<text x="18.8" y="255.3" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qtivcomposer<v:lf></v:lf><tspan x="6.05" dy="1.2em" class="st6">(Layer composition)</tspan></text>		</g>	<g id="group19-39" transform="translate(61.6875,-184.462) scale(-1,1)" v:mid="19" v:groupcontext="group">		<title>Security Camera</title>		<g id="shape20-40" v:mid="20" v:groupcontext="shape">			<title></title>			<path d="M37.83 282.18 L26.73 290.92 L17.99 287.32 L17.99 288.1 C17.99 292.05 14.75 295.29 10.79 295.29 L3.08 295.29						 L3.08 303 L0 303 L0 268.05 L3.08 268.05 L3.08 292.21 L10.79 292.21 C13.05 292.21 14.9 290.36 14.9 288.1						 L14.9 286.09 L5.6 282.18 L10.33 270.77 L37.83 282.18 ZM16.45 283.47 C17.58 283.47 18.5 282.54 18.5 281.41						 C18.5 280.28 17.58 279.36 16.45 279.36 C15.32 279.36 14.39 280.28 14.39 281.41 C14.39 282.54 15.32 283.47						 16.45 283.47 Z" class="st7"></path>		</g>		<g id="shape21-42" v:mid="21" v:groupcontext="shape" transform="translate(32.1739,-12.1808)">			<title></title>			<path d="M4.57 297.86 L8.33 299.4 L3.75 303 L0 301.46 L4.57 297.86 Z" class="st7"></path>		</g>	</g>	<g id="group22-44" transform="translate(862.875,-181.463)" v:mid="22" v:groupcontext="group">		<title>Monitor</title>		<g id="shape23-45" v:mid="23" v:groupcontext="shape" transform="translate(0,-2.77538)">			<title></title>			<path d="M38.48 268.05 C39.59 268.05 40.5 268.98 40.5 270.11 L40.5 294.78 C40.5 295.91 39.59 296.83 38.48 296.83						 L24.3 296.83 L24.3 299.92 L29.36 299.92 L29.36 303 L11.14 303 L11.14 299.92 L16.2 299.92 L16.2 296.83						 L2.03 296.83 C0.91 296.83 0 295.91 0 294.78 L0 270.11 C0 268.98 0.91 268.05 2.03 268.05 L38.48 268.05						 ZM37.46 293.75 L37.46 271.13 L3.04 271.13 L3.04 293.75 L37.46 293.75 Z" class="st7"></path>		</g>	</g>	<g id="shape26-49" v:mid="26" v:groupcontext="shape" transform="translate(61.6875,-201.937)">		<title></title>		<path d="M0 303 L29.84 303" class="st9"></path>	</g>	<g id="shape27-55" v:mid="27" v:groupcontext="shape" v:layermember="0" transform="translate(178.688,-192.188)">		<title>Dynamic connector</title>		<path d="M0 294 L20.84 294" class="st9"></path>	</g>	<g id="shape29-60" v:mid="29" v:groupcontext="shape" v:layermember="0" transform="translate(422.812,-192.937)">		<title>Dynamic connector.29</title>		<path d="M0 294 L29.84 294" class="st9"></path>	</g>	<g id="shape30-65" v:mid="30" v:groupcontext="shape" v:layermember="0" transform="translate(539.812,-192.937)">		<title>Dynamic connector.30</title>		<path d="M0 294 L72.59 294" class="st9"></path>	</g>	<g id="shape31-70" v:mid="31" v:groupcontext="shape" transform="translate(543.187,-201.937)">		<title></title>		<desc>Classification</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="36" cy="296.25" width="72" height="13.5"></v:textrect>		<rect x="0" y="289.5" width="72" height="13.5" class="st11"></rect>		<text x="9.49" y="298.95" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Classification</text>		</g>	<g id="shape33-73" v:mid="33" v:groupcontext="shape" transform="translate(536.437,-185.25)">		<title></title>		<desc>Metadata</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="36" cy="296.25" width="72" height="13.5"></v:textrect>		<rect x="0" y="289.5" width="72" height="13.5" class="st11"></rect>		<text x="17.24" y="298.95" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Metadata</text>		</g>	<g id="shape34-76" v:mid="34" v:groupcontext="shape" transform="translate(736.687,-152.437)">		<title></title>		<desc>Waylandsink (Display rendering)</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="45.5625" cy="258" width="91.13" height="90"></v:textrect>		<rect x="0" y="213" width="91.125" height="90" class="st4"></rect>		<text x="20.05" y="255.3" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Waylandsink<v:lf></v:lf><tspan x="7.55" dy="1.2em" class="st6">(Display rendering)</tspan></text>		</g>	<g id="shape36-80" v:mid="36" v:groupcontext="shape" transform="translate(286.687,-201.937)">		<title></title>		<path d="M0 303 L30.96 303" class="st9"></path>	</g>	<g id="shape37-85" v:mid="37" v:groupcontext="shape" transform="translate(286.687,-57.9369)">		<title></title>		<path d="M0 303 L30.96 303" class="st9"></path>	</g>	<g id="shape39-90" v:mid="39" v:groupcontext="shape" transform="translate(709.687,-201.937)">		<title></title>		<path d="M0 303 L18 303 L20.84 303" class="st9"></path>	</g>	<g id="shape40-95" v:mid="40" v:groupcontext="shape" transform="translate(827.812,-201.937)">		<title></title>		<path d="M0 303 L29.5 303" class="st9"></path>	</g>	<g id="shape41-100" v:mid="41" v:groupcontext="shape" transform="translate(675.187,195.563) rotate(90)">		<title></title>		<path d="M5.8 303 L6.16 303 L20.84 303" class="st12"></path>	</g>	<g id="shape42-108" v:mid="42" v:groupcontext="shape" transform="translate(675.187,123.563) rotate(90)">		<title></title>		<path d="M5.8 303 L6.16 303 L20.84 303" class="st12"></path>	</g>	<g id="shape43-115" v:mid="43" v:groupcontext="shape" transform="translate(102.187,-225.75)">		<title></title>		<desc>qtiqmmfsrc</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="36" cy="296.25" width="72" height="13.5"></v:textrect>		<rect x="0" y="289.5" width="72" height="13.5" class="st11"></rect>		<text x="14" y="298.95" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qtiqmmfsrc</text>		</g>	<g id="shape44-118" v:mid="44" v:groupcontext="shape" transform="translate(210.187,-225.75)">		<title></title>		<desc>qtimlvconverter</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="36" cy="296.25" width="72" height="13.5"></v:textrect>		<rect x="0" y="289.5" width="72" height="13.5" class="st11"></rect>		<text x="5.49" y="298.95" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qtimlvconverter</text>		</g>	<g id="shape45-121" v:mid="45" v:groupcontext="shape" transform="translate(337.312,-225.75)">		<title></title>		<desc>qtimltflite</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="36" cy="296.25" width="72" height="13.5"></v:textrect>		<rect x="0" y="289.5" width="72" height="13.5" class="st11"></rect>		<text x="18.25" y="298.95" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qtimltflite</text>		</g>	<g id="shape46-124" v:mid="46" v:groupcontext="shape" transform="translate(452.625,-225.75)">		<title></title>		<desc>qtiqmlvclassification</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="45.5625" cy="296.25" width="91.13" height="13.5"></v:textrect>		<rect x="0" y="289.5" width="91.125" height="13.5" class="st11"></rect>		<text x="5.8" y="298.95" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qtiqmlvclassification</text>		</g>	<g id="shape47-127" v:mid="47" v:groupcontext="shape" v:layermember="0" transform="translate(190.385,-201.937)">		<title>Dynamic connector.47</title>		<path d="M0 303 L0 240 L483.3 240" class="st13"></path>	</g>	<g id="shape48-130" v:mid="48" v:groupcontext="shape" v:layermember="0" transform="translate(664.687,-264.937)">		<title>Dynamic connector.48</title>		<path d="M9 303 L9 319.34" class="st9"></path>	</g>	<g id="shape50-135" v:mid="50" v:groupcontext="shape" transform="translate(405,-266.25)">		<title></title>		<desc>Live stream</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="36" cy="296.25" width="72" height="13.5"></v:textrect>		<rect x="0" y="289.5" width="72" height="13.5" class="st11"></rect>		<text x="12.74" y="298.95" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Live stream</text>		</g></g>
</svg>

The gst-ai-classification sample application does the following:

1. Opens the IMX577 camera present on the Qualcomm Linux Development Kit with a
                specific resolution and fps; for example, 1080p at 30 fps.
2. Preprocesses each camera frame to provide the input data to a classification
                    model.
    For example, the gst-ai-classification sample application:

    1. Downscales a 1080p frame to a 224 x 224 resolution
    2. Normalizes the input frame based on the model requirements
3. The qtimltflite IM SDK plug-in, which is written on top of the TensorFlow Lite C++
                API, does the following:
    1. Loads the sample TensorFlow Lite classification model
    2. Performs inference on the model provided with hardware acceleration
4. Postprocesses the output from the inference, that is, extracts the label with
                highest predicted probability within the output tensor.
5. Overlays the inference result on the original camera input image and displays it on
                the connected monitor.

### Download and copy a sample model

To download and copy a model and a label file to the device, do the following:

1. Go to [Qualcomm^®^ AI Hub](https://aihub.qualcomm.com/iot/models/inception_v3_quantized?searchTerm=inception) and
                    download the Inception-v3-Quantized model. ![](data:image/png;base64,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)
2. To download the label file corresponding to this model, run the following
                        command:

        wget https://github.com/quic/ai-hub-models/blob/main/qai_hub_models/labels/imagenet_labels.txtCopy to clipboard

Note: Models are hosted on Qualcomm AI Hub and model labels
                        are hosted on the Qualcomm AI Hub GitHub repository.
3. To copy the models and label files to the device using the secure copy protocol
                    (SCP), run the following
                        commands:

        # For SCP, run the following command:
        ssh root@[ip-addr]
        mount -o remount,rw /
        exitCopy to clipboard

        # Copy files securely
        scp imagenet_labels.txt root@[ip-addr]:/opt/
        scp inception_v3_quantized.tflite root@[ip-addr]:/opt/
        Copy to clipboard

Note: When prompted for a password, enter
                            <var class="keyword varname">oelinux123</var>.

### Execute a TensorFlow Lite model with a sample application

1. To run inference using TensorFlow Lite Runtime, run the following
                    commands:

        ssh root@[ip-addr]Copy to clipboard

        # Setup Wayland Display environment
        export XDG_RUNTIME_DIR=/dev/socket/weston && export WAYLAND_DISPLAY=wayland-1Copy to clipboard

        # Run a classification sample app
        gst-ai-classification --ml-framework=2 --model=/opt/inception_v3_quantized.tflite --labels=/opt/imagenet_labels.txt -k "Inception,q-offsets=<33.0>,q-scales=<0.18740029633045197>;"Copy to clipboard
2. To run the sample application using a custom classification model, use the
                    following arguments:
    - `--model`
    - `--labels`

    For
                    example:

        gst-ai-classification --ml-framework=2 --model=/opt/custom_model.tflite --labels=/opt/custom_label.txtCopy to clipboard
3. To stop the sample application, press CTRL+C.

When the sample application is running, it displays the camera stream on the
                connected monitor with inference results overlaid on the frame.

## Run a TensorFlow Lite model using a native TensorFlow Lite sample application

Source: [https://docs.qualcomm.com/doc/80-70015-54/topic/getting-started.html](https://docs.qualcomm.com/doc/80-70015-54/topic/getting-started.html)

You can run TensorFlow Lite models using a sample TensorFlow Lite application called
        label\_image, which is a part of the TensorFlow repository.

The label\_image sample application and the TensorFlow Lite Runtime library are
            cross-compiled with Qualcomm Linux and installed on the target device.

The label\_image sample application does the following:

1. Loads a classification TensorFlow Lite model
2. Performs inference on an image using a delegate to accelerate the model on the
                Qualcomm hardware

To run a model using the label\_image sample application, do the following:

1. To use a sample model, corresponding labels, and an example image with the
                label\_image sample application, download the following:
    - BMP file from [here](https://github.com/sourcecode369/tensorflow-1/tree/master/tensorflow/lite/examples/label_image/testdata/)
    - MobileNet TensorFlow Lite model from [here](https://github.com/emgucv/models/blob/master/mobilenet_v1_1.0_224_float_2017_11_08/mobilenet_v1_1.0_224.tflite)
2. Run the following commands on the host
                machine:

        wget http://download.tensorflow.org/models/mobilenet_v1_2018_08_02/mobilenet_v1_1.0_224_quant.tgzCopy to clipboard

        tar -xvf mobilenet_v1_1.0_224_quant.tgzCopy to clipboard

        wget https://storage.googleapis.com/download.tensorflow.org/models/mobilenet_v1_1.0_224_frozen.tgzCopy to clipboard

        tar -xvf mobilenet_v1_1.0_224_frozen.tgzCopy to clipboard

        # For SCP, run the following command:
        ssh root@[ip-addr]
        mount -o remount,rw /
        exitCopy to clipboard

        scp mobilenet_v1_1.0_224_quant.tflite root@[ip-addr]:/opt/
        scp grace_hopper.bmp root@[ip-addr]:/opt/
        scp mobilenet_v1_1.0_224/labels.txt root@[ip-addr]:/opt/
        scp mobilenet_v1_1.0_224.tflite root@[ip-addr]:/opt/
        Copy to clipboard
3. To run an inference using one of the following delegates, do the following:
    - To run the model on the Arm^®^ CPU using the XNNPACK delegate, run
                        the following
                        command:

            label_image -l /opt/labels.txt -i /opt/grace_hopper.bmp -m /opt/mobilenet_v1_1.0_224_quant.tflite -c 10 -p 1 –-xnnpack_delegateCopy to clipboard
    - To run the model on the Qualcomm^®^ Adreno™ GPU using the GPU
                        delegate, run the following
                        command:

            label_image -l /opt/labels.txt -i /opt/grace_hopper.bmp -m /opt/mobilenet_v1_1.0_224.tflite -c 10 -p 1 --gl_backend 1Copy to clipboard

Last Published: Oct 09, 2024

[Previous Topic
Overview](https://docs.qualcomm.com/bundle/publicresource/80-70015-54/topics/tflite-landing-page.md) [Next Topic
Architecture](https://docs.qualcomm.com/bundle/publicresource/80-70015-54/topics/arch.md)