@startuml start ' Start of the program :Import necessary libraries; ' Import OpenCV and HandDetector
partition "Initialization" { :Initialize camera (cv2.VideoCapture); ' Open the default camera :Set camera resolution; ' Set the width and height of the video frame :Initialize hand detector; ' Initialize the hand tracking module; :Define keys for the virtual keyboard; ' Specify the keys for the keyboard layout :Define key dimensions, appearance, and other parameters; ' Set properties like color, size, and transparency }
partition "Helper Functions" { :Define draw_keys(img, key_list, hovered_key); ' Function to draw the virtual keyboard :Define get_hovered_key(lmList); ' Function to determine which key is being hovered :Define debounce(key); ' Function to prevent repeated detections of the same key :Define handle_backspace(); ' Function to handle backspace functionality }
partition "Main Loop" { while (True) { :Capture a frame from the camera; ' Read a frame from the video feed if (Frame capture unsuccessful?) then (Yes) stop; ' Exit the loop if the frame cannot be captured endif
:Detect hands using HandDetector; ' Detect hands and landmarks in the frame
if (Hands detected?) then (Yes)
:Get hand landmarks; ' Extract hand landmarks from detection
:Determine hovered key; ' Find out which key is being hovered by the fingertip
if (Hovered key detected and debounce successful?) then (Yes)
if (Hovered key == "Back") then (Yes)
:Call handle_backspace(); ' Remove the last character from the input
else (No)
:Append hovered key to pressed_keys; ' Add the detected key to the list of pressed keys
endif
:Print pressed key; ' Output the key that was pressed
endif
endif
:Draw keyboard with transparency; ' Overlay the keyboard on the video feed
:Display pressed keys on screen; ' Show recently pressed keys on the frame
:Show the image using cv2.imshow; ' Display the frame with the virtual keyboard
if (Key 'q' pressed?) then (Yes)
stop; ' Exit the loop if the 'q' key is pressed
endif
}
}
:Release camera and destroy all windows; ' Clean up resources and close windows end @enduml