{"id":1198,"date":"2023-09-22T17:54:07","date_gmt":"2023-09-22T09:54:07","guid":{"rendered":"http:\/\/bversion.com\/WordPress\/?p=1198"},"modified":"2023-09-30T04:05:30","modified_gmt":"2023-09-29T20:05:30","slug":"drone-programming-gesture-control","status":"publish","type":"post","link":"https:\/\/bversion.com\/WordPress\/2023\/09\/22\/drone-programming-gesture-control\/","title":{"rendered":"Drone Programming &#8211; Gesture Control"},"content":{"rendered":"\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Program Tello with Python #4 - Gesture Control\" width=\"604\" height=\"340\" src=\"https:\/\/www.youtube.com\/embed\/fu1bzXTk8VI?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>Once I did the face detection project, it made me easier to understand gesture recognition, you can do it too. It gives me more solid fundamentals to start with deep learning studying, I want to create my objection recognition model and have the drone fly with this. Before that, I like to try body detection and swap fly as my next project. OK, let&#8217;s see how we make this happen in our drone.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Basic Concept<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Capture video frame from the drone<\/li>\n\n\n\n<li>Use a hand detection tool to identify hands from the frame and identify the left hand. <\/li>\n\n\n\n<li>Based on the hand-detected information (including wrist, finger, knuckles &amp; phalanges) and the logic, we will achieve gesture control.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Understanding your hand<\/h2>\n\n\n\n<p>First of all, let&#8217;s understand our hands first&#8230;  XD<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><a href=\"http:\/\/bversion.com\/WordPress\/wp-content\/uploads\/2023\/09\/Good-Hand.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/bversion.com\/WordPress\/wp-content\/uploads\/2023\/09\/Good-Hand.jpg\" alt=\"\" class=\"wp-image-1214\" style=\"object-fit:cover;width:351px;height:461px\" width=\"351\" height=\"461\"\/><\/a><\/figure>\n<\/div>\n\n\n<p>I got this picture from <a href=\"https:\/\/sketchymedicine.com\/2011\/12\/bones-and-joints-of-the-hand-and-wrist\/\" data-type=\"link\" data-id=\"https:\/\/sketchymedicine.com\/2011\/12\/bones-and-joints-of-the-hand-and-wrist\/\">sketchymedicine.com<\/a>, it contains a lot of medical sketches and detailed information, very cool website.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Program with MediaPipe<\/h2>\n\n\n\n<p>See below for the full program<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#575279;--cbp-line-number-width:19.796875px;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#faf4ed\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"from djitellopy import Tello\nimport cv2\nimport mediapipe as mp\nimport threading\nimport math\nimport logging\nimport time\n\n# Assign tello to the Tello class and set the information to error only\ntello = Tello()\ntello.LOGGER.setLevel(logging.ERROR) #Ignore INFO from Tello\nfly = False #For debuggin purpose\n\n# Assign the MediaPipe hands detection solution to mpHands and define the confidence level\nmpHands = mp.solutions.hands\nhands = mpHands.Hands(min_detection_confidence=0.8, min_tracking_confidence=0.8)\n\n# When we detect the hand, we can use mp.solution to plot the location and connection\nmpDraw = mp.solutions.drawing_utils\n\ndef hand_detection(tello):\n\n    while True:\n        \n        global gesture\n        \n        # Read the frame from Tello\n        frame = tello.get_frame_read().frame\n        frame = cv2.flip(frame, 1)\n        \n        # Call hands from MediaPipe Solution for the hand detction, need to ensure the frame is RGB\n        result = hands.process(frame)\n        \n        # Read frame width &amp; height instead of using fixed number 960 &amp; 720\n        frame_height = frame.shape[0]\n        frame_width = frame.shape[1]\n        my_hand = []\n        \n        if result.multi_hand_landmarks:\n            for handlms, handside in zip(result.multi_hand_landmarks, result.multi_handedness):\n                if handside.classification[0].label == 'Right': # We will skip the right hand information\n                    continue\n                        \n                # With mp.solutions.drawing_utils, plot the landmark location and connect them with define style        \n                mpDraw.draw_landmarks(frame, handlms, mpHands.HAND_CONNECTIONS,\\\n                                        mp.solutions.drawing_styles.get_default_hand_landmarks_style(),\\\n                                        mp.solutions.drawing_styles.get_default_hand_connections_style())          \n               \n                # Convert all the hand information from a ratio into actual position according to the frame size.\n                for i, landmark in enumerate(handlms.landmark):\n                    x = int(landmark.x * frame_width)\n                    y = int(landmark.y * frame_height)\n                    my_hand.append((x, y))\n                                        \n                # Capture all the landmarks position and distance into hand[]\n                # wrist = 0       \n                # thumb = 1 - 4\n                # index = 5 - 8\n                # middle = 9 - 12\n                # ring = 13 - 16\n                # little = 17 - 20\n                \n                # Setup left hand control with the pre-defined logic. \n                # Besides thumb, we use finger tip y position compare with knuckle y position as an indicator\n                # Thumb use the x position as the comparison.\n                \n                # Stop, a fist\n                # Land, open hand\n                # Right, only thumb open\n                # Left, only little finger open\n                # Up, only index finger open\n                # Down, both thumb and index finger open\n                # Come, both index and middle fingger open\n                # Away, both index, middle and ring finger open            \n                finger_on = []\n                if my_hand[4][0] &gt; my_hand[2][0]:\n                    finger_on.append(1)                     \n                else:\n                    finger_on.append(0) \n                for i in range(1,5):\n                    if my_hand[4 + i*4][1] &lt; my_hand[2 + i*4][1]: \n                        finger_on.append(1)\n                    else:\n                        finger_on.append(0)\n                \n                gesture = 'Unknown'        \n                if sum(finger_on) == 0:\n                    gesture = 'Stop'\n                elif sum(finger_on) == 5:\n                    gesture = 'Land'\n                elif sum(finger_on) == 1:\n                    if finger_on[0] == 1:\n                        gesture = 'Right'\n                    elif finger_on[4] == 1:\n                        gesture = 'Left'\n                    elif finger_on[1] == 1:\n                        gesture = 'Up'\n                elif sum(finger_on) == 2:\n                    if finger_on[0] == finger_on[1] == 1:\n                        gesture = 'Down'\n                    elif finger_on[1] == finger_on[2] == 1:\n                        gesture = 'Come'\n                elif sum(finger_on) == 3 and finger_on[1] == finger_on[2] == finger_on[3] == 1:\n                    gesture = 'Away'\n                \n        cv2.putText(frame, gesture, (10, 50), cv2.FONT_HERSHEY_SIMPLEX, 2, (255, 0, 0), 3)\n        frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) \n        cv2.imshow('Tello Video Stream', frame)\n        cv2.waitKey(1)\n        if gesture == 'Landed':\n            break      \n\n########################\n# Start of the program #\n########################\n\n# Connect to the drone via WIFI\ntello.connect()\n\n# Instrust Tello to start video stream and ensure first frame read\ntello.streamon()\n\nwhile True:\n            frame = tello.get_frame_read().frame\n            if frame is not None:\n                break\n\n# Start the hand detection thread when the drone is flying\ngesture = 'Unknown'\nvideo_thread = threading.Thread(target=hand_detection, args=(tello,), daemon=True)\nvideo_thread.start()    \n\n# Take off the drone\ntime.sleep(1)\nif fly:\n    tello.takeoff()\n    tello.set_speed(10)\n    time.sleep(2)\n    tello.move_up(80)\n    \nwhile True:\n    \n    hV = dV = vV = rV = 0\n    if gesture == 'Land':\n        break\n    elif gesture == 'Stop' or gesture == 'Unknown':\n        hV = dV = vV = rV = 0\n    elif gesture == 'Right':\n        hV = -15\n    elif gesture == 'Left':\n        hV = 15\n    elif gesture == 'Up':\n        vV = 20\n    elif gesture == 'Down':\n        vV = -20\n    elif gesture == 'Come':\n        dV = 15\n    elif gesture == 'Away':\n        dV = -15\n        \n    tello.send_rc_control(hV, dV, vV, rV)\n\n    \n# Landing the drone\nif fly: tello.land()\ngesture = 'Landed'\n\n# Stop the video stream\ntello.streamoff()\n\n# Show the battery level before ending the program\nprint(&quot;Battery :&quot;, tello.get_battery())\n    \" style=\"color:#575279;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki rose-pine-dawn\" style=\"background-color: #faf4ed\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #286983\">from<\/span><span style=\"color: #575279\"> djitellopy <\/span><span style=\"color: #286983\">import<\/span><span style=\"color: #575279\"> Tello<\/span><\/span>\n<span class=\"line\"><span style=\"color: #286983\">import<\/span><span style=\"color: #575279\"> cv2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #286983\">import<\/span><span style=\"color: #575279\"> mediapipe <\/span><span style=\"color: #286983\">as<\/span><span style=\"color: #575279\"> mp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #286983\">import<\/span><span style=\"color: #575279\"> threading<\/span><\/span>\n<span class=\"line\"><span style=\"color: #286983\">import<\/span><span style=\"color: #575279\"> math<\/span><\/span>\n<span class=\"line\"><span style=\"color: #286983\">import<\/span><span style=\"color: #575279\"> logging<\/span><\/span>\n<span class=\"line\"><span style=\"color: #286983\">import<\/span><span style=\"color: #575279\"> time<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\"> Assign tello to the Tello class and set the information to error only<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">tello <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> Tello<\/span><span style=\"color: #797593\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">tello<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #286983\">LOGGER<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">setLevel<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #575279\">logging<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #286983\">ERROR<\/span><span style=\"color: #797593\">)<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\">Ignore INFO from Tello<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">fly <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">False<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\">For debuggin purpose<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\"> Assign the MediaPipe hands detection solution to mpHands and define the confidence level<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">mpHands <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> mp<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">solutions<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">hands<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">hands <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> mpHands<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">Hands<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #907AA9; font-style: italic\">min_detection_confidence<\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #D7827E\">0.8<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #907AA9; font-style: italic\">min_tracking_confidence<\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #D7827E\">0.8<\/span><span style=\"color: #797593\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\"> When we detect the hand, we can use mp.solution to plot the location and connection<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">mpDraw <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> mp<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">solutions<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">drawing_utils<\/span><\/span>\n<span class=\"line cbp-see-more-line \"><\/span>\n<span class=\"line\"><span style=\"color: #286983\">def<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">hand_detection<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #907AA9; font-style: italic\">tello<\/span><span style=\"color: #797593\">):<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #575279\">    <\/span><span style=\"color: #286983\">while<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">True<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        <\/span><span style=\"color: #286983\">global<\/span><span style=\"color: #575279\"> gesture<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        <\/span><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\"> Read the frame from Tello<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        frame <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> tello<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">get_frame_read<\/span><span style=\"color: #797593\">().<\/span><span style=\"color: #575279\">frame<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        frame <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> cv2<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">flip<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #575279\">frame<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">1<\/span><span style=\"color: #797593\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        <\/span><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\"> Call hands from MediaPipe Solution for the hand detction, need to ensure the frame is RGB<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        result <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> hands<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">process<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #575279\">frame<\/span><span style=\"color: #797593\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        <\/span><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\"> Read frame width &amp; height instead of using fixed number 960 &amp; 720<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        frame_height <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> frame<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">shape<\/span><span style=\"color: #797593\">[<\/span><span style=\"color: #D7827E\">0<\/span><span style=\"color: #797593\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        frame_width <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> frame<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">shape<\/span><span style=\"color: #797593\">[<\/span><span style=\"color: #D7827E\">1<\/span><span style=\"color: #797593\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        my_hand <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #797593\">[]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        <\/span><span style=\"color: #286983\">if<\/span><span style=\"color: #575279\"> result<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">multi_hand_landmarks<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">            <\/span><span style=\"color: #286983\">for<\/span><span style=\"color: #575279\"> handlms<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #575279\"> handside <\/span><span style=\"color: #286983\">in<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #B4637A; font-style: italic\">zip<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #575279\">result<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">multi_hand_landmarks<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #575279\"> result<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">multi_handedness<\/span><span style=\"color: #797593\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                <\/span><span style=\"color: #286983\">if<\/span><span style=\"color: #575279\"> handside<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">classification<\/span><span style=\"color: #797593\">[<\/span><span style=\"color: #D7827E\">0<\/span><span style=\"color: #797593\">].<\/span><span style=\"color: #575279\">label <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #EA9D34\">&#39;Right&#39;<\/span><span style=\"color: #797593\">:<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\"> We will skip the right hand information<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                    <\/span><span style=\"color: #286983\">continue<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                <\/span><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\"> With mp.solutions.drawing_utils, plot the landmark location and connect them with define style        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                mpDraw<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">draw_landmarks<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #575279\">frame<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #575279\"> handlms<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #575279\"> mpHands<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #286983\">HAND_CONNECTIONS<\/span><span style=\"color: #797593\">,\\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                                        mp<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">solutions<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">drawing_styles<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">get_default_hand_landmarks_style<\/span><span style=\"color: #797593\">(),\\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                                        mp<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">solutions<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">drawing_styles<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">get_default_hand_connections_style<\/span><span style=\"color: #797593\">())<\/span><span style=\"color: #575279\">          <\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">               <\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                <\/span><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\"> Convert all the hand information from a ratio into actual position according to the frame size.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                <\/span><span style=\"color: #286983\">for<\/span><span style=\"color: #575279\"> i<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #575279\"> landmark <\/span><span style=\"color: #286983\">in<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #B4637A; font-style: italic\">enumerate<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #575279\">handlms<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">landmark<\/span><span style=\"color: #797593\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                    x <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #56949F\">int<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #575279\">landmark<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">x <\/span><span style=\"color: #286983\">*<\/span><span style=\"color: #575279\"> frame_width<\/span><span style=\"color: #797593\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                    y <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #56949F\">int<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #575279\">landmark<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">y <\/span><span style=\"color: #286983\">*<\/span><span style=\"color: #575279\"> frame_height<\/span><span style=\"color: #797593\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                    my_hand<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">append<\/span><span style=\"color: #797593\">((<\/span><span style=\"color: #575279\">x<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #575279\"> y<\/span><span style=\"color: #797593\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                                        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                <\/span><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\"> Capture all the landmarks position and distance into hand[]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                <\/span><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\"> wrist = 0       <\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                <\/span><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\"> thumb = 1 - 4<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                <\/span><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\"> index = 5 - 8<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                <\/span><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\"> middle = 9 - 12<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                <\/span><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\"> ring = 13 - 16<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                <\/span><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\"> little = 17 - 20<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                <\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                <\/span><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\"> Setup left hand control with the pre-defined logic. <\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                <\/span><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\"> Besides thumb, we use finger tip y position compare with knuckle y position as an indicator<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                <\/span><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\"> Thumb use the x position as the comparison.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                <\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                <\/span><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\"> Stop, a fist<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                <\/span><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\"> Land, open hand<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                <\/span><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\"> Right, only thumb open<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                <\/span><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\"> Left, only little finger open<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                <\/span><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\"> Up, only index finger open<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                <\/span><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\"> Down, both thumb and index finger open<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                <\/span><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\"> Come, both index and middle fingger open<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                <\/span><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\"> Away, both index, middle and ring finger open            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                finger_on <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #797593\">[]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                <\/span><span style=\"color: #286983\">if<\/span><span style=\"color: #575279\"> my_hand<\/span><span style=\"color: #797593\">[<\/span><span style=\"color: #D7827E\">4<\/span><span style=\"color: #797593\">][<\/span><span style=\"color: #D7827E\">0<\/span><span style=\"color: #797593\">]<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">&gt;<\/span><span style=\"color: #575279\"> my_hand<\/span><span style=\"color: #797593\">[<\/span><span style=\"color: #D7827E\">2<\/span><span style=\"color: #797593\">][<\/span><span style=\"color: #D7827E\">0<\/span><span style=\"color: #797593\">]:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                    finger_on<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">append<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #D7827E\">1<\/span><span style=\"color: #797593\">)<\/span><span style=\"color: #575279\">                     <\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                <\/span><span style=\"color: #286983\">else<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                    finger_on<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">append<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #D7827E\">0<\/span><span style=\"color: #797593\">)<\/span><span style=\"color: #575279\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                <\/span><span style=\"color: #286983\">for<\/span><span style=\"color: #575279\"> i <\/span><span style=\"color: #286983\">in<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #B4637A; font-style: italic\">range<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #D7827E\">1<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #D7827E\">5<\/span><span style=\"color: #797593\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                    <\/span><span style=\"color: #286983\">if<\/span><span style=\"color: #575279\"> my_hand<\/span><span style=\"color: #797593\">[<\/span><span style=\"color: #D7827E\">4<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">+<\/span><span style=\"color: #575279\"> i<\/span><span style=\"color: #286983\">*<\/span><span style=\"color: #D7827E\">4<\/span><span style=\"color: #797593\">][<\/span><span style=\"color: #D7827E\">1<\/span><span style=\"color: #797593\">]<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">&lt;<\/span><span style=\"color: #575279\"> my_hand<\/span><span style=\"color: #797593\">[<\/span><span style=\"color: #D7827E\">2<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">+<\/span><span style=\"color: #575279\"> i<\/span><span style=\"color: #286983\">*<\/span><span style=\"color: #D7827E\">4<\/span><span style=\"color: #797593\">][<\/span><span style=\"color: #D7827E\">1<\/span><span style=\"color: #797593\">]:<\/span><span style=\"color: #575279\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                        finger_on<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">append<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #D7827E\">1<\/span><span style=\"color: #797593\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                    <\/span><span style=\"color: #286983\">else<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                        finger_on<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">append<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #D7827E\">0<\/span><span style=\"color: #797593\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                <\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                gesture <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #EA9D34\">&#39;Unknown&#39;<\/span><span style=\"color: #575279\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                <\/span><span style=\"color: #286983\">if<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #B4637A; font-style: italic\">sum<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #575279\">finger_on<\/span><span style=\"color: #797593\">)<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">0<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                    gesture <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #EA9D34\">&#39;Stop&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                <\/span><span style=\"color: #286983\">elif<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #B4637A; font-style: italic\">sum<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #575279\">finger_on<\/span><span style=\"color: #797593\">)<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">5<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                    gesture <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #EA9D34\">&#39;Land&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                <\/span><span style=\"color: #286983\">elif<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #B4637A; font-style: italic\">sum<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #575279\">finger_on<\/span><span style=\"color: #797593\">)<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">1<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                    <\/span><span style=\"color: #286983\">if<\/span><span style=\"color: #575279\"> finger_on<\/span><span style=\"color: #797593\">[<\/span><span style=\"color: #D7827E\">0<\/span><span style=\"color: #797593\">]<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">1<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                        gesture <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #EA9D34\">&#39;Right&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                    <\/span><span style=\"color: #286983\">elif<\/span><span style=\"color: #575279\"> finger_on<\/span><span style=\"color: #797593\">[<\/span><span style=\"color: #D7827E\">4<\/span><span style=\"color: #797593\">]<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">1<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                        gesture <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #EA9D34\">&#39;Left&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                    <\/span><span style=\"color: #286983\">elif<\/span><span style=\"color: #575279\"> finger_on<\/span><span style=\"color: #797593\">[<\/span><span style=\"color: #D7827E\">1<\/span><span style=\"color: #797593\">]<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">1<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                        gesture <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #EA9D34\">&#39;Up&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                <\/span><span style=\"color: #286983\">elif<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #B4637A; font-style: italic\">sum<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #575279\">finger_on<\/span><span style=\"color: #797593\">)<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">2<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                    <\/span><span style=\"color: #286983\">if<\/span><span style=\"color: #575279\"> finger_on<\/span><span style=\"color: #797593\">[<\/span><span style=\"color: #D7827E\">0<\/span><span style=\"color: #797593\">]<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> finger_on<\/span><span style=\"color: #797593\">[<\/span><span style=\"color: #D7827E\">1<\/span><span style=\"color: #797593\">]<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">1<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                        gesture <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #EA9D34\">&#39;Down&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                    <\/span><span style=\"color: #286983\">elif<\/span><span style=\"color: #575279\"> finger_on<\/span><span style=\"color: #797593\">[<\/span><span style=\"color: #D7827E\">1<\/span><span style=\"color: #797593\">]<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> finger_on<\/span><span style=\"color: #797593\">[<\/span><span style=\"color: #D7827E\">2<\/span><span style=\"color: #797593\">]<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">1<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                        gesture <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #EA9D34\">&#39;Come&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                <\/span><span style=\"color: #286983\">elif<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #B4637A; font-style: italic\">sum<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #575279\">finger_on<\/span><span style=\"color: #797593\">)<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">3<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">and<\/span><span style=\"color: #575279\"> finger_on<\/span><span style=\"color: #797593\">[<\/span><span style=\"color: #D7827E\">1<\/span><span style=\"color: #797593\">]<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> finger_on<\/span><span style=\"color: #797593\">[<\/span><span style=\"color: #D7827E\">2<\/span><span style=\"color: #797593\">]<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> finger_on<\/span><span style=\"color: #797593\">[<\/span><span style=\"color: #D7827E\">3<\/span><span style=\"color: #797593\">]<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">1<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                    gesture <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #EA9D34\">&#39;Away&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                <\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        cv2<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">putText<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #575279\">frame<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #575279\"> gesture<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #D7827E\">10<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">50<\/span><span style=\"color: #797593\">),<\/span><span style=\"color: #575279\"> cv2<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #286983\">FONT_HERSHEY_SIMPLEX<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">2<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #D7827E\">255<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">0<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">0<\/span><span style=\"color: #797593\">),<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">3<\/span><span style=\"color: #797593\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        frame <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> cv2<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">cvtColor<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #575279\">frame<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #575279\"> cv2<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #286983\">COLOR_BGR2RGB<\/span><span style=\"color: #797593\">)<\/span><span style=\"color: #575279\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        cv2<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">imshow<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #EA9D34\">&#39;Tello Video Stream&#39;<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #575279\"> frame<\/span><span style=\"color: #797593\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        cv2<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">waitKey<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #D7827E\">1<\/span><span style=\"color: #797593\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        <\/span><span style=\"color: #286983\">if<\/span><span style=\"color: #575279\"> gesture <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #EA9D34\">&#39;Landed&#39;<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">            <\/span><span style=\"color: #286983\">break<\/span><span style=\"color: #575279\">      <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\">#######################<\/span><\/span>\n<span class=\"line\"><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\"> Start of the program #<\/span><\/span>\n<span class=\"line\"><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\">#######################<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\"> Connect to the drone via WIFI<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">tello<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">connect<\/span><span style=\"color: #797593\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\"> Instrust Tello to start video stream and ensure first frame read<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">tello<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">streamon<\/span><span style=\"color: #797593\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #286983\">while<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">True<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">            frame <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> tello<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">get_frame_read<\/span><span style=\"color: #797593\">().<\/span><span style=\"color: #575279\">frame<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">            <\/span><span style=\"color: #286983\">if<\/span><span style=\"color: #575279\"> frame <\/span><span style=\"color: #286983\">is<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">not<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">None<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                <\/span><span style=\"color: #286983\">break<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\"> Start the hand detection thread when the drone is flying<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">gesture <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #EA9D34\">&#39;Unknown&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">video_thread <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> threading<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">Thread<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #907AA9; font-style: italic\">target<\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\">hand_detection<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #907AA9; font-style: italic\">args<\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #575279\">tello<\/span><span style=\"color: #797593\">,),<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #907AA9; font-style: italic\">daemon<\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #D7827E\">True<\/span><span style=\"color: #797593\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">video_thread<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">start<\/span><span style=\"color: #797593\">()<\/span><span style=\"color: #575279\">    <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\"> Take off the drone<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">time<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">sleep<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #D7827E\">1<\/span><span style=\"color: #797593\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #286983\">if<\/span><span style=\"color: #575279\"> fly<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">    tello<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">takeoff<\/span><span style=\"color: #797593\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">    tello<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">set_speed<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #D7827E\">10<\/span><span style=\"color: #797593\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">    time<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">sleep<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #D7827E\">2<\/span><span style=\"color: #797593\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">    tello<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">move_up<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #D7827E\">80<\/span><span style=\"color: #797593\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #286983\">while<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">True<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">    hV <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> dV <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> vV <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> rV <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">    <\/span><span style=\"color: #286983\">if<\/span><span style=\"color: #575279\"> gesture <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #EA9D34\">&#39;Land&#39;<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        <\/span><span style=\"color: #286983\">break<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">    <\/span><span style=\"color: #286983\">elif<\/span><span style=\"color: #575279\"> gesture <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #EA9D34\">&#39;Stop&#39;<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">or<\/span><span style=\"color: #575279\"> gesture <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #EA9D34\">&#39;Unknown&#39;<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        hV <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> dV <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> vV <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> rV <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">    <\/span><span style=\"color: #286983\">elif<\/span><span style=\"color: #575279\"> gesture <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #EA9D34\">&#39;Right&#39;<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        hV <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">-<\/span><span style=\"color: #D7827E\">15<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">    <\/span><span style=\"color: #286983\">elif<\/span><span style=\"color: #575279\"> gesture <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #EA9D34\">&#39;Left&#39;<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        hV <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">15<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">    <\/span><span style=\"color: #286983\">elif<\/span><span style=\"color: #575279\"> gesture <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #EA9D34\">&#39;Up&#39;<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        vV <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">20<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">    <\/span><span style=\"color: #286983\">elif<\/span><span style=\"color: #575279\"> gesture <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #EA9D34\">&#39;Down&#39;<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        vV <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">-<\/span><span style=\"color: #D7827E\">20<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">    <\/span><span style=\"color: #286983\">elif<\/span><span style=\"color: #575279\"> gesture <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #EA9D34\">&#39;Come&#39;<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        dV <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">15<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">    <\/span><span style=\"color: #286983\">elif<\/span><span style=\"color: #575279\"> gesture <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #EA9D34\">&#39;Away&#39;<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        dV <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">-<\/span><span style=\"color: #D7827E\">15<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">    tello<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">send_rc_control<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #575279\">hV<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #575279\"> dV<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #575279\"> vV<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #575279\"> rV<\/span><span style=\"color: #797593\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #575279\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\"> Landing the drone<\/span><\/span>\n<span class=\"line\"><span style=\"color: #286983\">if<\/span><span style=\"color: #575279\"> fly<\/span><span style=\"color: #797593\">:<\/span><span style=\"color: #575279\"> tello<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">land<\/span><span style=\"color: #797593\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">gesture <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #EA9D34\">&#39;Landed&#39;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\"> Stop the video stream<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">tello<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">streamoff<\/span><span style=\"color: #797593\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\"> Show the battery level before ending the program<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B4637A; font-style: italic\">print<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #EA9D34\">&quot;Battery :&quot;<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #575279\"> tello<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">get_battery<\/span><span style=\"color: #797593\">())<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">    <\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#faf4ed;color:#625c88;font-size:12px;line-height:1;position:relative\">Python<\/span><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Hand Detection<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#575279;--cbp-line-number-start:9;--cbp-line-number-width:13.203125px;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#faf4ed\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><pre class=\"shiki rose-pine-dawn\" style=\"background-color: #faf4ed\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\"> Assign the MediaPipe hands detection solution to mpHands and define the confidence level<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">mpHands <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> mp<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">solutions<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">hands<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">hands <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> mpHands<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">Hands<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #907AA9; font-style: italic\">min_detection_confidence<\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #D7827E\">0.8<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #907AA9; font-style: italic\">min_tracking_confidence<\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #D7827E\">0.8<\/span><span style=\"color: #797593\">)<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#faf4ed;color:#625c88;font-size:12px;line-height:1;position:relative\">Python<\/span><\/div>\n\n\n\n<p>From MediaPipe, we are going to use MediaPipe Solution Hands for our hand detection, there are a few parameters that are important to us,<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>min_hand_detection_confidence<\/strong> &#8211; that&#8217;s the first step to identifying a hand in the single frame. At which score of detection is considered a success, the lower the number, the more detected objects can pass but the higher the chance of error. The higher the number, need a very high the score object, i.e. a very clear and precise hand image.<\/li>\n\n\n\n<li><strong>min_tracking_confidence<\/strong> &#8211; Once the hand is detected based on the min_hand_detection_confidence requirement, it will do the hand tracking with this number.<\/li>\n<\/ul>\n\n\n\n<p class=\"has-dark-gray-color has-text-color\">You can refer to the <a href=\"https:\/\/developers.google.com\/mediapipe\/solutions\/vision\/hand_landmarker#models\" data-type=\"link\" data-id=\"https:\/\/developers.google.com\/mediapipe\/solutions\/vision\/hand_landmarker#models\">MediaPipe Official Website<\/a> for more information. They also get a <a href=\"https:\/\/mediapipe-studio.webapps.google.com\/studio\/demo\/hand_landmarker\" data-type=\"link\" data-id=\"https:\/\/mediapipe-studio.webapps.google.com\/studio\/demo\/hand_landmarker\">demonstration website<\/a> for you to play with different models.  However,<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#575279;--cbp-line-number-start:89;--cbp-line-number-width:13.203125px;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#faf4ed\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><pre class=\"shiki rose-pine-dawn\" style=\"background-color: #faf4ed\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #575279\">  <\/span><span style=\"color: #286983\">def<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #B4637A; font-style: italic\">__init__<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #907AA9; font-style: italic\">self<\/span><span style=\"color: #797593\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">               <\/span><span style=\"color: #907AA9; font-style: italic\">static_image_mode<\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #D7827E\">False<\/span><span style=\"color: #797593\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">               <\/span><span style=\"color: #907AA9; font-style: italic\">max_num_hands<\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #D7827E\">2<\/span><span style=\"color: #797593\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">               <\/span><span style=\"color: #907AA9; font-style: italic\">model_complexity<\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #D7827E\">1<\/span><span style=\"color: #797593\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">               <\/span><span style=\"color: #907AA9; font-style: italic\">min_detection_confidence<\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #D7827E\">0.5<\/span><span style=\"color: #797593\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">               <\/span><span style=\"color: #907AA9; font-style: italic\">min_tracking_confidence<\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #D7827E\">0.5<\/span><span style=\"color: #797593\">):<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#faf4ed;color:#625c88;font-size:12px;line-height:1;position:relative\">Python<\/span><\/div>\n\n\n\n<p class=\"has-dark-gray-color has-light-orange-background-color has-text-color has-background\">I found that the documentation on the MediaPipe Official Website may not be updated, and <strong>min_hand_presence_confidence<\/strong> and <strong>running_mode<\/strong> no longer exist. What I checked from hands.py. It spent me 30 minutes playing with the demo and reading information to understand the difference between <strong>min_hand_detection_confidence<\/strong> and<strong> min_hand_presence_confidence<\/strong>.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#575279;--cbp-line-number-start:119;--cbp-line-number-width:19.796875px;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#faf4ed\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><pre class=\"shiki rose-pine-dawn\" style=\"background-color: #faf4ed\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #575279\">gesture <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #EA9D34\">&#39;Unknown&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">video_thread <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> threading<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">Thread<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #907AA9; font-style: italic\">target<\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\">hand_detection<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #907AA9; font-style: italic\">args<\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #575279\">tello<\/span><span style=\"color: #797593\">,),<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #907AA9; font-style: italic\">daemon<\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #D7827E\">True<\/span><span style=\"color: #797593\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">video_thread<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">start<\/span><span style=\"color: #797593\">()<\/span><span style=\"color: #575279\">    <\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#faf4ed;color:#625c88;font-size:12px;line-height:1;position:relative\">Python<\/span><\/div>\n\n\n\n<p>Just like what we did in face detection, we need to run the hand detection function in a thread (parallel processing) to capture and analyze the hand position, updating a global variable &#8211; <strong>gesture<\/strong>, so that the drone movement control can take corresponding actions according to this.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#575279;--cbp-line-number-start:27;--cbp-line-number-width:13.203125px;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#faf4ed\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><pre class=\"shiki rose-pine-dawn\" style=\"background-color: #faf4ed\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\"> Read the frame from Tello<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        frame <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> tello<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">get_frame_read<\/span><span style=\"color: #797593\">().<\/span><span style=\"color: #575279\">frame<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        frame <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> cv2<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">flip<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #575279\">frame<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">1<\/span><span style=\"color: #797593\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        <\/span><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\"> Call hands from MediaPipe Solution for the hand detction, need to ensure the frame is RGB<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        result <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> hands<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">process<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #575279\">frame<\/span><span style=\"color: #797593\">)<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#faf4ed;color:#625c88;font-size:12px;line-height:1;position:relative\">Python<\/span><\/div>\n\n\n\n<p>Get the latest <strong>frame <\/strong>from the drone and flip it from the camera point of view to our point of view. Then, process the <strong>frame <\/strong>with <strong>hands<\/strong>, it was predefined in the beginning &#8211; line #11. Once the hand detection is done, the following information will be stored in <strong>result<\/strong>, it will contain,<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>result.multi_handedness<\/strong> &#8211; &#8216;Left&#8217; or &#8216;Right&#8217; hand<\/li>\n\n\n\n<li><strong>result.multi_hand_landmarks<\/strong> &#8211; an array containing 21 sets of data as show below, they call it landmarks, each landmark including the x, y &amp; z position. <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-light-orange-color\">But, the x and y coordinates are normalized to [0.0, 1.0] by the image width and height, respectively<\/mark>. The z coordinate represents the landmark depth, with the depth at the wrist being the origin.<\/li>\n\n\n\n<li><strong>result.multi_hand_world_landmarks<\/strong> &#8211; The 21 hand landmarks are also presented in world coordinates. Each landmark is composed of&nbsp;<code>x<\/code>,&nbsp;<code>y<\/code>, and&nbsp;<code>z<\/code>, representing real-world 3D coordinates in meters with <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-light-orange-color\">the origin at the hand\u2019s geometric center<\/mark>.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"http:\/\/bversion.com\/WordPress\/wp-content\/uploads\/2023\/09\/Hand-Map.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"355\" src=\"http:\/\/bversion.com\/WordPress\/wp-content\/uploads\/2023\/09\/Hand-Map-1024x355.png\" alt=\"\" class=\"wp-image-1208\" srcset=\"https:\/\/bversion.com\/WordPress\/wp-content\/uploads\/2023\/09\/Hand-Map-1024x355.png 1024w, https:\/\/bversion.com\/WordPress\/wp-content\/uploads\/2023\/09\/Hand-Map-300x104.png 300w, https:\/\/bversion.com\/WordPress\/wp-content\/uploads\/2023\/09\/Hand-Map-768x266.png 768w, https:\/\/bversion.com\/WordPress\/wp-content\/uploads\/2023\/09\/Hand-Map-1536x533.png 1536w, https:\/\/bversion.com\/WordPress\/wp-content\/uploads\/2023\/09\/Hand-Map-2048x710.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#575279;--cbp-line-number-start:39;--cbp-line-number-width:13.203125px;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#faf4ed\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><pre class=\"shiki rose-pine-dawn\" style=\"background-color: #faf4ed\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #575279\">        <\/span><span style=\"color: #286983\">if<\/span><span style=\"color: #575279\"> result<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">multi_hand_landmarks<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">            <\/span><span style=\"color: #286983\">for<\/span><span style=\"color: #575279\"> handlms<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #575279\"> handside <\/span><span style=\"color: #286983\">in<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #B4637A; font-style: italic\">zip<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #575279\">result<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">multi_hand_landmarks<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #575279\"> result<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">multi_handedness<\/span><span style=\"color: #797593\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                <\/span><span style=\"color: #286983\">if<\/span><span style=\"color: #575279\"> handside<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">classification<\/span><span style=\"color: #797593\">[<\/span><span style=\"color: #D7827E\">0<\/span><span style=\"color: #797593\">].<\/span><span style=\"color: #575279\">label <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #EA9D34\">&#39;Right&#39;<\/span><span style=\"color: #797593\">:<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\"> We will skip the right hand information<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                    <\/span><span style=\"color: #286983\">continue<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#faf4ed;color:#625c88;font-size:12px;line-height:1;position:relative\">Python<\/span><\/div>\n\n\n\n<p>If hand(s) are detected, the <strong>result<\/strong> will contain the necessary data. Since we only need to use the left hand to control the drone, we will skip reading the Right hand data.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#575279;--cbp-line-number-start:19;--cbp-line-number-width:13.203125px;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#faf4ed\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><pre class=\"shiki rose-pine-dawn\" style=\"background-color: #faf4ed\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #575279\">mpDraw <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> mp<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">solutions<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">drawing_utils<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#faf4ed;color:#625c88;font-size:12px;line-height:1;position:relative\">Python<\/span><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#575279;--cbp-line-number-start:45;--cbp-line-number-width:13.203125px;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#faf4ed\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><pre class=\"shiki rose-pine-dawn\" style=\"background-color: #faf4ed\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #575279\">                mpDraw<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">draw_landmarks<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #575279\">frame<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #575279\"> handlms<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #575279\"> mpHands<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #286983\">HAND_CONNECTIONS<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #575279\"> mp<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">solutions<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">drawing_styles<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">get_default_hand_landmarks_style<\/span><span style=\"color: #797593\">(),<\/span><span style=\"color: #575279\"> mp<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">solutions<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">drawing_styles<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">get_default_hand_connections_style<\/span><span style=\"color: #797593\">())<\/span><span style=\"color: #575279\">                            <\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#faf4ed;color:#625c88;font-size:12px;line-height:1;position:relative\">Python<\/span><\/div>\n\n\n\n<p>Then, we use the <strong>drawing_utils<\/strong> from MediaPipe to highlight the landmarks and connect them.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#575279;--cbp-line-number-start:49;--cbp-line-number-width:13.203125px;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#faf4ed\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><pre class=\"shiki rose-pine-dawn\" style=\"background-color: #faf4ed\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #575279\">                <\/span><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\"> Convert all the hand information from a ratio into actual position according to the frame size.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                <\/span><span style=\"color: #286983\">for<\/span><span style=\"color: #575279\"> i<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #575279\"> landmark <\/span><span style=\"color: #286983\">in<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #B4637A; font-style: italic\">enumerate<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #575279\">handlms<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">landmark<\/span><span style=\"color: #797593\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                    x <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #56949F\">int<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #575279\">landmark<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">x <\/span><span style=\"color: #286983\">*<\/span><span style=\"color: #575279\"> frame_width<\/span><span style=\"color: #797593\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                    y <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #56949F\">int<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #575279\">landmark<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">y <\/span><span style=\"color: #286983\">*<\/span><span style=\"color: #575279\"> frame_height<\/span><span style=\"color: #797593\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                    my_hand<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">append<\/span><span style=\"color: #797593\">((<\/span><span style=\"color: #575279\">x<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #575279\"> y<\/span><span style=\"color: #797593\">))<\/span><span style=\"color: #575279\">   <\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#faf4ed;color:#625c88;font-size:12px;line-height:1;position:relative\">Python<\/span><\/div>\n\n\n\n<p>Retreves <strong>result.multi_hand_landmarks<\/strong> x &amp; y data and converts this into actual position to the frame size. Store into array <strong>my_hand<\/strong> for the gesture analysis. <\/p>\n\n\n<style>.wp-block-kadence-advancedheading.kt-adv-heading1198_aabe6c-3f, .wp-block-kadence-advancedheading.kt-adv-heading1198_aabe6c-3f[data-kb-block=\"kb-adv-heading1198_aabe6c-3f\"]{font-style:normal;}.wp-block-kadence-advancedheading.kt-adv-heading1198_aabe6c-3f mark.kt-highlight, .wp-block-kadence-advancedheading.kt-adv-heading1198_aabe6c-3f[data-kb-block=\"kb-adv-heading1198_aabe6c-3f\"] mark.kt-highlight{font-style:normal;color:#f76a0c;-webkit-box-decoration-break:clone;box-decoration-break:clone;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.wp-block-kadence-advancedheading.kt-adv-heading1198_aabe6c-3f img.kb-inline-image, .wp-block-kadence-advancedheading.kt-adv-heading1198_aabe6c-3f[data-kb-block=\"kb-adv-heading1198_aabe6c-3f\"] img.kb-inline-image{width:150px;vertical-align:baseline;}<\/style>\n<h3 class=\"kt-adv-heading1198_aabe6c-3f wp-block-kadence-advancedheading\" data-kb-block=\"kb-adv-heading1198_aabe6c-3f\">Logic for different gestures &#8211; Finger open or close?<\/h3>\n\n\n\n<p>We just simply compare the y position of the fingertip (TIP) to the knuckle (MCP). For the thumb, we compare the x position of the fingertip (TIP) to the knuckle (MCP) as shown below, <\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><a href=\"http:\/\/bversion.com\/WordPress\/wp-content\/uploads\/2023\/09\/image-6.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/bversion.com\/WordPress\/wp-content\/uploads\/2023\/09\/image-6.png\" alt=\"\" class=\"wp-image-1220\" style=\"object-fit:cover;width:368px;height:484px\" width=\"368\" height=\"484\"\/><\/a><\/figure>\n\n\n\n<p>When thumb is open, finger tip x is bigger then knuckle x. When the fingers are open, finger tip y is smaller than knuckle y.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#575279;--cbp-line-number-start:82;--cbp-line-number-width:19.796875px;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#faf4ed\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><pre class=\"shiki rose-pine-dawn\" style=\"background-color: #faf4ed\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #575279\">                finger_on <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #797593\">[]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                <\/span><span style=\"color: #286983\">if<\/span><span style=\"color: #575279\"> my_hand<\/span><span style=\"color: #797593\">[<\/span><span style=\"color: #D7827E\">4<\/span><span style=\"color: #797593\">][<\/span><span style=\"color: #D7827E\">1<\/span><span style=\"color: #797593\">]<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">&gt;<\/span><span style=\"color: #575279\"> my_hand<\/span><span style=\"color: #797593\">[<\/span><span style=\"color: #D7827E\">2<\/span><span style=\"color: #797593\">][<\/span><span style=\"color: #D7827E\">1<\/span><span style=\"color: #797593\">]:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                    finger_on<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">append<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #D7827E\">1<\/span><span style=\"color: #797593\">)<\/span><span style=\"color: #575279\">                     <\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                <\/span><span style=\"color: #286983\">else<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                    finger_on<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">append<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #D7827E\">0<\/span><span style=\"color: #797593\">)<\/span><span style=\"color: #575279\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                <\/span><span style=\"color: #286983\">for<\/span><span style=\"color: #575279\"> i <\/span><span style=\"color: #286983\">in<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #B4637A; font-style: italic\">range<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #D7827E\">1<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #D7827E\">5<\/span><span style=\"color: #797593\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                    <\/span><span style=\"color: #286983\">if<\/span><span style=\"color: #575279\"> my_hand<\/span><span style=\"color: #797593\">[<\/span><span style=\"color: #D7827E\">4<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">+<\/span><span style=\"color: #575279\"> i<\/span><span style=\"color: #286983\">*<\/span><span style=\"color: #D7827E\">4<\/span><span style=\"color: #797593\">][<\/span><span style=\"color: #D7827E\">3<\/span><span style=\"color: #797593\">]<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">&gt;<\/span><span style=\"color: #575279\"> my_hand<\/span><span style=\"color: #797593\">[<\/span><span style=\"color: #D7827E\">2<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">+<\/span><span style=\"color: #575279\"> i<\/span><span style=\"color: #286983\">*<\/span><span style=\"color: #D7827E\">4<\/span><span style=\"color: #797593\">][<\/span><span style=\"color: #D7827E\">3<\/span><span style=\"color: #797593\">]:<\/span><span style=\"color: #575279\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                        finger_on<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">append<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #D7827E\">1<\/span><span style=\"color: #797593\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                    <\/span><span style=\"color: #286983\">else<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                        finger_on<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">append<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #D7827E\">0<\/span><span style=\"color: #797593\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                <\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                gesture <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #EA9D34\">&#39;Unknown&#39;<\/span><span style=\"color: #575279\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                <\/span><span style=\"color: #286983\">if<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #B4637A; font-style: italic\">sum<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #575279\">finger_on<\/span><span style=\"color: #797593\">)<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">0<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                    gesture <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #EA9D34\">&#39;Stop&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                <\/span><span style=\"color: #286983\">elif<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #B4637A; font-style: italic\">sum<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #575279\">finger_on<\/span><span style=\"color: #797593\">)<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">5<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                    gesture <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #EA9D34\">&#39;land&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                <\/span><span style=\"color: #286983\">elif<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #B4637A; font-style: italic\">sum<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #575279\">finger_on<\/span><span style=\"color: #797593\">)<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">1<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                    <\/span><span style=\"color: #286983\">if<\/span><span style=\"color: #575279\"> finger_on<\/span><span style=\"color: #797593\">[<\/span><span style=\"color: #D7827E\">0<\/span><span style=\"color: #797593\">]<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">1<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                        gesture <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #EA9D34\">&#39;Right&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                    <\/span><span style=\"color: #286983\">elif<\/span><span style=\"color: #575279\"> finger_on<\/span><span style=\"color: #797593\">[<\/span><span style=\"color: #D7827E\">4<\/span><span style=\"color: #797593\">]<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">1<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                        gesture <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #EA9D34\">&#39;Left&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                    <\/span><span style=\"color: #286983\">elif<\/span><span style=\"color: #575279\"> finger_on<\/span><span style=\"color: #797593\">[<\/span><span style=\"color: #D7827E\">1<\/span><span style=\"color: #797593\">]<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">1<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                        gesture <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #EA9D34\">&#39;Up&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                <\/span><span style=\"color: #286983\">elif<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #B4637A; font-style: italic\">sum<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #575279\">finger_on<\/span><span style=\"color: #797593\">)<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">2<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                    <\/span><span style=\"color: #286983\">if<\/span><span style=\"color: #575279\"> finger_on<\/span><span style=\"color: #797593\">[<\/span><span style=\"color: #D7827E\">0<\/span><span style=\"color: #797593\">]<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> finger_on<\/span><span style=\"color: #797593\">[<\/span><span style=\"color: #D7827E\">1<\/span><span style=\"color: #797593\">]<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">1<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                        gesture <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #EA9D34\">&#39;Down&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                    <\/span><span style=\"color: #286983\">elif<\/span><span style=\"color: #575279\"> finger_on<\/span><span style=\"color: #797593\">[<\/span><span style=\"color: #D7827E\">1<\/span><span style=\"color: #797593\">]<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> finger_on<\/span><span style=\"color: #797593\">[<\/span><span style=\"color: #D7827E\">2<\/span><span style=\"color: #797593\">]<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">1<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                        gesture <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #EA9D34\">&#39;Come&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                <\/span><span style=\"color: #286983\">elif<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #B4637A; font-style: italic\">sum<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #575279\">finger_on<\/span><span style=\"color: #797593\">)<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">3<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">and<\/span><span style=\"color: #575279\"> finger_on<\/span><span style=\"color: #797593\">[<\/span><span style=\"color: #D7827E\">1<\/span><span style=\"color: #797593\">]<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> finger_on<\/span><span style=\"color: #797593\">[<\/span><span style=\"color: #D7827E\">2<\/span><span style=\"color: #797593\">]<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> finger_on<\/span><span style=\"color: #797593\">[<\/span><span style=\"color: #D7827E\">3<\/span><span style=\"color: #797593\">]<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">1<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                    gesture <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #EA9D34\">&#39;Away&#39;<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#faf4ed;color:#625c88;font-size:12px;line-height:1;position:relative\">Python<\/span><\/div>\n\n\n\n<p>We compare each fingers one by one and record into array <strong>finger_on<\/strong>, 1 represent open and 0 represent to close. By mapping this to our target gesture, <\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><a href=\"http:\/\/bversion.com\/WordPress\/wp-content\/uploads\/2023\/09\/image-2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/bversion.com\/WordPress\/wp-content\/uploads\/2023\/09\/image-2.png\" alt=\"\" class=\"wp-image-1204\" style=\"width:338px;height:226px\" width=\"338\" height=\"226\" srcset=\"https:\/\/bversion.com\/WordPress\/wp-content\/uploads\/2023\/09\/image-2.png 817w, https:\/\/bversion.com\/WordPress\/wp-content\/uploads\/2023\/09\/image-2-300x201.png 300w, https:\/\/bversion.com\/WordPress\/wp-content\/uploads\/2023\/09\/image-2-768x514.png 768w\" sizes=\"auto, (max-width: 338px) 100vw, 338px\" \/><\/a><\/figure>\n<\/div>\n\n\n<ul class=\"wp-block-list\">\n<li>Left &#8211; <strong>finger_on<\/strong> = [0, 0, 0, 0, 1]<\/li>\n\n\n\n<li>Right &#8211; <strong>finger_on<\/strong> = [1, 0, 0, 0, 0]<\/li>\n\n\n\n<li>Up &#8211; <strong>finger_on<\/strong> = [0, 1, 0, 0, 0] <\/li>\n\n\n\n<li>Down &#8211; <strong>finger_on<\/strong> = [1, 1, 0, 0, 0]<\/li>\n\n\n\n<li>Come &#8211; <strong>finger_on<\/strong> = [0, 1, 1, 0, 0]<\/li>\n\n\n\n<li>Away &#8211; <strong>finger_on<\/strong> = [0, 1, 1, 1, 0]<\/li>\n\n\n\n<li>Stop &#8211; <strong>finger_on<\/strong> = [0, 0, 0, 0, 0] <\/li>\n\n\n\n<li>Land &#8211; <strong>finger_on<\/strong> = [1, 1, 1, 1, 1]<\/li>\n<\/ul>\n\n\n\n<p>Then, we use if\/then loops to determinate variable <strong>gesture <\/strong>according to the <strong>finger_on<\/strong> result.<\/p>\n\n\n\n<p><mark style=\"background-color:#ea9629\" class=\"has-inline-color has-dark-gray-color\"> It may be fun if we use binary numbers to represent the  above gesture determination.<\/mark><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Drone Movement Control<\/h2>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#575279;--cbp-line-number-start:141;--cbp-line-number-width:19.796875px;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#faf4ed\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><pre class=\"shiki rose-pine-dawn\" style=\"background-color: #faf4ed\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #286983\">while<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">True<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">    hV <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> dV <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> vV <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> rV <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">    <\/span><span style=\"color: #286983\">if<\/span><span style=\"color: #575279\"> gesture <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #EA9D34\">&#39;Land&#39;<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        <\/span><span style=\"color: #286983\">break<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">    <\/span><span style=\"color: #286983\">elif<\/span><span style=\"color: #575279\"> gesture <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #EA9D34\">&#39;Stop&#39;<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">or<\/span><span style=\"color: #575279\"> gesture <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #EA9D34\">&#39;Unknown&#39;<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        hV <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> dV <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> vV <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> rV <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">    <\/span><span style=\"color: #286983\">elif<\/span><span style=\"color: #575279\"> gesture <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #EA9D34\">&#39;Right&#39;<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        hV <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">-<\/span><span style=\"color: #D7827E\">15<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">    <\/span><span style=\"color: #286983\">elif<\/span><span style=\"color: #575279\"> gesture <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #EA9D34\">&#39;Left&#39;<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        hV <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">15<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">    <\/span><span style=\"color: #286983\">elif<\/span><span style=\"color: #575279\"> gesture <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #EA9D34\">&#39;Up&#39;<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        vV <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">20<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">    <\/span><span style=\"color: #286983\">elif<\/span><span style=\"color: #575279\"> gesture <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #EA9D34\">&#39;Down&#39;<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        vV <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">-<\/span><span style=\"color: #D7827E\">20<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">    <\/span><span style=\"color: #286983\">elif<\/span><span style=\"color: #575279\"> gesture <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #EA9D34\">&#39;Come&#39;<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        dV <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">15<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">    <\/span><span style=\"color: #286983\">elif<\/span><span style=\"color: #575279\"> gesture <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #EA9D34\">&#39;Away&#39;<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        dV <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">-<\/span><span style=\"color: #D7827E\">15<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">    tello<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">send_rc_control<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #575279\">hV<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #575279\"> dV<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #575279\"> vV<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #575279\"> rV<\/span><span style=\"color: #797593\">)<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#faf4ed;color:#625c88;font-size:12px;line-height:1;position:relative\">Python<\/span><\/div>\n\n\n\n<p>With the real-time&nbsp;global variable <strong>gesture<\/strong> from the&nbsp;<strong>hand_detection()<\/strong>, we use this variable to command the drone movement, with the <strong>SEND_RC_CONTROL<\/strong> command.<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes has-small-font-size\"><table><tbody><tr><td>Horizontal<\/td><td>-100 &#8211; 0 to move left<\/td><td>0 &#8211; 100 to move right<\/td><\/tr><tr><td>Depth <\/td><td>-100 &#8211; 0 to move backward<\/td><td>0 &#8211; 100 to move forward<\/td><\/tr><tr><td>Vertial<\/td><td>-100 &#8211; 0 to move down<\/td><td>0 -100 to move up<\/td><\/tr><tr><td>Rotation<\/td><td>-100 &#8211; 0 to rotate anti-clockwsie<\/td><td> 0 &#8211; 100 to rotate clockwise<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">SEND_RC_CONTROL(Horizontal velocity, Depth velocity, Vertial velocity, Rotation velocity)<\/figcaption><\/figure>\n\n\n\n<p>Unlike the Face Detection project, we used <strong>hV <\/strong>to control the Left and Right movement instead of rotation- <strong>rV<\/strong>. Oh.. the &#8216;Left\/Right&#8217; in the program is from the user&#8217;s point of view, but the drone camera view, is reversed.<\/p>\n\n\n\n<p>That&#8217;s all for the project. It is quite straightforward and similar to the Face Detection. Please leave a comment for any inputs and comment. I am now studying how to do swarm flying with 3 Tello Edu, just cleaned up some roadblockers&#8230; <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">New Command &#8211; Follow<\/h2>\n\n\n\n<p>Just pop-up that I can add a &#8216;follow&#8217; command, like what was doing for the face detection and tracking. I believe that we just need to copy &amp; paste the code from the Face Detection project with some modifications. <\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><a href=\"http:\/\/bversion.com\/WordPress\/wp-content\/uploads\/2023\/09\/Marked-Follow.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/bversion.com\/WordPress\/wp-content\/uploads\/2023\/09\/Marked-Follow.jpg\" alt=\"\" class=\"wp-image-1255\" style=\"object-fit:cover;width:368px;height:484px\" width=\"368\" height=\"484\"\/><\/a><\/figure>\n\n\n\n<p>Above is the hand sign for &#8216;follow&#8217;, go ahead to modify the original code with belows,<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#575279;--cbp-line-number-start:25;--cbp-line-number-width:13.203125px;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#faf4ed\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><pre class=\"shiki rose-pine-dawn\" style=\"background-color: #faf4ed\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #575279\">        <\/span><span style=\"color: #286983\">global<\/span><span style=\"color: #575279\"> gesture<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        <\/span><span style=\"color: #286983\">global<\/span><span style=\"color: #575279\"> hand_center <\/span><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\"> New line for hand follow<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#faf4ed;color:#625c88;font-size:12px;line-height:1;position:relative\">Python<\/span><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#575279;--cbp-line-number-start:107;--cbp-line-number-width:19.796875px;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#faf4ed\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><pre class=\"shiki rose-pine-dawn\" style=\"background-color: #faf4ed\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #575279\">                <\/span><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\"> New line for hand follow    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                <\/span><span style=\"color: #286983\">elif<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #B4637A; font-style: italic\">sum<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #575279\">finger_on<\/span><span style=\"color: #797593\">)<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">3<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">and<\/span><span style=\"color: #575279\"> finger_on<\/span><span style=\"color: #797593\">[<\/span><span style=\"color: #D7827E\">0<\/span><span style=\"color: #797593\">]<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> finger_on<\/span><span style=\"color: #797593\">[<\/span><span style=\"color: #D7827E\">1<\/span><span style=\"color: #797593\">]<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> finger_on<\/span><span style=\"color: #797593\">[<\/span><span style=\"color: #D7827E\">2<\/span><span style=\"color: #797593\">]<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">1<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                    gesture <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #EA9D34\">&#39;Follow&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                    <\/span><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\">Apply Shoelace formula to calculate the palm size<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                    palm_vertexs <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #797593\">[<\/span><span style=\"color: #D7827E\">0<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #D7827E\">1<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #D7827E\">2<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #D7827E\">5<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #D7827E\">9<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #D7827E\">13<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #D7827E\">17<\/span><span style=\"color: #797593\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                    area <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">0<\/span><span style=\"color: #575279\">                    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                    <\/span><span style=\"color: #286983\">for<\/span><span style=\"color: #575279\"> i <\/span><span style=\"color: #286983\">in<\/span><span style=\"color: #575279\"> palm_vertexs<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                        x1<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #575279\"> y1 <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> my_hand<\/span><span style=\"color: #797593\">[<\/span><span style=\"color: #575279\">i<\/span><span style=\"color: #797593\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                        x2<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #575279\"> y2 <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> my_hand<\/span><span style=\"color: #797593\">[(<\/span><span style=\"color: #575279\">i <\/span><span style=\"color: #286983\">+<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">1<\/span><span style=\"color: #797593\">)<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">%<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">7<\/span><span style=\"color: #797593\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                        area <\/span><span style=\"color: #286983\">+=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #575279\">x1 <\/span><span style=\"color: #286983\">*<\/span><span style=\"color: #575279\"> y2<\/span><span style=\"color: #797593\">)<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">-<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #575279\">x2 <\/span><span style=\"color: #286983\">*<\/span><span style=\"color: #575279\"> y1<\/span><span style=\"color: #797593\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                    area <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">0.5<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">*<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #B4637A; font-style: italic\">abs<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #575279\">area<\/span><span style=\"color: #797593\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">                    hand_center <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> my_hand<\/span><span style=\"color: #797593\">[<\/span><span style=\"color: #D7827E\">0<\/span><span style=\"color: #797593\">][<\/span><span style=\"color: #D7827E\">0<\/span><span style=\"color: #797593\">],<\/span><span style=\"color: #575279\"> my_hand<\/span><span style=\"color: #797593\">[<\/span><span style=\"color: #D7827E\">0<\/span><span style=\"color: #797593\">][<\/span><span style=\"color: #D7827E\">1<\/span><span style=\"color: #797593\">],<\/span><span style=\"color: #575279\"> area<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#faf4ed;color:#625c88;font-size:12px;line-height:1;position:relative\">Python<\/span><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#575279;--cbp-line-number-start:146;--cbp-line-number-width:19.796875px;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#faf4ed\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><pre class=\"shiki rose-pine-dawn\" style=\"background-color: #faf4ed\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #575279\">gesture <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #EA9D34\">&#39;Unknown&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">hand_center <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">480<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">360<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">28000<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\"> New line for hand follow<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#faf4ed;color:#625c88;font-size:12px;line-height:1;position:relative\">Python<\/span><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#575279;--cbp-line-number-start:179;--cbp-line-number-width:19.796875px;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#faf4ed\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><pre class=\"shiki rose-pine-dawn\" style=\"background-color: #faf4ed\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #575279\">    <\/span><span style=\"color: #797593; font-style: italic\">#<\/span><span style=\"color: #9893A5; font-style: italic\"> New line for hand follow<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">    <\/span><span style=\"color: #286983\">elif<\/span><span style=\"color: #575279\"> gesture <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #EA9D34\">&#39;Follow&#39;<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        x<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #575279\"> y<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #575279\"> size <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> hand_center<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        <\/span><span style=\"color: #286983\">if<\/span><span style=\"color: #575279\"> x <\/span><span style=\"color: #286983\">&gt;<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">480<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">            rV <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">-<\/span><span style=\"color: #56949F\">int<\/span><span style=\"color: #797593\">((<\/span><span style=\"color: #575279\">x <\/span><span style=\"color: #286983\">-<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">480<\/span><span style=\"color: #797593\">)<\/span><span style=\"color: #286983\">\/<\/span><span style=\"color: #D7827E\">4.8<\/span><span style=\"color: #797593\">)<\/span><span style=\"color: #575279\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        <\/span><span style=\"color: #286983\">elif<\/span><span style=\"color: #575279\"> x <\/span><span style=\"color: #286983\">&lt;<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">480<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">            rV <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">+<\/span><span style=\"color: #56949F\">int<\/span><span style=\"color: #797593\">((<\/span><span style=\"color: #D7827E\">480<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">-<\/span><span style=\"color: #575279\"> x<\/span><span style=\"color: #797593\">)<\/span><span style=\"color: #286983\">\/<\/span><span style=\"color: #D7827E\">4.8<\/span><span style=\"color: #797593\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        <\/span><span style=\"color: #286983\">else<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">            rV <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        <\/span><span style=\"color: #286983\">if<\/span><span style=\"color: #575279\"> y <\/span><span style=\"color: #286983\">&gt;<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">360<\/span><span style=\"color: #797593\">:<\/span><span style=\"color: #575279\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">            vV <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">-<\/span><span style=\"color: #56949F\">int<\/span><span style=\"color: #797593\">((<\/span><span style=\"color: #575279\">y <\/span><span style=\"color: #286983\">-<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">360<\/span><span style=\"color: #797593\">)<\/span><span style=\"color: #286983\">\/<\/span><span style=\"color: #D7827E\">3.6<\/span><span style=\"color: #797593\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        <\/span><span style=\"color: #286983\">elif<\/span><span style=\"color: #575279\"> y <\/span><span style=\"color: #286983\">&lt;<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">360<\/span><span style=\"color: #797593\">:<\/span><span style=\"color: #575279\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">            vV <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #56949F\">int<\/span><span style=\"color: #797593\">((<\/span><span style=\"color: #D7827E\">360<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">-<\/span><span style=\"color: #575279\"> y<\/span><span style=\"color: #797593\">)<\/span><span style=\"color: #286983\">\/<\/span><span style=\"color: #D7827E\">3.6<\/span><span style=\"color: #797593\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        <\/span><span style=\"color: #286983\">else<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">            vV <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        <\/span><span style=\"color: #286983\">if<\/span><span style=\"color: #575279\"> size <\/span><span style=\"color: #286983\">&gt;<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">30000<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">            dV <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">-<\/span><span style=\"color: #D7827E\">15<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        <\/span><span style=\"color: #286983\">elif<\/span><span style=\"color: #575279\"> size <\/span><span style=\"color: #286983\">&lt;<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">26000<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">            dV <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">15<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">        <\/span><span style=\"color: #286983\">else<\/span><span style=\"color: #797593\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">            dV <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">0<\/span><span style=\"color: #575279\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">    tello<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #575279\">send_rc_control<\/span><span style=\"color: #797593\">(<\/span><span style=\"color: #575279\">hV<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #575279\"> dV<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #575279\"> vV<\/span><span style=\"color: #797593\">,<\/span><span style=\"color: #575279\"> rV<\/span><span style=\"color: #797593\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#faf4ed;color:#625c88;font-size:12px;line-height:1;position:relative\">Python<\/span><\/div>\n\n\n\n<p>That&#8217;s all!<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Shoelace Formula<\/h3>\n\n\n\n<p>For the above codes, we use landmarks &#8211; 0, 1, 2, 5, 9, 13 &amp; 17 to calculate the area of the palm, and this number determines how close the palm is to the drone, we target a range of 26000 &#8211; 30000. Then, we command it to fly toward or away from the hand, just similar to the face tracking in the last project.<\/p>\n\n\n\n<p>But, what I want to highlight is the palm area calculation, it led me to learn about the Shoelace Formula, which is a very interesting and powerful formula. I don&#8217;t remember that I learned this before, maybe returned this to my teacher already &#x1f60e;. Anyway, have a look at the below video, it&#8217;s worth watching and understanding the Shoelace Formula.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Gauss&#039;s magic shoelace area formula and its calculus companion\" width=\"604\" height=\"340\" src=\"https:\/\/www.youtube.com\/embed\/0KjG8Pg6LGk?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Once I did the face detection project, it made me easier to understand gesture recognition, you can do it too. It gives me more solid fundamentals to start with deep learning studying, I want to create my objection recognition model and have the drone fly with this. Before that, I like to try body detection &hellip; <a href=\"https:\/\/bversion.com\/WordPress\/2023\/09\/22\/drone-programming-gesture-control\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Drone Programming &#8211; Gesture Control<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":6,"featured_media":1231,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"cybocfi_hide_featured_image":"yes","footnotes":""},"categories":[14,12],"tags":[],"class_list":["post-1198","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-drone_control","category-features"],"_links":{"self":[{"href":"https:\/\/bversion.com\/WordPress\/wp-json\/wp\/v2\/posts\/1198","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bversion.com\/WordPress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bversion.com\/WordPress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bversion.com\/WordPress\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/bversion.com\/WordPress\/wp-json\/wp\/v2\/comments?post=1198"}],"version-history":[{"count":22,"href":"https:\/\/bversion.com\/WordPress\/wp-json\/wp\/v2\/posts\/1198\/revisions"}],"predecessor-version":[{"id":1267,"href":"https:\/\/bversion.com\/WordPress\/wp-json\/wp\/v2\/posts\/1198\/revisions\/1267"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/bversion.com\/WordPress\/wp-json\/wp\/v2\/media\/1231"}],"wp:attachment":[{"href":"https:\/\/bversion.com\/WordPress\/wp-json\/wp\/v2\/media?parent=1198"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bversion.com\/WordPress\/wp-json\/wp\/v2\/categories?post=1198"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bversion.com\/WordPress\/wp-json\/wp\/v2\/tags?post=1198"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}