<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Mediapipe on Mulham Fetna</title>
    <link>https://mulhamfetna.com/tags/mediapipe/</link>
    <description>Recent content in Mediapipe on Mulham Fetna</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <managingEditor>contact@mulhamfetna.com (Mulham Fetna)</managingEditor>
    <webMaster>contact@mulhamfetna.com (Mulham Fetna)</webMaster>
    <copyright>© 2026 Mulham Fetna</copyright>
    <lastBuildDate>Wed, 16 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://mulhamfetna.com/tags/mediapipe/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>Calibrating hand tracking to your own hand — with real data from a live session</title>
      <link>https://mulhamfetna.com/projects/ros2-tendon-driven-hand-mujoco-digital-twin-vision-teleoperation/calibration/</link>
      <pubDate>Wed, 16 Sep 2026 00:00:00 +0000</pubDate>
      <author>contact@mulhamfetna.com (Mulham Fetna)</author>
      <guid>https://mulhamfetna.com/projects/ros2-tendon-driven-hand-mujoco-digital-twin-vision-teleoperation/calibration/</guid>
      <description>&lt;div class=&#34;lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl&#34;&gt;&#xA;  The shipped thresholds were measured on one hand with one webcam. Here is how to measure yours — and&#xA;what a live recording revealed about how far off &amp;ldquo;good enough&amp;rdquo; can be while the twin still looks&#xA;perfect.&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Symptoms that call for calibration&#xA;    &lt;div id=&#34;symptoms-that-call-for-calibration&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#symptoms-that-call-for-calibration&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;What you see in the published flexions&lt;/th&gt;&#xA;          &lt;th&gt;Cause&lt;/th&gt;&#xA;          &lt;th&gt;Change&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;A fist, but flexion stays below 1.0&lt;/td&gt;&#xA;          &lt;td&gt;your fist angle is &lt;strong&gt;above&lt;/strong&gt; the curled limit&lt;/td&gt;&#xA;          &lt;td&gt;&lt;strong&gt;raise&lt;/strong&gt; &lt;code&gt;*_CURLED_ANGLE&lt;/code&gt; to your fist reading&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Flexion hits 1.0 with the hand half closed&lt;/td&gt;&#xA;          &lt;td&gt;curled limit too high&lt;/td&gt;&#xA;          &lt;td&gt;&lt;strong&gt;lower&lt;/strong&gt; &lt;code&gt;*_CURLED_ANGLE&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Flexion above 0 with a relaxed open hand&lt;/td&gt;&#xA;          &lt;td&gt;your open angle is &lt;strong&gt;below&lt;/strong&gt; the straight limit&lt;/td&gt;&#xA;          &lt;td&gt;&lt;strong&gt;lower&lt;/strong&gt; &lt;code&gt;*_STRAIGHT_ANGLE&lt;/code&gt; to your open reading&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;The thumb flickers&lt;/td&gt;&#xA;          &lt;td&gt;thumb window too narrow for your jitter&lt;/td&gt;&#xA;          &lt;td&gt;widen it (&lt;a href=&#34;https://mulhamfetna.com/projects/ros2-tendon-driven-hand-mujoco-digital-twin-vision-teleoperation/thumb-thresholds/&#34; &gt;Part 8&lt;/a&gt;)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&#xA;  &#xA;  &#xA;  &#xA;  &#xA;&#xA;&#xA;&#xA;&lt;div&#xA;  &#xA;    class=&#34;flex px-4 py-3 rounded-md shadow bg-primary-100 dark:bg-primary-900&#34;&#xA;  &#xA;  &gt;&#xA;  &lt;span&#xA;    &#xA;      class=&#34;text-primary-400 pe-3 flex items-center&#34;&#xA;    &#xA;    &gt;&#xA;    &lt;span class=&#34;relative block icon&#34;&gt;&lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 384 512&#34;&gt;&lt;path fill=&#34;currentColor&#34; d=&#34;M112.1 454.3c0 6.297 1.816 12.44 5.284 17.69l17.14 25.69c5.25 7.875 17.17 14.28 26.64 14.28h61.67c9.438 0 21.36-6.401 26.61-14.28l17.08-25.68c2.938-4.438 5.348-12.37 5.348-17.7L272 415.1h-160L112.1 454.3zM191.4 .0132C89.44 .3257 16 82.97 16 175.1c0 44.38 16.44 84.84 43.56 115.8c16.53 18.84 42.34 58.23 52.22 91.45c.0313 .25 .0938 .5166 .125 .7823h160.2c.0313-.2656 .0938-.5166 .125-.7823c9.875-33.22 35.69-72.61 52.22-91.45C351.6 260.8 368 220.4 368 175.1C368 78.61 288.9-.2837 191.4 .0132zM192 96.01c-44.13 0-80 35.89-80 79.1C112 184.8 104.8 192 96 192S80 184.8 80 176c0-61.76 50.25-111.1 112-111.1c8.844 0 16 7.159 16 16S200.8 96.01 192 96.01z&#34;/&gt;&lt;/svg&gt;&#xA;&lt;/span&gt;&#xA;  &lt;/span&gt;&#xA;&#xA;  &lt;span&#xA;    &#xA;      class=&#34;dark:text-neutral-300&#34;&#xA;    &#xA;    &gt;&lt;strong&gt;Calibrate against the numbers, not the render.&lt;/strong&gt; With the current force-control tuning, the&#xA;simulated finger snaps shut past flexion ≈ 0.51 (&lt;a href=&#34;https://mulhamfetna.com/projects/ros2-tendon-driven-hand-mujoco-digital-twin-vision-teleoperation/tendon-physics-switch/&#34; &gt;Part 11&lt;/a&gt;),&#xA;so most calibration errors are invisible in the viewer. Watch &lt;code&gt;ros2 topic echo /hand/target_flexions&lt;/code&gt;.&lt;/span&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Real data: what a live session produced&#xA;    &lt;div id=&#34;real-data-what-a-live-session-produced&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#real-data-what-a-live-session-produced&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;MuJoCo&amp;rsquo;s viewer has a &lt;strong&gt;Control&lt;/strong&gt; panel showing the live force of every motor. Since the force is&#xA;\(F = 50 - 100 \cdot \text{flexion}\), every recorded frame gives back the exact flexion the tracker&#xA;published: &lt;strong&gt;flexion = (50 − F) / 100&lt;/strong&gt;.&lt;/p&gt;</description>
      <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://mulhamfetna.com/projects/ros2-tendon-driven-hand-mujoco-digital-twin-vision-teleoperation/calibration/cover.png" />
    </item>
    
    <item>
      <title>MediaPipe Hands for robotics — and the 16° angle trap in normalized landmarks</title>
      <link>https://mulhamfetna.com/projects/ros2-tendon-driven-hand-mujoco-digital-twin-vision-teleoperation/mediapipe-hands/</link>
      <pubDate>Wed, 16 Sep 2026 00:00:00 +0000</pubDate>
      <author>contact@mulhamfetna.com (Mulham Fetna)</author>
      <guid>https://mulhamfetna.com/projects/ros2-tendon-driven-hand-mujoco-digital-twin-vision-teleoperation/mediapipe-hands/</guid>
      <description>&lt;div class=&#34;lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl&#34;&gt;&#xA;  Twenty-one points per frame, on a laptop CPU, from a flat RGB image. That is what MediaPipe hands&#xA;to a robot. It is easy to treat as a black box — until you compute angles from it and discover the&#xA;box stretched your coordinate space.&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Where MediaPipe sits&#xA;    &lt;div id=&#34;where-mediapipe-sits&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#where-mediapipe-sits&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;pre class=&#34;not-prose mermaid&#34;&gt;&#xA;flowchart TB&#xA;    CAM[&#34;USB webcam&lt;br&gt;640×480 @ 30 fps · YUYV&#34;] --&gt;|&#34;BGR frame&#34;| RGB[&#34;cv2.cvtColor&lt;br&gt;BGR → RGB&#34;]&#xA;    RGB --&gt; MP[&#34;MediaPipe Hands&lt;br&gt;palm detector + landmark model&#34;]&#xA;    MP --&gt;|&#34;21 × (x, y, z)&#34;| ANG[&#34;Triplet angles&lt;br&gt;Part 5&#34;]&#xA;    ANG --&gt; AVG[&#34;Average per finger&lt;br&gt;Part 6&#34;]&#xA;    AVG --&gt; NORM[&#34;Flexion 0..1&lt;br&gt;Parts 7–8&#34;]&#xA;    NORM --&gt;|&#34;/hand/target_flexions&#34;| TWIN[&#34;MuJoCo twin&#34;]&#xA;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The vision layer knows nothing about MuJoCo. Its entire output is &lt;strong&gt;five numbers between 0.0 (open)&#xA;and 1.0 (closed)&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Two networks, not one&#xA;    &lt;div id=&#34;two-networks-not-one&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#two-networks-not-one&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;MediaPipe Hands is a &lt;strong&gt;cascade&lt;/strong&gt;:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;BlazePalm&lt;/strong&gt;, a single-shot detector, finds a &lt;em&gt;palm&lt;/em&gt; bounding box in the full frame. Palms, not&#xA;hands: a palm is close to a rigid square; a hand with moving fingers is not.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;A landmark model&lt;/strong&gt; crops that region and regresses 21 keypoints, a hand-presence score and&#xA;handedness.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;In video mode (&lt;code&gt;static_image_mode=False&lt;/code&gt;) the detector barely runs. Landmarks from frame &lt;em&gt;t&lt;/em&gt; define&#xA;the crop for frame &lt;em&gt;t+1&lt;/em&gt;, and the detector wakes only when tracking confidence drops. That shortcut&#xA;is why this pipeline holds 30 fps on a CPU.&lt;/p&gt;</description>
      <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://mulhamfetna.com/projects/ros2-tendon-driven-hand-mujoco-digital-twin-vision-teleoperation/mediapipe-hands/cover.png" />
    </item>
    
    <item>
      <title>Why the thumb needs its own thresholds in hand tracking</title>
      <link>https://mulhamfetna.com/projects/ros2-tendon-driven-hand-mujoco-digital-twin-vision-teleoperation/thumb-thresholds/</link>
      <pubDate>Wed, 16 Sep 2026 00:00:00 +0000</pubDate>
      <author>contact@mulhamfetna.com (Mulham Fetna)</author>
      <guid>https://mulhamfetna.com/projects/ros2-tendon-driven-hand-mujoco-digital-twin-vision-teleoperation/thumb-thresholds/</guid>
      <description>&lt;div class=&#34;lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl&#34;&gt;&#xA;  Squeeze your thumb across your palm as hard as you can and, by the finger thresholds, it is only&#xA;half closed. The thumb isn&amp;rsquo;t a finger with a shorter bone — it&amp;rsquo;s a different joint.&#xA;&lt;/div&gt;&#xA;&#xA;&lt;figure&gt;&lt;img&#xA;    class=&#34;my-0 rounded-md&#34;&#xA;    loading=&#34;lazy&#34;&#xA;    decoding=&#34;async&#34;&#xA;    fetchpriority=&#34;auto&#34;&#xA;    alt=&#34;Live: thumb tucked across the palm, fingers open — only pull_thumb goes negative at −19.5 N&#34;&#xA;    width=&#34;1570&#34;&#xA;    height=&#34;480&#34;&#xA;    src=&#34;https://mulhamfetna.com/projects/ros2-tendon-driven-hand-mujoco-digital-twin-vision-teleoperation/thumb-thresholds/live_thumb_curled_hu_3439f03a327be93f.jpg&#34;&#xA;    srcset=&#34;https://mulhamfetna.com/projects/ros2-tendon-driven-hand-mujoco-digital-twin-vision-teleoperation/thumb-thresholds/live_thumb_curled_hu_3439f03a327be93f.jpg 800w, https://mulhamfetna.com/projects/ros2-tendon-driven-hand-mujoco-digital-twin-vision-teleoperation/thumb-thresholds/live_thumb_curled_hu_eed9092295f33e0d.jpg 1280w&#34;&#xA;    sizes=&#34;(min-width: 768px) 50vw, 65vw&#34;&#xA;    data-zoom-src=&#34;https://mulhamfetna.com/projects/ros2-tendon-driven-hand-mujoco-digital-twin-vision-teleoperation/thumb-thresholds/live_thumb_curled.jpg&#34;&gt;&lt;figcaption&gt;Thumb curled, fingers open. Only &lt;code&gt;pull_thumb&lt;/code&gt; goes negative (−19.5 N, flexion 0.69); every other motor pushes open.&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Hinges versus a saddle&#xA;    &lt;div id=&#34;hinges-versus-a-saddle&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#hinges-versus-a-saddle&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Index to pinky&lt;/strong&gt; are chains of &lt;strong&gt;hinge joints&lt;/strong&gt;. A fist rolls them into a tight spiral, each&#xA;knuckle approaching 90°.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;The thumb&lt;/strong&gt; hangs from the &lt;strong&gt;carpometacarpal (CMC) saddle joint&lt;/strong&gt; at the wrist. It &lt;em&gt;sweeps&lt;/em&gt;&#xA;across the palm — opposition — instead of simply curling. Much of &amp;ldquo;closing the thumb&amp;rdquo; is rotation&#xA;of the whole thumb, not bending at its knuckles.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;What MediaPipe measures because of it&#xA;    &lt;div id=&#34;what-mediapipe-measures-because-of-it&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#what-mediapipe-measures-because-of-it&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Interior angles come from 3D landmark positions, so the sweep only partly shows up as knuckle bend:&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;&lt;/th&gt;&#xA;          &lt;th&gt;Open&lt;/th&gt;&#xA;          &lt;th&gt;Fully closed&lt;/th&gt;&#xA;          &lt;th&gt;Travel&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Finger — mean of MCP/PIP/DIP&lt;/td&gt;&#xA;          &lt;td&gt;≈ 3.10 rad&lt;/td&gt;&#xA;          &lt;td&gt;≈ 1.60 rad&lt;/td&gt;&#xA;          &lt;td&gt;1.50 rad&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Thumb — mean of CMC/MCP/IP&lt;/td&gt;&#xA;          &lt;td&gt;≈ 2.90 rad&lt;/td&gt;&#xA;          &lt;td&gt;≈ 2.30 rad&lt;/td&gt;&#xA;          &lt;td&gt;&lt;strong&gt;0.60 rad&lt;/strong&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;A fully closed thumb stops near &lt;strong&gt;2.30 rad (~132°)&lt;/strong&gt;. Even its &lt;em&gt;open&lt;/em&gt; angle sits below a finger&amp;rsquo;s —&#xA;a relaxed thumb is never in line with the wrist.&lt;/p&gt;</description>
      <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://mulhamfetna.com/projects/ros2-tendon-driven-hand-mujoco-digital-twin-vision-teleoperation/thumb-thresholds/cover.png" />
    </item>
    
    <item>
      <title>How MediaPipe sees a hand — and exactly where it fails</title>
      <link>https://mulhamfetna.com/projects/ros2-mediapipe-robotic-hand-digital-twin-vision-teleoperation/mediapipe/</link>
      <pubDate>Tue, 08 Sep 2026 00:00:00 +0000</pubDate>
      <author>contact@mulhamfetna.com (Mulham Fetna)</author>
      <guid>https://mulhamfetna.com/projects/ros2-mediapipe-robotic-hand-digital-twin-vision-teleoperation/mediapipe/</guid>
      <description>&lt;div class=&#34;lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl&#34;&gt;&#xA;  Twenty-one points, thirty frames a second, on a CPU, from a flat RGB image with no depth&#xA;information. This is how that is possible — and the four failure modes you will meet the first&#xA;time you rely on it.&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;Every vision-driven robotics project has a moment where the camera stops being a camera and starts&#xA;being a sensor. For this one, that moment is MediaPipe Hands: a webcam frame goes in, and 21&#xA;numbered points in space come out.&lt;/p&gt;&#xA;&lt;p&gt;It is easy to treat that as a black box. It is also a mistake, because the box has a specific&#xA;shape, and its failure modes follow directly from how it was built.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;It is two networks, not one&#xA;    &lt;div id=&#34;it-is-two-networks-not-one&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#it-is-two-networks-not-one&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;The single most useful thing to know about MediaPipe Hands is that it is a &lt;strong&gt;cascade&lt;/strong&gt;: a detector&#xA;and a regressor, with completely different jobs.&lt;/p&gt;&#xA;&lt;pre class=&#34;not-prose mermaid&#34;&gt;&#xA;flowchart TB&#xA;    A[&#34;📷 Full frame&lt;br&gt;e.g. 640 × 480&#34;] --&gt; B[&#34;Stage 1 — BlazePalm&lt;br&gt;SSD detector&#34;]&#xA;    B --&gt; C[&#34;Oriented palm crop&lt;br&gt;256 × 256&#34;]&#xA;    C --&gt; D[&#34;Stage 2 — Landmark regressor&lt;br&gt;MobileNetV2-style encoder&#34;]&#xA;    D --&gt; E[&#34;63 floats&lt;br&gt;21 landmarks × (x, y, z)&#34;]&#xA;    D --&gt; F[&#34;Presence score&#34;]&#xA;    D --&gt; G[&#34;Handedness&lt;br&gt;left / right&#34;]&#xA;    F --&gt;|&#34;confidence ≥ 0.5&#34;| C&#xA;    F --&gt;|&#34;confidence &lt; 0.5&#34;| B&#xA;&lt;/pre&gt;&#xA;&#xA;&lt;figure&gt;&lt;img&#xA;    class=&#34;my-0 rounded-md&#34;&#xA;    loading=&#34;lazy&#34;&#xA;    decoding=&#34;async&#34;&#xA;    fetchpriority=&#34;auto&#34;&#xA;    alt=&#34;The MediaPipe landmark skeleton overlaid on a hand in the tracker&amp;rsquo;s preview window&#34;&#xA;    width=&#34;800&#34;&#xA;    height=&#34;700&#34;&#xA;    src=&#34;https://mulhamfetna.com/projects/ros2-mediapipe-robotic-hand-digital-twin-vision-teleoperation/mediapipe/mediapipe-landmarks.png&#34;&#xA;    srcset=&#34;https://mulhamfetna.com/projects/ros2-mediapipe-robotic-hand-digital-twin-vision-teleoperation/mediapipe/mediapipe-landmarks.png 800w, https://mulhamfetna.com/projects/ros2-mediapipe-robotic-hand-digital-twin-vision-teleoperation/mediapipe/mediapipe-landmarks.png 1280w&#34;&#xA;    sizes=&#34;(min-width: 768px) 50vw, 65vw&#34;&#xA;    data-zoom-src=&#34;https://mulhamfetna.com/projects/ros2-mediapipe-robotic-hand-digital-twin-vision-teleoperation/mediapipe/mediapipe-landmarks.png&#34;&gt;&lt;figcaption&gt;The regressor&amp;rsquo;s output, drawn back onto the frame: 21 points and the connections between them.&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;h3 class=&#34;relative group&#34;&gt;Stage 1 — BlazePalm detects palms, never fingers&#xA;    &lt;div id=&#34;stage-1--blazepalm-detects-palms-never-fingers&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#stage-1--blazepalm-detects-palms-never-fingers&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h3&gt;&#xA;&lt;p&gt;This is the design decision the whole system rests on.&lt;/p&gt;</description>
      <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://mulhamfetna.com/projects/ros2-mediapipe-robotic-hand-digital-twin-vision-teleoperation/mediapipe/featured.png" />
    </item>
    
  </channel>
</rss>
