# 人脸识别

Source: [https://docs.qualcomm.com/doc/80-70022-50SC/topic/gst-ai-face-recognition.html](https://docs.qualcomm.com/doc/80-70022-50SC/topic/gst-ai-face-recognition.html)

**gst-ai-face-recognition** 应用程序从摄像头或 RTSP 流采集实时视频输入，并对这些输入执行人脸检测、人脸特征点定位和人脸识别。它使用 face\_det\_quantized模型进行人脸检测，使用 `facemap_3dmm_quantized` 模型进行人脸特征点定位，使用 `face_attrib_net_quantized` 模型进行人脸识别标签标注。

运行的结果是在 HDMI 显示器上预览叠加的 AI 模型。

下图展示了一个 pipeline：接收输入，对其进行预处理，在 AI 硬件上运行推理，并在屏幕上显示结果。

Figure : gst-ai-face-recognition pipeline
            
            <?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 gst_ai_face_recognition_pipeline.svg gst_ai_face_recognition_pipelin -->
<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="13.4265in" height="6.25908in" viewbox="0 0 966.709 450.654" xml:space="preserve" color-interpolation-filters="sRGB" class="st15"><v:documentproperties v:langid="1033" v:viewmarkup="false"></v:documentproperties>
<style>.svg-1 .st1 { fill: #fafafa; stroke: none; stroke-linecap: butt; stroke-width: 0.75 }
.svg-1 .st2 { fill: #d2d7e1; stroke: none; stroke-linecap: butt; stroke-width: 0.75 }
.svg-1 .st3 { stroke: #000000; stroke-linecap: butt; stroke-width: 0.75 }
.svg-1 .st4 { fill: #2a2aea; stroke: none; stroke-linecap: butt; stroke-width: 0.75 }
.svg-1 .st5 { fill: #ffffff; font-family: Roboto; font-size: 0.874992em }
.svg-1 .st6 { fill: #007884; stroke: none; stroke-linecap: butt; stroke-width: 0.75 }
.svg-1 .st7 { fill: none; stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.5 }
.svg-1 .st8 { stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.5 }
.svg-1 .st9 { fill: #000000; stroke: none; stroke-linecap: butt; stroke-width: 0.75 }
.svg-1 .st10 { fill: none; stroke: none; stroke-linecap: butt; stroke-width: 0.75 }
.svg-1 .st11 { fill: #000000; font-family: Roboto; font-size: 0.874992em }
.svg-1 .st12 { font-size: 1em }
.svg-1 .st13 { fill: none }
.svg-1 .st14 { fill: #000000; font-family: SimHei; font-size: 0.874992em }
.svg-1 .st15 { fill: none; fill-rule: evenodd; font-size: 12px; overflow: visible; stroke-linecap: square; stroke-miterlimit: 3 }</style>
<g v:mid="0" v:index="1" v:groupcontext="foregroundPage">	<title>gst_ai_face_recognition_pipelin</title>	<v:pageproperties v:drawingscale="1" v:pagescale="1" v:drawingunits="19" v:shadowoffsetx="9" v:shadowoffsety="-9"></v:pageproperties>	<g id="group2-1" v:mid="2" v:groupcontext="group">		<title>Sheet.2</title>		<g id="shape3-2" v:mid="3" v:groupcontext="shape" transform="translate(0.374817,-0.375229)">			<title>Sheet.3</title>			<path d="M0 445.03 A5.62513 5.62513 -180 0 0 5.62 450.65 L960.33 450.65 A5.62513 5.62513 -180 0 0 965.96 445.03 L965.96						 6.38 A5.62513 5.62513 -180 0 0 960.33 0.75 L5.62 0.75 A5.62513 5.62513 -180 0 0 0 6.38 L0 445.03 Z" class="st1"></path>		</g>		<g id="shape4-4" v:mid="4" v:groupcontext="shape">			<title>Sheet.4</title>			<path d="M960.71 0.75 C963.6 0.75 965.96 3.11 965.96 6 L965.96 444.65 C965.96 447.55 963.6 449.9 960.71 449.9 L6						 449.9 C3.11 449.9 0.75 447.55 0.75 444.65 L0.75 6 C0.75 3.11 3.11 0.75 6 0.75 L960.71 0.75 ZM960.71						 0 L6 0 C2.69 0 0 2.69 0 6 L0 444.65 C0 447.97 2.69 450.65 6 450.65 L960.71 450.65 C964.02 450.65 966.71						 447.97 966.71 444.65 L966.71 6 C966.71 2.69 964.02 0 960.71 0 Z" class="st2"></path>		</g>	</g>	<g id="shape13-6" v:mid="13" v:groupcontext="shape" transform="translate(696.945,-69.7653) rotate(0.000127971)">		<title>Sheet.13</title>		<path d="M0 450.65 L13.08 450.65" class="st3"></path>	</g>	<g id="shape15-9" v:mid="15" v:groupcontext="shape" transform="translate(522.457,-41.9999)">		<title>Sheet.15</title>		<desc>qtivoverlay</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="40.9531" cy="421.987" width="81.91" height="57.3343"></v:textrect>		<path d="M0 447.65 A3.00007 3.00007 -180 0 0 3 450.65 L78.91 450.65 A3.00007 3.00007 -180 0 0 81.91 447.65 L81.91 396.32					 A3.00007 3.00007 -180 0 0 78.91 393.32 L3 393.32 A3.00007 3.00007 -180 0 0 -0 396.32 L0 447.65 Z" class="st4"></path>		<text x="15.73" y="425.59" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qtivoverlay</text>		</g>	<g id="shape18-12" v:mid="18" v:groupcontext="shape" transform="translate(620.601,-41.9999)">		<title>Sheet.18</title>		<desc>Waylandsink</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="37.871" cy="421.987" width="75.75" height="57.3343"></v:textrect>		<path d="M0 447.65 A3.00007 3.00007 -180 0 0 3 450.65 L72.74 450.65 A3.00007 3.00007 -180 0 0 75.74 447.65 L75.74 396.32					 A3.00007 3.00007 -180 0 0 72.74 393.32 L3 393.32 A3.00007 3.00007 -180 0 0 0 396.32 L0 447.65 Z" class="st6"></path>		<text x="8.35" y="425.59" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Waylandsink</text>		</g>	<g id="group20-15" transform="translate(710.218,-54.0469)" v:mid="20" v:groupcontext="group">		<title>Sheet.20</title>		<g id="group21-16" v:mid="21" v:groupcontext="group">			<title>Sheet.21</title>			<g id="shape22-17" v:mid="22" v:groupcontext="shape" transform="translate(2.9976E-14,-5.89724)">				<title>Sheet.22</title>				<path d="M0 447.65 A3.00007 3.00007 -180 0 0 3 450.65 L26.49 450.65 A3.00007 3.00007 -180 0 0 29.49 447.65 L29.49							 433.01 A3.00007 3.00007 -180 0 0 26.49 430.01 L3 430.01 A3.00007 3.00007 -180 0 0 -0 433.01 L0 447.65							 Z" class="st7"></path>			</g>			<g id="shape23-19" v:mid="23" v:groupcontext="shape" transform="translate(8.84586,5.68434E-14)">				<title>Sheet.23</title>				<path d="M0 450.65 L11.79 450.65" class="st8"></path>			</g>		</g>		<g id="shape24-22" v:mid="24" v:groupcontext="shape" transform="translate(465.397,444.756) rotate(90)">			<title>Sheet.24</title>			<path d="M0 450.65 L5.9 450.65" class="st8"></path>		</g>	</g>	<g id="shape25-25" v:mid="25" v:groupcontext="shape" transform="translate(453.561,-256.597)">		<title>Sheet.25</title>		<desc>tee</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="24.5718" cy="361.125" width="49.15" height="179.057"></v:textrect>		<path d="M0 447.65 A3.00007 3.00007 -180 0 0 3 450.65 L46.14 450.65 A3.00007 3.00007 -180 0 0 49.14 447.65 L49.14 274.6					 A3.00007 3.00007 -180 0 0 46.14 271.6 L3 271.6 A3.00007 3.00007 -180 0 0 -0 274.6 L0 447.65 Z" class="st6"></path>		<text x="17.29" y="364.73" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>tee</text>		</g>	<g id="shape26-28" v:mid="26" v:groupcontext="shape" transform="translate(866.819,-257.495)">		<title>Sheet.26</title>		<desc>qtimetamux</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="42.5912" cy="361.574" width="85.19" height="178.159"></v:textrect>		<path d="M0 447.65 A3.00007 3.00007 -180 0 0 3 450.65 L82.18 450.65 A3.00007 3.00007 -180 0 0 85.18 447.65 L85.18 275.49					 A3.00007 3.00007 -180 0 0 82.18 272.49 L3 272.49 A3.00007 3.00007 -180 0 0 -0 275.49 L0 447.65 Z" class="st4"></path>		<text x="14.57" y="365.17" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qtimetamux</text>		</g>	<g id="group29-31" transform="translate(15.8715,-381.202)" v:mid="29" v:groupcontext="group">		<title>Sheet.29</title>		<g id="shape30-32" v:mid="30" v:groupcontext="shape">			<title>Sheet.30</title>			<path d="M18.43 427.06 L11.06 427.06 L7.37 431.49 L2.95 431.49 C1.32 431.49 0 432.81 0 434.44 L0 447.71 C0 449.33						 1.32 450.65 2.95 450.65 L26.54 450.65 C28.17 450.65 29.49 449.33 29.49 447.71 L29.49 434.44 C29.49 432.81						 28.17 431.49 26.54 431.49 L22.11 431.49 L18.43 427.06 Z" class="st7"></path>		</g>		<g id="shape31-34" v:mid="31" v:groupcontext="shape" transform="translate(10.3202,-7.37155)">			<title>Sheet.31</title>			<ellipse cx="4.42293" cy="446.231" rx="4.42293" ry="4.42293" class="st7"></ellipse>		</g>	</g>	<g id="shape32-36" v:mid="32" v:groupcontext="shape" transform="translate(56.4686,-366.786)">		<title>Sheet.32</title>		<desc>qtiqmmfsrc</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="35.2196" cy="426.082" width="70.44" height="49.1437"></v:textrect>		<path d="M0 447.65 A3.00007 3.00007 -180 0 0 3 450.65 L67.44 450.65 A3.00007 3.00007 -180 0 0 70.44 447.65 L70.44 404.51					 A3.00007 3.00007 -180 0 0 67.44 401.51 L3 401.51 A3.00007 3.00007 -180 0 0 -0 404.51 L0 447.65 Z" class="st4"></path>		<text x="8.01" y="429.68" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qtiqmmfsrc</text>		</g>	<g id="group33-39" transform="translate(126.908,-388.366)" v:mid="33" v:groupcontext="group">		<title>Sheet.33</title>		<g id="shape34-40" v:mid="34" v:groupcontext="shape" transform="translate(0,-2.99179)">			<title>Sheet.34</title>			<path d="M0 450.65 L322.29 450.65" class="st3"></path>		</g>		<g id="shape35-43" v:mid="35" v:groupcontext="shape" transform="translate(321.415,5.68434E-14)">			<title>Sheet.35</title>			<path d="M0 450.65 L5.18 447.66 L0 444.67 L0 450.65 Z" class="st9"></path>		</g>	</g>	<g id="shape36-45" v:mid="36" v:groupcontext="shape" transform="translate(46.0919,-391.358)">		<title>Sheet.36</title>		<path d="M0 450.65 L10.38 450.65" class="st3"></path>	</g>	<g id="group39-48" transform="translate(502.705,-388.366)" v:mid="39" v:groupcontext="group">		<title>Sheet.39</title>		<g id="shape40-49" v:mid="40" v:groupcontext="shape" transform="translate(0,-2.99179)">			<title>Sheet.40</title>			<path d="M0 450.65 L10.75 450.65" class="st3"></path>		</g>		<g id="shape41-52" v:mid="41" v:groupcontext="shape" transform="translate(9.87665,5.68434E-14)">			<title>Sheet.41</title>			<path d="M0 450.65 L5.18 447.66 L0 444.67 L0 450.65 Z" class="st9"></path>		</g>	</g>	<g id="group42-54" transform="translate(502.705,-416.079)" v:mid="42" v:groupcontext="group">		<title>Sheet.42</title>		<g id="shape43-55" v:mid="43" v:groupcontext="shape" transform="translate(0,-2.9918)">			<title>Sheet.43</title>			<path d="M0 450.65 L359.75 450.65" class="st3"></path>		</g>		<g id="shape44-58" v:mid="44" v:groupcontext="shape" transform="translate(358.876,0)">			<title>Sheet.44</title>			<path d="M0 450.65 L5.18 447.66 L0 444.67 L0 450.65 Z" class="st9"></path>		</g>	</g>	<g id="shape45-60" v:mid="45" v:groupcontext="shape" transform="translate(517.819,-370.881)">		<title>Sheet.45</title>		<desc>qtimlvconverter</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="49.1437" cy="430.177" width="98.29" height="40.9531"></v:textrect>		<path d="M0 447.65 A3.00007 3.00007 -180 0 0 3 450.65 L95.29 450.65 A3.00007 3.00007 -180 0 0 98.29 447.65 L98.29 412.7					 A3.00007 3.00007 -180 0 0 95.29 409.7 L3 409.7 A3.00007 3.00007 -180 0 0 -0 412.7 L0 447.65 Z" class="st4"></path>		<text x="12.74" y="433.78" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qtimlvconverter</text>		</g>	<g id="group46-63" transform="translate(616.107,-388.366)" v:mid="46" v:groupcontext="group">		<title>Sheet.46</title>		<g id="shape47-64" v:mid="47" v:groupcontext="shape" transform="translate(0,-2.99179)">			<title>Sheet.47</title>			<path d="M0 450.65 L10.75 450.65" class="st3"></path>		</g>		<g id="shape48-67" v:mid="48" v:groupcontext="shape" transform="translate(9.87664,5.68434E-14)">			<title>Sheet.48</title>			<path d="M0 450.65 L5.18 447.66 L0 444.67 L0 450.65 Z" class="st9"></path>		</g>	</g>	<g id="shape49-69" v:mid="49" v:groupcontext="shape" transform="translate(631.221,-370.881)">		<title>Sheet.49</title>		<desc>qtimlqnn</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="36.6388" cy="430.177" width="73.28" height="40.9531"></v:textrect>		<path d="M0 447.65 A3.00007 3.00007 -180 0 0 3 450.65 L70.28 450.65 A3.00007 3.00007 -180 0 0 73.28 447.65 L73.28 412.7					 A3.00007 3.00007 -180 0 0 70.28 409.7 L3 409.7 A3.00007 3.00007 -180 0 0 -0 412.7 L0 447.65 Z" class="st4"></path>		<text x="16.01" y="433.78" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qtimlqnn</text>		</g>	<g id="group50-72" transform="translate(704.499,-388.366)" v:mid="50" v:groupcontext="group">		<title>Sheet.50</title>		<g id="shape51-73" v:mid="51" v:groupcontext="shape" transform="translate(0,-2.99179)">			<title>Sheet.51</title>			<path d="M0 450.65 L10.75 450.65" class="st3"></path>		</g>		<g id="shape52-76" v:mid="52" v:groupcontext="shape" transform="translate(9.87662,5.68434E-14)">			<title>Sheet.52</title>			<path d="M0 450.65 L5.18 447.66 L0 444.67 L0 450.65 Z" class="st9"></path>		</g>	</g>	<g id="shape53-78" v:mid="53" v:groupcontext="shape" transform="translate(719.613,-370.881)">		<title>Sheet.53</title>		<desc>qtimlpostprocess</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="49.6642" cy="430.177" width="99.33" height="40.9531"></v:textrect>		<path d="M-0 447.65 A3.00007 3.00007 -180 0 0 3 450.65 L96.33 450.65 A3.00007 3.00007 -180 0 0 99.33 447.65 L99.33 412.7					 A3.00007 3.00007 -180 0 0 96.33 409.7 L3 409.7 A3.00007 3.00007 -180 0 0 0 412.7 L0 447.65 Z" class="st4"></path>		<text x="8.8" y="433.78" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qtimlpostprocess</text>		</g>	<g id="group54-81" transform="translate(818.942,-388.366)" v:mid="54" v:groupcontext="group">		<title>Sheet.54</title>		<g id="shape55-82" v:mid="55" v:groupcontext="shape" transform="translate(0,-2.99179)">			<title>Sheet.55</title>			<path d="M0 450.65 L43.51 450.65" class="st3"></path>		</g>		<g id="shape56-85" v:mid="56" v:groupcontext="shape" transform="translate(42.6391,5.68434E-14)">			<title>Sheet.56</title>			<path d="M0 450.65 L5.18 447.66 L0 444.67 L0 450.65 Z" class="st9"></path>		</g>	</g>	<g id="shape60-87" v:mid="60" v:groupcontext="shape" transform="translate(825.3,-391.957)">		<title>Sheet.60</title>		<desc>sink_1</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="31.5" cy="444.354" width="63.01" height="12.6"></v:textrect>		<rect x="0" y="438.054" width="63" height="12.6" class="st10"></rect>		<text x="0" y="447.5" class="st11" v:langid="1033"><v:paragraph></v:paragraph><v:tablist></v:tablist>sink_1</text>		</g>	<g id="shape61-90" v:mid="61" v:groupcontext="shape" transform="translate(825.3,-421.402)">		<title>Sheet.61</title>		<desc>sink_0</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="31.5" cy="444.354" width="63.01" height="12.6"></v:textrect>		<rect x="0" y="438.054" width="63" height="12.6" class="st10"></rect>		<text x="0" y="447.5" class="st11" v:langid="1033"><v:paragraph></v:paragraph><v:tablist></v:tablist>sink_0</text>		</g>	<g id="group63-93" transform="translate(502.705,-291.912)" v:mid="63" v:groupcontext="group">		<title>Sheet.63</title>		<g id="shape64-94" v:mid="64" v:groupcontext="shape" transform="translate(0,-2.99179)">			<title>Sheet.64</title>			<path d="M0 450.65 L10.75 450.65" class="st3"></path>		</g>		<g id="shape65-97" v:mid="65" v:groupcontext="shape" transform="translate(9.87665,-1.13687E-13)">			<title>Sheet.65</title>			<path d="M0 450.65 L5.18 447.66 L0 444.67 L0 450.65 Z" class="st9"></path>		</g>	</g>	<g id="group66-99" transform="translate(502.705,-319.625)" v:mid="66" v:groupcontext="group">		<title>Sheet.66</title>		<g id="shape67-100" v:mid="67" v:groupcontext="shape" transform="translate(0,-2.99179)">			<title>Sheet.67</title>			<path d="M0 450.65 L359.75 450.65" class="st3"></path>		</g>		<g id="shape68-103" v:mid="68" v:groupcontext="shape" transform="translate(358.876,-1.13687E-13)">			<title>Sheet.68</title>			<path d="M0 450.65 L5.18 447.66 L0 444.67 L0 450.65 Z" class="st9"></path>		</g>	</g>	<g id="shape69-105" v:mid="69" v:groupcontext="shape" transform="translate(517.819,-274.427)">		<title>Sheet.69</title>		<desc>qtimlvconverter</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="49.1437" cy="430.177" width="98.29" height="40.9531"></v:textrect>		<path d="M0 447.65 A3.00007 3.00007 -180 0 0 3 450.65 L95.29 450.65 A3.00007 3.00007 -180 0 0 98.29 447.65 L98.29 412.7					 A3.00007 3.00007 -180 0 0 95.29 409.7 L3 409.7 A3.00007 3.00007 -180 0 0 -0 412.7 L0 447.65 Z" class="st4"></path>		<text x="12.74" y="433.78" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qtimlvconverter</text>		</g>	<g id="group70-108" transform="translate(616.107,-291.912)" v:mid="70" v:groupcontext="group">		<title>Sheet.70</title>		<g id="shape71-109" v:mid="71" v:groupcontext="shape" transform="translate(0,-2.99179)">			<title>Sheet.71</title>			<path d="M0 450.65 L10.75 450.65" class="st3"></path>		</g>		<g id="shape72-112" v:mid="72" v:groupcontext="shape" transform="translate(9.87664,-1.13687E-13)">			<title>Sheet.72</title>			<path d="M0 450.65 L5.18 447.66 L0 444.67 L0 450.65 Z" class="st9"></path>		</g>	</g>	<g id="shape73-114" v:mid="73" v:groupcontext="shape" transform="translate(631.221,-274.427)">		<title>Sheet.73</title>		<desc>qtimlqnn</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="36.6388" cy="430.177" width="73.28" height="40.9531"></v:textrect>		<path d="M0 447.65 A3.00007 3.00007 -180 0 0 3 450.65 L70.28 450.65 A3.00007 3.00007 -180 0 0 73.28 447.65 L73.28 412.7					 A3.00007 3.00007 -180 0 0 70.28 409.7 L3 409.7 A3.00007 3.00007 -180 0 0 -0 412.7 L0 447.65 Z" class="st4"></path>		<text x="16.01" y="433.78" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qtimlqnn</text>		</g>	<g id="group74-117" transform="translate(704.499,-291.912)" v:mid="74" v:groupcontext="group">		<title>Sheet.74</title>		<g id="shape75-118" v:mid="75" v:groupcontext="shape" transform="translate(0,-2.99179)">			<title>Sheet.75</title>			<path d="M0 450.65 L10.75 450.65" class="st3"></path>		</g>		<g id="shape76-121" v:mid="76" v:groupcontext="shape" transform="translate(9.87662,-1.13687E-13)">			<title>Sheet.76</title>			<path d="M0 450.65 L5.18 447.66 L0 444.67 L0 450.65 Z" class="st9"></path>		</g>	</g>	<g id="shape77-123" v:mid="77" v:groupcontext="shape" transform="translate(719.613,-274.427)">		<title>Sheet.77</title>		<desc>qtimlpostprocess</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="49.6642" cy="430.177" width="99.33" height="40.9531"></v:textrect>		<path d="M-0 447.65 A3.00007 3.00007 -180 0 0 3 450.65 L96.33 450.65 A3.00007 3.00007 -180 0 0 99.33 447.65 L99.33 412.7					 A3.00007 3.00007 -180 0 0 96.33 409.7 L3 409.7 A3.00007 3.00007 -180 0 0 0 412.7 L0 447.65 Z" class="st4"></path>		<text x="8.8" y="433.78" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qtimlpostprocess</text>		</g>	<g id="group78-126" transform="translate(818.942,-291.912)" v:mid="78" v:groupcontext="group">		<title>Sheet.78</title>		<g id="shape79-127" v:mid="79" v:groupcontext="shape" transform="translate(0,-2.99179)">			<title>Sheet.79</title>			<path d="M0 450.65 L43.51 450.65" class="st3"></path>		</g>		<g id="shape80-130" v:mid="80" v:groupcontext="shape" transform="translate(42.6391,-1.13687E-13)">			<title>Sheet.80</title>			<path d="M0 450.65 L5.18 447.66 L0 444.67 L0 450.65 Z" class="st9"></path>		</g>	</g>	<g id="shape84-132" v:mid="84" v:groupcontext="shape" transform="translate(825.3,-295.503)">		<title>Sheet.84</title>		<desc>sink_1</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="31.5" cy="444.354" width="63.01" height="12.6"></v:textrect>		<rect x="0" y="438.054" width="63" height="12.6" class="st10"></rect>		<text x="0" y="447.5" class="st11" v:langid="1033"><v:paragraph></v:paragraph><v:tablist></v:tablist>sink_1</text>		</g>	<g id="shape85-135" v:mid="85" v:groupcontext="shape" transform="translate(825.3,-324.948)">		<title>Sheet.85</title>		<desc>sink_0</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="31.5" cy="444.354" width="63.01" height="12.6"></v:textrect>		<rect x="0" y="438.054" width="63" height="12.6" class="st10"></rect>		<text x="0" y="447.5" class="st11" v:langid="1033"><v:paragraph></v:paragraph><v:tablist></v:tablist>sink_0</text>		</g>	<g id="shape86-138" v:mid="86" v:groupcontext="shape" transform="translate(425.576,-156.125)">		<title>Sheet.86</title>		<desc>qtimetamux</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="40.9531" cy="421.987" width="81.91" height="57.3343"></v:textrect>		<path d="M0 447.65 A3.00007 3.00007 -180 0 0 3 450.65 L78.91 450.65 A3.00007 3.00007 -180 0 0 81.91 447.65 L81.91 396.32					 A3.00007 3.00007 -180 0 0 78.91 393.32 L3 393.32 A3.00007 3.00007 -180 0 0 0 396.32 L0 447.65 Z" class="st4"></path>		<text x="12.93" y="425.59" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qtimetamux</text>		</g>	<g id="shape88-141" v:mid="88" v:groupcontext="shape" transform="translate(14.501,-156.125)">		<title>Sheet.88</title>		<desc>tee</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="28.6672" cy="421.987" width="57.34" height="57.3343"></v:textrect>		<path d="M0 447.65 A3.00007 3.00007 -180 0 0 3 450.65 L54.33 450.65 A3.00007 3.00007 -180 0 0 57.33 447.65 L57.33 396.32					 A3.00007 3.00007 -180 0 0 54.33 393.32 L3 393.32 A3.00007 3.00007 -180 0 0 -0 396.32 L0 447.65 Z" class="st6"></path>		<text x="21.39" y="425.59" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>tee</text>		</g>	<g id="group92-144" transform="translate(71.7467,-173.61)" v:mid="92" v:groupcontext="group">		<title>Sheet.92</title>		<g id="shape93-145" v:mid="93" v:groupcontext="shape" transform="translate(0,-2.99181)">			<title>Sheet.93</title>			<path d="M0 450.65 L10.75 450.65" class="st3"></path>		</g>		<g id="shape94-148" v:mid="94" v:groupcontext="shape" transform="translate(9.87664,2.27374E-13)">			<title>Sheet.94</title>			<path d="M0 450.65 L5.18 447.66 L0 444.67 L0 450.65 Z" class="st9"></path>		</g>	</g>	<g id="group95-150" transform="translate(71.7467,-201.323)" v:mid="95" v:groupcontext="group">		<title>Sheet.95</title>		<g id="shape96-151" v:mid="96" v:groupcontext="shape" transform="translate(0,-2.99181)">			<title>Sheet.96</title>			<path d="M0 450.65 L347.83 450.65" class="st3"></path>		</g>		<g id="shape97-154" v:mid="97" v:groupcontext="shape" transform="translate(346.953,1.7053E-13)">			<title>Sheet.97</title>			<path d="M0 450.65 L5.18 447.66 L0 444.67 L0 450.65 Z" class="st9"></path>		</g>	</g>	<g id="shape98-156" v:mid="98" v:groupcontext="shape" transform="translate(86.8612,-156.125)">		<title>Sheet.98</title>		<desc>qtimlvconverter</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="49.1437" cy="430.177" width="98.29" height="40.9531"></v:textrect>		<path d="M0 447.65 A3.00007 3.00007 -180 0 0 3 450.65 L95.29 450.65 A3.00007 3.00007 -180 0 0 98.29 447.65 L98.29 412.7					 A3.00007 3.00007 -180 0 0 95.29 409.7 L3 409.7 A3.00007 3.00007 -180 0 0 -0 412.7 L0 447.65 Z" class="st4"></path>		<text x="12.74" y="433.78" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qtimlvconverter</text>		</g>	<g id="group99-159" transform="translate(185.149,-173.61)" v:mid="99" v:groupcontext="group">		<title>Sheet.99</title>		<g id="shape100-160" v:mid="100" v:groupcontext="shape" transform="translate(0,-2.99181)">			<title>Sheet.100</title>			<path d="M0 450.65 L10.75 450.65" class="st3"></path>		</g>		<g id="shape101-163" v:mid="101" v:groupcontext="shape" transform="translate(9.87664,2.27374E-13)">			<title>Sheet.101</title>			<path d="M0 450.65 L5.18 447.66 L0 444.67 L0 450.65 Z" class="st9"></path>		</g>	</g>	<g id="shape102-165" v:mid="102" v:groupcontext="shape" transform="translate(200.263,-156.125)">		<title>Sheet.102</title>		<desc>qtimlqnn</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="36.6388" cy="430.177" width="73.28" height="40.9531"></v:textrect>		<path d="M0 447.65 A3.00007 3.00007 -180 0 0 3 450.65 L70.28 450.65 A3.00007 3.00007 -180 0 0 73.28 447.65 L73.28 412.7					 A3.00007 3.00007 -180 0 0 70.28 409.7 L3 409.7 A3.00007 3.00007 -180 0 0 0 412.7 L0 447.65 Z" class="st4"></path>		<text x="16.01" y="433.78" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qtimlqnn</text>		</g>	<g id="group103-168" transform="translate(273.541,-173.61)" v:mid="103" v:groupcontext="group">		<title>Sheet.103</title>		<g id="shape104-169" v:mid="104" v:groupcontext="shape" transform="translate(0,-2.99181)">			<title>Sheet.104</title>			<path d="M0 450.65 L10.75 450.65" class="st3"></path>		</g>		<g id="shape105-172" v:mid="105" v:groupcontext="shape" transform="translate(9.87664,2.27374E-13)">			<title>Sheet.105</title>			<path d="M0 450.65 L5.18 447.66 L0 444.67 L0 450.65 Z" class="st9"></path>		</g>	</g>	<g id="group106-174" transform="translate(411.894,-173.61)" v:mid="106" v:groupcontext="group">		<title>Sheet.106</title>		<g id="shape107-175" v:mid="107" v:groupcontext="shape" transform="translate(0,-2.99181)">			<title>Sheet.107</title>			<path d="M0 450.65 L10.75 450.65" class="st3"></path>		</g>		<g id="shape108-178" v:mid="108" v:groupcontext="shape" transform="translate(9.87664,2.27374E-13)">			<title>Sheet.108</title>			<path d="M0 450.65 L5.18 447.66 L0 444.67 L0 450.65 Z" class="st9"></path>		</g>	</g>	<g id="shape109-180" v:mid="109" v:groupcontext="shape" transform="translate(288.655,-156.125)">		<title>Sheet.109</title>		<desc>qtimlpostprocess</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="61.6132" cy="430.177" width="123.23" height="40.9531"></v:textrect>		<path d="M0 447.65 A3.00007 3.00007 -180 0 0 3 450.65 L120.23 450.65 A3.00007 3.00007 -180 0 0 123.23 447.65 L123.23					 412.7 A3.00007 3.00007 -180 0 0 120.23 409.7 L3 409.7 A3.00007 3.00007 -180 0 0 -0 412.7 L0 447.65 Z" class="st4"></path>		<text x="20.74" y="433.78" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qtimlpostprocess</text>		</g>	<g id="shape114-183" v:mid="114" v:groupcontext="shape" transform="translate(56.4686,-270.321)">		<title>Sheet.114</title>		<desc>rtspsrc</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="35.2196" cy="426.082" width="70.44" height="49.1437"></v:textrect>		<path d="M0 447.65 A3.00007 3.00007 -180 0 0 3 450.65 L67.44 450.65 A3.00007 3.00007 -180 0 0 70.44 447.65 L70.44 404.51					 A3.00007 3.00007 -180 0 0 67.44 401.51 L3 401.51 A3.00007 3.00007 -180 0 0 0 404.51 L0 447.65 Z" class="st6"></path>		<text x="18.84" y="429.68" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>rtspsrc</text>		</g>	<g id="group115-186" transform="translate(126.908,-291.901)" v:mid="115" v:groupcontext="group">		<title>Sheet.115</title>		<g id="shape116-187" v:mid="116" v:groupcontext="shape" transform="translate(0,-2.99181)">			<title>Sheet.116</title>			<path d="M0 450.65 L18.94 450.65" class="st3"></path>		</g>		<g id="shape117-190" v:mid="117" v:groupcontext="shape" transform="translate(18.0673,2.27374E-13)">			<title>Sheet.117</title>			<path d="M0 450.65 L5.18 447.66 L0 444.67 L0 450.65 Z" class="st9"></path>		</g>	</g>	<g id="shape118-192" v:mid="118" v:groupcontext="shape" transform="translate(46.0919,-294.893)">		<title>Sheet.118</title>		<path d="M0 450.65 L10.38 450.65" class="st3"></path>	</g>	<g id="shape119-195" v:mid="119" v:groupcontext="shape" transform="translate(150.213,-270.321)">		<title>Sheet.119</title>		<desc>rtph264 depay</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="38.9054" cy="426.082" width="77.82" height="49.1437"></v:textrect>		<path d="M0 447.65 A3.00007 3.00007 -180 0 0 3 450.65 L74.81 450.65 A3.00007 3.00007 -180 0 0 77.81 447.65 L77.81 404.51					 A3.00007 3.00007 -180 0 0 74.81 401.51 L3 401.51 A3.00007 3.00007 -180 0 0 0 404.51 L0 447.65 Z" class="st6"></path>		<text x="20.73" y="422.03" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>rtph264<v:newlinechar></v:newlinechar><tspan x="24.88" dy="1.329em" class="st12">depay</tspan></text>		</g>	<g id="group120-199" transform="translate(228.024,-291.901)" v:mid="120" v:groupcontext="group">		<title>Sheet.120</title>		<g id="shape121-200" v:mid="121" v:groupcontext="shape" transform="translate(0,-2.99181)">			<title>Sheet.121</title>			<path d="M0 450.65 L18.94 450.65" class="st3"></path>		</g>		<g id="shape122-203" v:mid="122" v:groupcontext="shape" transform="translate(18.0673,2.27374E-13)">			<title>Sheet.122</title>			<path d="M0 450.65 L5.18 447.66 L0 444.67 L0 450.65 Z" class="st9"></path>		</g>	</g>	<g id="shape123-205" v:mid="123" v:groupcontext="shape" transform="translate(251.329,-270.321)">		<title>Sheet.123</title>		<desc>h264parse</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="38.9054" cy="426.082" width="77.82" height="49.1437"></v:textrect>		<path d="M0 447.65 A3.00007 3.00007 -180 0 0 3 450.65 L74.81 450.65 A3.00007 3.00007 -180 0 0 77.81 447.65 L77.81 404.51					 A3.00007 3.00007 -180 0 0 74.81 401.51 L3 401.51 A3.00007 3.00007 -180 0 0 0 404.51 L0 447.65 Z" class="st6"></path>		<text x="14.1" y="429.68" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>h264parse</text>		</g>	<g id="group124-208" transform="translate(329.14,-291.901)" v:mid="124" v:groupcontext="group">		<title>Sheet.124</title>		<g id="shape125-209" v:mid="125" v:groupcontext="shape" transform="translate(0,-2.99181)">			<title>Sheet.125</title>			<path d="M0 450.65 L18.94 450.65" class="st3"></path>		</g>		<g id="shape126-212" v:mid="126" v:groupcontext="shape" transform="translate(18.0673,2.27374E-13)">			<title>Sheet.126</title>			<path d="M0 450.65 L5.18 447.66 L0 444.67 L0 450.65 Z" class="st9"></path>		</g>	</g>	<g id="shape127-214" v:mid="127" v:groupcontext="shape" transform="translate(352.445,-270.321)">		<title>Sheet.127</title>		<desc>V4l2h264dec</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="38.9054" cy="426.082" width="77.82" height="49.1437"></v:textrect>		<path d="M-0 447.65 A3.00007 3.00007 -180 0 0 3 450.65 L74.81 450.65 A3.00007 3.00007 -180 0 0 77.81 447.65 L77.81 404.51					 A3.00007 3.00007 -180 0 0 74.81 401.51 L3 401.51 A3.00007 3.00007 -180 0 0 0 404.51 L0 447.65 Z" class="st6"></path>		<text x="8.17" y="429.68" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>V4l2h264dec</text>		</g>	<g id="group128-217" transform="translate(430.256,-291.901)" v:mid="128" v:groupcontext="group">		<title>Sheet.128</title>		<g id="shape129-218" v:mid="129" v:groupcontext="shape" transform="translate(0,-2.99181)">			<title>Sheet.129</title>			<path d="M0 450.65 L18.94 450.65" class="st3"></path>		</g>		<g id="shape130-221" v:mid="130" v:groupcontext="shape" transform="translate(18.0673,2.27374E-13)">			<title>Sheet.130</title>			<path d="M0 450.65 L5.18 447.66 L0 444.67 L0 450.65 Z" class="st9"></path>		</g>	</g>	<g id="group135-223" transform="translate(15.8715,-278.348)" v:mid="135" v:groupcontext="group">		<title>Sheet.135</title>		<g id="shape136-224" v:mid="136" v:groupcontext="shape" transform="translate(11.7943,-11.639)">			<title>Sheet.136</title>			<path d="M0 442.76 C0 442.15 0.5 441.65 1.11 441.65 C1.31 441.65 1.51 441.71 1.68 441.82 L7.09 445.13 C7.61 445.45						 7.77 446.13 7.45 446.65 C7.36 446.8 7.23 446.93 7.09 447.02 L1.68 450.33 C1.16 450.65 0.48 450.49 0.16						 449.97 C0.06 449.8 0 449.6 0 449.39 L0 442.76 Z" class="st7"></path>		</g>		<g id="shape137-226" v:mid="137" v:groupcontext="shape" transform="translate(7.37155,5.68434E-14)">			<title>Sheet.137</title>			<path d="M0 450.65 L14.74 450.65 L0 450.65 Z" class="st13"></path>			<path d="M0 450.65 L14.74 450.65" class="st8"></path>		</g>		<g id="shape138-229" v:mid="138" v:groupcontext="shape" transform="translate(5.9952E-15,-5.89724)">			<title>Sheet.138</title>			<path d="M0 449.15 A1.50003 1.50003 -180 0 0 1.5 450.65 L27.99 450.65 A1.50003 1.50003 -180 0 0 29.49 449.15 L29.49						 431.51 A1.50003 1.50003 -180 0 0 27.99 430.01 L1.5 430.01 A1.50003 1.50003 -180 0 0 -0 431.51 L0 449.15						 Z" class="st7"></path>		</g>	</g>	<g id="group139-231" transform="translate(42.366,-213.46)" v:mid="139" v:groupcontext="group">		<title>Sheet.139</title>		<g id="shape140-232" v:mid="140" v:groupcontext="shape" transform="translate(2.99178,-4.30575)">			<title>Sheet.140</title>			<path d="M864.05 411.82 L864.05 429.24 L0 429.24 L0 450.65 L864.05 411.82 Z" class="st13"></path>			<path d="M864.05 411.82 L864.05 429.24 L0 429.24 L0 450.65" class="st3"></path>		</g>		<g id="shape141-235" v:mid="141" v:groupcontext="shape">			<title>Sheet.141</title>			<path d="M0 445.47 L2.99 450.65 L5.98 445.47 L0 445.47 Z" class="st9"></path>		</g>	</g>	<g id="shape143-237" v:mid="143" v:groupcontext="shape" transform="translate(14.501,-41.9999)">		<title>Sheet.143</title>		<desc>tee</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="28.6672" cy="421.987" width="57.34" height="57.3343"></v:textrect>		<path d="M0 447.65 A3.00007 3.00007 -180 0 0 3 450.65 L54.33 450.65 A3.00007 3.00007 -180 0 0 57.33 447.65 L57.33 396.32					 A3.00007 3.00007 -180 0 0 54.33 393.32 L3 393.32 A3.00007 3.00007 -180 0 0 0 396.32 L0 447.65 Z" class="st6"></path>		<text x="21.39" y="425.59" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>tee</text>		</g>	<g id="shape146-240" v:mid="146" v:groupcontext="shape" transform="translate(425.576,-41.9999)">		<title>Sheet.146</title>		<desc>qtimetamux</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="40.9531" cy="421.987" width="81.91" height="57.3343"></v:textrect>		<path d="M0 447.65 A3.00007 3.00007 -180 0 0 3 450.65 L78.91 450.65 A3.00007 3.00007 -180 0 0 81.91 447.65 L81.91 396.32					 A3.00007 3.00007 -180 0 0 78.91 393.32 L3 393.32 A3.00007 3.00007 -180 0 0 -0 396.32 L0 447.65 Z" class="st4"></path>		<text x="12.93" y="425.59" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qtimetamux</text>		</g>	<g id="group149-243" transform="translate(71.7467,-59.4847)" v:mid="149" v:groupcontext="group">		<title>Sheet.149</title>		<g id="shape150-244" v:mid="150" v:groupcontext="shape" transform="translate(0,-2.99181)">			<title>Sheet.150</title>			<path d="M0 450.65 L10.75 450.65" class="st3"></path>		</g>		<g id="shape151-247" v:mid="151" v:groupcontext="shape" transform="translate(9.87664,0)">			<title>Sheet.151</title>			<path d="M0 450.65 L5.18 447.66 L0 444.67 L0 450.65 Z" class="st9"></path>		</g>	</g>	<g id="group152-249" transform="translate(71.7467,-87.1978)" v:mid="152" v:groupcontext="group">		<title>Sheet.152</title>		<g id="shape153-250" v:mid="153" v:groupcontext="shape" transform="translate(0,-2.99181)">			<title>Sheet.153</title>			<path d="M0 450.65 L347.83 450.65" class="st3"></path>		</g>		<g id="shape154-253" v:mid="154" v:groupcontext="shape" transform="translate(346.953,0)">			<title>Sheet.154</title>			<path d="M0 450.65 L5.18 447.66 L0 444.67 L0 450.65 Z" class="st9"></path>		</g>	</g>	<g id="shape155-255" v:mid="155" v:groupcontext="shape" transform="translate(86.8612,-41.9999)">		<title>Sheet.155</title>		<desc>qtimlvconverter</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="49.1437" cy="430.177" width="98.29" height="40.9531"></v:textrect>		<path d="M0 447.65 A3.00007 3.00007 -180 0 0 3 450.65 L95.29 450.65 A3.00007 3.00007 -180 0 0 98.29 447.65 L98.29 412.7					 A3.00007 3.00007 -180 0 0 95.29 409.7 L3 409.7 A3.00007 3.00007 -180 0 0 0 412.7 L0 447.65 Z" class="st4"></path>		<text x="12.74" y="433.78" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qtimlvconverter</text>		</g>	<g id="group156-258" transform="translate(185.149,-59.4847)" v:mid="156" v:groupcontext="group">		<title>Sheet.156</title>		<g id="shape157-259" v:mid="157" v:groupcontext="shape" transform="translate(0,-2.99181)">			<title>Sheet.157</title>			<path d="M0 450.65 L10.75 450.65" class="st3"></path>		</g>		<g id="shape158-262" v:mid="158" v:groupcontext="shape" transform="translate(9.87664,0)">			<title>Sheet.158</title>			<path d="M0 450.65 L5.18 447.66 L0 444.67 L0 450.65 Z" class="st9"></path>		</g>	</g>	<g id="shape159-264" v:mid="159" v:groupcontext="shape" transform="translate(200.263,-41.9999)">		<title>Sheet.159</title>		<desc>qtimlqnn</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="36.6388" cy="430.177" width="73.28" height="40.9531"></v:textrect>		<path d="M0 447.65 A3.00007 3.00007 -180 0 0 3 450.65 L70.28 450.65 A3.00007 3.00007 -180 0 0 73.28 447.65 L73.28 412.7					 A3.00007 3.00007 -180 0 0 70.28 409.7 L3 409.7 A3.00007 3.00007 -180 0 0 0 412.7 L0 447.65 Z" class="st4"></path>		<text x="16.01" y="433.78" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qtimlqnn</text>		</g>	<g id="group160-267" transform="translate(273.541,-59.4847)" v:mid="160" v:groupcontext="group">		<title>Sheet.160</title>		<g id="shape161-268" v:mid="161" v:groupcontext="shape" transform="translate(0,-2.99181)">			<title>Sheet.161</title>			<path d="M0 450.65 L10.75 450.65" class="st3"></path>		</g>		<g id="shape162-271" v:mid="162" v:groupcontext="shape" transform="translate(9.87664,0)">			<title>Sheet.162</title>			<path d="M0 450.65 L5.18 447.66 L0 444.67 L0 450.65 Z" class="st9"></path>		</g>	</g>	<g id="group163-273" transform="translate(410.244,-59.4847)" v:mid="163" v:groupcontext="group">		<title>Sheet.163</title>		<g id="shape164-274" v:mid="164" v:groupcontext="shape" transform="translate(0,-2.99181)">			<title>Sheet.164</title>			<path d="M0 450.65 L10.75 450.65" class="st3"></path>		</g>		<g id="shape165-277" v:mid="165" v:groupcontext="shape" transform="translate(9.87664,0)">			<title>Sheet.165</title>			<path d="M0 450.65 L5.18 447.66 L0 444.67 L0 450.65 Z" class="st9"></path>		</g>	</g>	<g id="shape166-279" v:mid="166" v:groupcontext="shape" transform="translate(288.655,-41.9999)">		<title>Sheet.166</title>		<desc>qtimlpostprocess</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="60.7941" cy="430.177" width="121.59" height="40.9531"></v:textrect>		<path d="M0 447.65 A3.00007 3.00007 -180 0 0 3 450.65 L118.59 450.65 A3.00007 3.00007 -180 0 0 121.59 447.65 L121.59					 412.7 A3.00007 3.00007 -180 0 0 118.59 409.7 L3 409.7 A3.00007 3.00007 -180 0 0 0 412.7 L0 447.65 Z" class="st4"></path>		<text x="19.93" y="433.78" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qtimlpostprocess</text>		</g>	<g id="group170-282" transform="translate(42.366,-99.3343)" v:mid="170" v:groupcontext="group">		<title>Sheet.170</title>		<g id="shape171-283" v:mid="171" v:groupcontext="shape" transform="translate(2.99178,-4.30573)">			<title>Sheet.171</title>			<path d="M420.1 398.17 L420.1 426.56 L0 426.56 L0 450.65 L420.1 398.17 Z" class="st13"></path>			<path d="M420.1 398.17 L420.1 426.56 L0 426.56 L0 450.65" class="st3"></path>		</g>		<g id="shape172-286" v:mid="172" v:groupcontext="shape">			<title>Sheet.172</title>			<path d="M0 445.47 L2.99 450.65 L5.98 445.47 L0 445.47 Z" class="st9"></path>		</g>	</g>	<g id="group173-288" transform="translate(507.399,-67.6753)" v:mid="173" v:groupcontext="group">		<title>Sheet.173</title>		<g id="shape174-289" v:mid="174" v:groupcontext="shape" transform="translate(0,-2.99176)">			<title>Sheet.174</title>			<path d="M0 450.65 L10.75 450.65" class="st3"></path>		</g>		<g id="shape175-292" v:mid="175" v:groupcontext="shape" transform="translate(9.87664,1.13687E-13)">			<title>Sheet.175</title>			<path d="M0 450.65 L5.18 447.66 L0 444.67 L0 450.65 Z" class="st9"></path>		</g>	</g>	<g id="group176-294" transform="translate(604.363,-67.6753)" v:mid="176" v:groupcontext="group">		<title>Sheet.176</title>		<g id="shape177-295" v:mid="177" v:groupcontext="shape" transform="translate(0,-2.99176)">			<title>Sheet.177</title>			<path d="M0 450.65 L10.75 450.65" class="st3"></path>		</g>		<g id="shape178-298" v:mid="178" v:groupcontext="shape" transform="translate(9.87664,1.13687E-13)">			<title>Sheet.178</title>			<path d="M0 450.65 L5.18 447.66 L0 444.67 L0 450.65 Z" class="st9"></path>		</g>	</g>	<g id="group179-300" transform="translate(841.876,-14.7814)" v:mid="179" v:groupcontext="group">		<title>Sheet.179</title>		<g id="shape7-301" v:mid="7" v:groupcontext="shape" transform="translate(15.1883,5.68434E-14)">			<title>Sheet.7</title>			<desc>Qualcomm</desc>			<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>			<v:textrect cx="26.9014" cy="444.354" width="53.81" height="12.6"></v:textrect>			<rect x="0" y="438.054" width="53.8027" height="12.6" class="st10"></rect>			<text x="-0" y="447.5" class="st11" v:langid="1033"><v:paragraph></v:paragraph><v:tablist></v:tablist>Qualcomm  </text>			</g>		<g id="shape8-304" v:mid="8" v:groupcontext="shape" transform="translate(6.29496E-14,-0.218619)">			<title>Sheet.8</title>			<path d="M0 449.15 A1.50003 1.50003 -180 0 0 1.5 450.65 L10.5 450.65 A1.50003 1.50003 -180 0 0 12 449.15 L12 440.15						 A1.50003 1.50003 -180 0 0 10.5 438.65 L1.5 438.65 A1.50003 1.50003 -180 0 0 -0 440.15 L0 449.15 Z" class="st4"></path>		</g>		<g id="shape10-306" v:mid="10" v:groupcontext="shape" transform="translate(89.1246,5.68434E-14)">			<title>Sheet.10</title>			<desc>开源</desc>			<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>			<v:textrect cx="10.5" cy="444.354" width="21.01" height="12.6"></v:textrect>			<rect x="0" y="438.054" width="21" height="12.6" class="st10"></rect>			<text x="0" y="447.85" class="st14" v:langid="1033"><v:paragraph></v:paragraph><v:tablist></v:tablist>开源</text>			</g>		<g id="shape11-309" v:mid="11" v:groupcontext="shape" transform="translate(73.9363,-0.218619)">			<title>Sheet.11</title>			<path d="M0 449.15 A1.50003 1.50003 -180 0 0 1.5 450.65 L10.5 450.65 A1.50003 1.50003 -180 0 0 12 449.15 L12 440.15						 A1.50003 1.50003 -180 0 0 10.5 438.65 L1.5 438.65 A1.50003 1.50003 -180 0 0 -0 440.15 L0 449.15 Z" class="st6"></path>		</g>	</g></g>
</svg>

有关 pipeline 流中使用的插件的信息，请参见 [Pipeline 流](https://docs.qualcomm.com/doc/80-70022-50SC/topic/gst-ai-face-recognition.html#gst-ai-face-recognition__section_mrl_x4m_qdc)。

## 示例模型和标签文件

Table : gst-ai-face-detection 的示例模型和标签文件

| Runtime | 模型文件 | 标签文件 |
| :--- | :--- | :--- |
| Qualcomm AI Engine direct 和 LiteRT | <ul class="ul" id="gst-ai-face-recognition__ul_bdk_hwm_qdc"><br>                                    <li class="li"><var class="keyword varname">face_det_lite_quantized.tflite</var></li><br><br>                                    <li class="li"><var class="keyword varname">facemap_3dmm_quantized.tflite</var></li><br><br>                                    <li class="li"><var class="keyword varname">face_attrib_net_quantized.tflite</var></li><br><br>                                    <li class="li"><var class="keyword varname">face_det_lite_quantized.bin</var></li><br><br>                                    <li class="li"><var class="keyword varname">facemap_3dmm_quantized.bin</var></li><br><br>                                    <li class="li"><var class="keyword varname">face_attrib_net_quantized.bin</var></li><br><br>                                </ul> | <ul class="ul" id="gst-ai-face-recognition__ul_q4l_kwm_qdc"><br>                                    <li class="li"><var class="keyword varname">face_detection.json</var></li><br><br>                                    <li class="li"><var class="keyword varname">face_recognition_settings.json</var></li><br><br>                                    <li class="li"><var class="keyword varname">face_recognition.json</var></li><br><br>                                    <li class="li"><em class="ph i"><var class="keyword varname">facemap_3dmm_settings.json</var></em></li><br><br>                                </ul> |

- 下载以下 w8a8 精度的 LiteRT 模型。以下路径中的模型文件名可能会更改。确保在运行命令时更新模型名称。
    - [face_det_quantized](https://aihub.qualcomm.com/iot/models/face_det_lite?searchTerm=fac)
    - [face_attrib_net_quantized](https://aihub.qualcomm.com/iot/models/face_attrib_net?searchTerm=fac)
- 将这些模型推送到目标设备上的 /etc/models目录。

        scp face_det_lite-lightweight-face-detection.tflite root@<IP address of target device>:/etc/modelsCopy to clipboard

        scp face_attrib_net-facial-attribute.tflite root@<IP address of target device>:/etc/modelsCopy to clipboard

Note: 对于 Ubuntu Server，将模型文件复制到用户主文件夹，然后使用 `sudo` 命令将模型文件复制到 `/etc/models` 目录。

。

## 注册人脸进行面部识别

在运行 gst-ai-face-recognition 应用程序之前，您可以注册一张人脸，用于进行安全验证和身份验证。

1. 确保您已完成[前提条件](https://docs.qualcomm.com/doc/80-70022-50SC/topic/download-model-and-label-files.html)。
2. 要注册人脸，请在目标设备的 shell 使用以下 gst-pipeline：

        gst-pipeline-app -e \
        qtimlvconverter name=stage_01_preproc mode=image-batch-non-cumulative \
        qtimltflite name=stage_01_inference model=/etc/models/face_det_lite-lightweight-face-detection.tflite delegate=external external-delegate-path=libQnnTFLiteDelegate.so \
        external-delegate-options="QNNExternalDelegate,backend_type=htp;" \
        qtimlpostprocess name=stage_01_postproc settings="{\"confidence\": 40.0}" results=4 module=qfd labels=/etc/labels/face_detection.json \
        qtimlvconverter name=stage_03_preproc mode=roi-batch-cumulative \
        qtimltflite name=stage_03_inference model=/etc/models/face_attrib_net-facial-attribute.tflite delegate=external external-delegate-path=libQnnTFLiteDelegate.so \
        external-delegate-options="QNNExternalDelegate,backend_type=htp;" \
        qtiqmmfsrc video_0::type=video name=camsrc ! video/x-raw,format=NV12,width=1920,height=1080 ! queue ! waylandsink fullscreen=true sync=false \
        camsrc.image_1 ! video/x-raw,width=1920,height=1080 ! qtivtransform ! video/x-raw,format=NV12 ! tee name=t_split_1 \
        t_split_1. ! queue ! metamux_1. \
        t_split_1. ! queue ! stage_01_preproc. stage_01_preproc. ! queue ! stage_01_inference. stage_01_inference. ! queue ! \
        stage_01_postproc. stage_01_postproc. ! text/x-raw ! queue ! metamux_1. \
        qtimetamux name=metamux_1 ! queue ! tee name=t_split_3 \
        t_split_3. ! queue ! stage_03_preproc. stage_03_preproc. ! queue ! stage_03_inference. stage_03_inference. ! queue ! \
        multifilesink location=/etc/data/tensor_%d.bin sync=true async=false enable-last-sample=falseCopy to clipboard

    随即显示一个选项列表。
3. 要准备采集人脸图像，请执行以下操作：
    1. 从列表中选择以下选项：
        1. `(3)PLAYING`：将 pipeline 切换至 Playing 状态。
        2. `(p)Plugin Mode`➔ `(26)camsrc`➔ `(70)capture-image`：使用摄像头源采集图像。
    2. 使用显示器上的实时预览功能，面向摄像头，确保摄像头指向正前方，并且画面中只有一个人。
    3. 在终端中，为以下值输入 1：
        1. 为 `arg0`输入 `GstImageCaptureMode`。
        2. 为 `arg1`输入 `guint`。
4. 要采集脸部所有侧面，请选择 `capture-image`，并对每侧执行以下操作：
    1. 左侧和右侧：将头部左转 40°，同时保持特征点清晰可见，然后重复步骤 3 和 4。将头部右转 (40°)，然后重复上述步骤。
    2. 向上和向下：抬头 30°，同时保持特征点清晰可见，然后重复步骤 3 和 4。低头 (30°)，然后重复上述步骤。
5. 要停止 pipeline，请使用 `(b)Back`和 `(q)Quit`。
    运行 pipeline 后，会创建五个单独的张量 bin（tensor\_0.bin至 tensor\_4.bin），用于记录每一侧的面部属性。
6. 在目标设备上，转到 /etc/data/，找到这些张量 bin。要将 bin 从目标设备拉取到 Linux 主机：
    - 对于 Qualcomm Linux，运行以下命令：

            scp root@<IP-Address>:/etc/data/tensor_0.bin .Copy to clipboard

            scp root@<IP-Address>:/etc/data/tensor_1.bin .Copy to clipboard

            scp root@<IP-Address>:/etc/data/tensor_2.bin .Copy to clipboard

            scp root@<IP-Address>:/etc/data/tensor_3.bin .Copy to clipboard

            scp root@<IP-Address>:/etc/data/tensor_4.bin .Copy to clipboard
    - 对于 Ubuntu Server，使用以下参考命令：

            scp ubuntu@<IP-Address>:/etc/data/tensor_<index>.binCopy to clipboard
7. 要将包含所有面部属性的张量 bin 合并为一张连贯的图像，请在 Linux 主机上的张量 bin 目录中下载并运行 facedb.py脚本。
    1. 下载 facedb.py脚本：

            curl -L -O https://raw.githubusercontent.com/quic/sample-apps-for-qualcomm-linux/refs/heads/main/scripts/facedb.pyCopy to clipboard
    2. 运行该脚本。请注意，<var class="keyword varname">&lt;Name of the person&gt;</var>区分大小写和样式。请确保始终使用相同的名称。

            python3 ./facedb.py "<Name of the person>" 512 32 tensor_0.bin tensor_1.bin tensor_2.bin tensor_3.bin tensor_4.binCopy to clipboard

    已创建 face.bin二进制文件。
8. 将 face.bin二进制文件推送到 /etc/data 目录，并将其重命名为 face0.bin。

        scp face.bin root@<IP address of target device>:/etc/data/face0.binCopy to clipboard

    对于 Ubuntu Server，将 `face.bin` 二进制文件复制到用户主目录，然后使用 `sudo` 命令将其复制到 `/etc/models` 目录。
9. 要生成 face\_recognition.json文件并将新人注册到数据库中，请使用以下双人人脸注册的参考标签文件：

        [
          {"id": 0, "color": "0x00FF00FF", "label": "<Name of Person>"},
          {"id": 1, "color": "0xFFFF00FF", "label": "<Name of Person>"}
        ]Copy to clipboard

Note: 根据列表中的编号更新 ID 字段。如果要注册更多人脸，请在 face\_recognition.json文件中另起新行添加对应结构。
10. 要生成 face\_recognition\_settings.json 文件，请使用以下参考标签文件：

        {
          "confidence": 51.0,
            "databases":[
              {"id":  0, "database": "/etc/data/face0.bin"},
              {"id":  1, "database": "/etc/data/face1.bin"}
            ]
        }Copy to clipboard
11. 将更新的 face\_recognition.json 和 face\_recognition\_settings.json 文件推送到目标设备上的 /etc/labels 目录。

        scp face_recognition.json root@<IP address of target device>:/etc/labelsCopy to clipboard

        scp face_recognition_settings.json root@<IP address of target device>:/etc/labelsCopy to clipboard

    对于 Ubuntu Server，将 `face_recognition.json` 和 face\_recognition\_settings.json 文件复制到用户 `home` 文件夹，然后使用 `sudo` 命令将其复制到 `/etc/labels` 目录。

## 在目标设备上运行应用程序

Note: 以下命令提供默认模型和标签路径。如果您的文件夹结构不同，请替换命令行参数中的默认路径。参见[示例模型和标签文件](https://docs.qualcomm.com/doc/80-70022-50SC/topic/gst-ai-face-recognition.html#gst-ai-face-recognition__section_bxr_x4m_qdc)。

示例应用程序使用 `/etc/configs/config-face-recognition.json`文件读取输入参数。

要创建自己的配置 JSON 文件，请使用 [config-face-recognition.json](https://git.codelinaro.org/clo/le/platform/vendor/qcom-opensource/gst-plugins-qti-oss/-/tree/imsdk.lnx.2.0.0.r2-rel/gst-sample-apps/gst-ai-face-recognition?ref_type=heads)作为参考。
1. 根据模型、输入流和其他属性更新 config JSON 文件。关于更多详细信息，请参阅 [Config JSON 字段说明](https://docs.qualcomm.com/doc/80-70022-50SC/topic/gst-ai-face-recognition.html#gst-ai-face-recognition__section_qjx_hqq_32c)。
2. 使用以下格式的 `/etc/configs/config-face-recognition.json`文件：

        {
        "ml-framework": "<qnn or tflite>",
        "face-detection-model": "<path for face detection model file>", 
        "face-landmark-model":"<path for face landmark model file>",
        “face-recognition-model”:”<path for face recognition model file>”,
        "face-detection-labels":”<path for face detection labels file>”,
        "face-recognition-labels":”<path for face recognition labels file>”,
        "face-recognition-settings": "<Path of face recognition settings>",
        "facemap-3dmm-settings": "<Path of facemap-3dmm settings>"
        }Copy to clipboard

    例如，使用 LiteRT、自定义模型、自定义标签文件运行应用：

        {
          "ml-framework":"tflite",
          "face-detection-model":"/etc/models/face_det_lite_quantized.tflite",
          "face-landmark-model":"/etc/models/facemap_3dmm_quantized.tflite",
          "face-recognition-model":"/etc/models/face_attrib_net_quantized.tflite",
          "face-detection-labels": "/etc/labels/face_detection.json",
          "face-recognition-labels": "/etc/labels/face_recognition.json",
          "face-recognition-settings": "/etc/labels/face_recognition_settings.json",
          "facemap-3dmm-settings": "/etc/labels/facemap_3dmm_settings.json"
        }Copy to clipboard
3. 运行 gst-ai-face-recognition 应用程序：

        gst-ai-face-recognition --config-file=/etc/configs/config-face-recognition.jsonCopy to clipboard
4. 请在 SSH shell 中运行以下命令，以显示可用的帮助选项：

        gst-ai-face-recognition -hCopy to clipboard
5. 要停止用例，请按 CTRL +
                            C。

## 预期输出
![](data:image/jpeg;base64,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)

## Pipeline 流

下表列出了人脸识别 pipeline 中使用的插件：| 插件 | 说明 |
| --- | --- |
| 摄像头源：[qtiqmmfsrc](https://docs.qualcomm.com/doc/80-70022-50SC/topic/qtiqmmfsrc.html) | <ul class="ul" id="gst-ai-face-recognition__ul_zyl_gj1_mcc"><br>                                    <li class="li">从摄像头采集实时流。</li><br><br>                                    <li class="li">使用 tee 拆分流进行推理。</li><br><br>                                </ul> |
| 文件源：filesrc | <ul class="ul" id="gst-ai-face-recognition__ul_z1z_x4f_w1c"><br>                                    <li class="li">使用 filesrc 采集视频流，然后使用 qtdemux 对视频流进行解复用。</li><br><br>                                    <li class="li">使用 tee 拆分流进行推理。</li><br><br>                                </ul> |
| RTSP 源：rtspsrc | <ul class="ul" id="gst-ai-face-recognition__ul_vsj_2r4_tbc"><br>                                    <li class="li">使用 rtspsrc 采集 RTSP 流，然后使用 rtph264depay 进行视频提取。</li><br><br>                                    <li class="li">使用 tee 拆分流进行推理。</li><br><br>                                </ul> |
| h264parse | 渲染 H.264 视频。 |
| [v4l2h264dec](https://docs.qualcomm.com/doc/80-70022-50SC/topic/v4l2h264dec.html) | 解码视频 |
| [qtimlvconverter](https://docs.qualcomm.com/doc/80-70022-50SC/topic/qtimlvconverter.html) | <ol class="ol" id="gst-ai-face-recognition__ol_j34_ddg_q1c"><br>                                    <li class="li">在其接收端口上接收视频流。</li><br><br>                                    <li class="li">对流数据执行以下预处理。当模型需要浮点值作为输入时，会执行此预处理。<ol class="ol" type="a" id="gst-ai-face-recognition__ol_m5z_cpr_lbc"><br>                                            <li class="li">颜色转换</li><br><br>                                            <li class="li">缩放（放大或缩小）</li><br><br>                                            <li class="li">归一化</li><br><br>                                        </ol><br></li><br><br>                                    <li class="li">将预处理的视频流转换为其发送端口上的张量数据流。 </li><br><br>                                </ol><br><br>                                <br>张量数据流用于 pipeline 后期的推理。 |
| [qtimlqnn](https://docs.qualcomm.com/doc/80-70022-50SC/topic/qtimlqnn.html) | 充当 Qualcomm Neural Network 模型的推理插件。<ol class="ol" id="gst-ai-face-recognition__ol_mbk_pl3_4dc"><br>                                    <li class="li">推理 runtime 在其接收端口上接收到张量数据后，会运行推理。</li><br><br>                                    <li class="li">生成一个张量数据流，并在其发送端口上显示推理结果。</li><br><br>                                </ol> |
| qtimlpostprocess | <ul class="ul" id="gst-ai-face-recognition__ul_lwr_xl3_4dc"><br>                                    <li class="li">处理来自任何人脸检测模型的推理结果。</li><br><br>                                    <li class="li">将阈值应用于所选结果数。</li><br><br>                                </ul> |
| [qtimetamux](https://docs.qualcomm.com/doc/80-70022-50SC/topic/qtimetamux.html) | <ul class="ul" id="gst-ai-face-recognition__ul_cvw_j3n_qdc"><br>                                    <li class="li">从 qtimlpostprocess 接收人脸检测模型的输出并将其复用。</li><br><br>                                    <li class="li">从 qtimlpostprocess 接收面部姿态的输出并将其复用。</li><br><br>                                </ul> |
| tee | 分割流以进行推理。 |
| qtimlpostprocess 用于姿态估计 | 使用 lite-3dmm 模块进行人脸姿态识别。 |
| qtimlpostprocess 用于分类模型 | 使用 qfr 模块接收来自 qtimetamux 的流并对人脸进行分类。 |
| [qtivoverlay](https://docs.qualcomm.com/doc/80-70022-50SC/topic/qtioverlay.html) | <ol class="ol" id="gst-ai-face-recognition__ol_wst_y5l_vbc"><br>                                    <li class="li">接收复用流。</li><br><br>                                    <li class="li">将边界框叠加在流上。</li><br><br>                                </ol> |
| [Waylandsink](https://docs.qualcomm.com/doc/80-70022-50SC/topic/waylandsink.html) | <ol class="ol" id="gst-ai-face-recognition__ol_kjr_fvr_lbc"><br>                                    <li class="li">Waylandsink 将其接收端口上接收的视频流提交给 Weston。</li><br><br>                                    <li class="li">Weston 在本地显示器上渲染视频流。</li><br><br>                                </ol> |

## Config JSON 字段说明

Table : 字段说明 – config-face-recognition.json 文件

| 字段 | 值/描述 |
| :--- | :--- |
| **ml-framework** | 请使用以下模型之一：<ul class="ul" id="gst-ai-face-recognition__ul_prm_gck_32c"><br>                                    <li class="li"><code class="ph codeph">tflite</code>–LiteRT</li><br><br>                                    <li class="li"><code class="ph codeph">qnn</code>–Qualcomm AI Engine direct</li><br><br>                                </ul> |
| **Models and labels** | 参见[示例模型和标签文件](https://docs.qualcomm.com/doc/80-70022-50SC/topic/gst-ai-face-recognition.html#gst-ai-face-recognition__section_bxr_x4m_qdc)。<ul class="ul" id="gst-ai-face-recognition__ul_c31_nfr_32c"><br>                                    <li class="li"><strong class="ph b">face-detection-model</strong>：人脸检测模型的路径。</li><br><br>                                    <li class="li"><strong class="ph b">face-landmark-model</strong>：人脸特征点模型的路径。</li><br><br>                                    <li class="li"><strong class="ph b">face-recognition-model</strong>：人脸识别模型的路径。</li><br><br>                                    <li class="li"><strong class="ph b">face-detection-labels</strong>：人脸检测标签的路径。</li><br><br>                                    <li class="li"><strong class="ph b">face-recognition-labels</strong>：人脸识别标签的路径。</li><br><br>                                    <li class="li"><strong class="ph b">face-recognition-settings</strong>：人脸识别设置标签的路径。</li><br><br>                                    <li class="li"><strong class="ph b">facemap-3dmm-settings</strong>：facemap-3dmm 设置标签的路径。</li><br><br>                                </ul> |

## 相关信息

- [目标检测](https://docs.qualcomm.com/doc/80-70022-50SC/topic/gst-ai-object-detection.html)
- [姿态检测](https://docs.qualcomm.com/doc/80-70022-50SC/topic/gst-ai-pose-detection.html)

**Parent Topic:** [运行 AI/ML 示例应用程序](https://docs.qualcomm.com/doc/80-70022-50SC/topic/ai-ml-sample-applications.html)

Last Published: Nov 05, 2025

[Previous Topic
人脸检测](https://docs.qualcomm.com/bundle/publicresource/80-70022-50SC/topics/gst-ai-face-detection.md) [Next Topic
音频分类](https://docs.qualcomm.com/bundle/publicresource/80-70022-50SC/topics/audio-classification.md)