Playing Racing Games using Gestures!
Do you want to play racing game without touching your keyboard keys π? Then you are at the right place π. This project is an application of Hand Detection
, that helps demonstrate and simulate Gesture-based Driving π.
- Clone this repo.
- Make sure all necessary dependencies are installed.
- Dive into the project folder & run
python run.py
in your terminal. - Wait for the program to load-up & voila π₯³ then you can play game using gestures!
- YouTube Video - GestureDriving Gameplay of DiRT 3 game
- Taking arguments from terminal
- Used argparse library to handle command-line arguments.
- Tried to make sure, the whole program is manually configurable.
- Optional Arguments:
Arg Argument Description -h --help Show Help Messages -dr --displayRunning Display the Running Processes Paths -de --displayEnlisted Display the Enlisted Processes Paths -a val --add val Number of Process Paths to be added to Collection -rm --remove Remove Process Path(s) from Collection -e --edit Edit Process Path(s) in Collection -dc --default_configuration Display Default Configuration -c --configure Run with Manual Configuration. Place "-1" to skip - Note:
-c
optional argument takes a number of arguments/values-frame_width
: width of the input camera videoframe_height
: height of the input camera videofps_div
: frames to be considered apart from each othermin_detection_conf
: minimum detection confidencemin_tracking_conf
: minimum tracking confidencemeasure
:0
for distance measure or1
for comparison measurenitrous
:0
for no-nitrous or1
for nitrous supportdir_thr_sm
: direction threshold smalldir_thr_bg
: direction threshold bigapp_flag
: apply keyboard mapping to all applications
- Displaying Running processes paths
- Used psutil library to get list of running processes paths.
- Add, remove, edit, display Collection/Enlisted processes paths
- Used basic file operations on
txt
file. - The program will only run if process's path enlisted is found to be running.
- If
No
process is enlisted, the program will run inDemo
mode.
- Used basic file operations on
- Display default configuration
- Used
inspect
module to get default configuraton arguments.
- Used
- Detecting hands in the realtime video feed
- Implementing driving actions
- Without Nitrous support
Right Thumb Down
: Acceleration (Up Arrow
)Left Thumb Down
: Reverse (Down Arrow
)Both Thumbs Up
: No Action
- With Nitrous support
Right Thumb Down
: Nitrous & Acceleration (Ctrl + Up Arrow
)Left Thumb Down
: Reverse (Down Arrow
)Both Thumbs Up
: Acceleration (Up Arrow
)
- Note: If both the thumbs are down, preference will be given to
left thumb
.
- Without Nitrous support
- Implementing turning actions
- Considered angle of rotation to make a turn.
- While angle below
dir_thr_sm
: no action. - While angle between
dir_thr_sm
&dir_thr_bg
: button is pressed & released. - While angle above
dir_thr_bg
: button is pressed until angle is no longer above.
- While angle below
- Considered angle of rotation to make a turn.
- Support for One-Hand Driving
- Driving actions will be dependent upon the hand used (left/right).
- Turning actions will take center of video frame as reference.
- Configuring Driving & Turning actions
- Can be easily re-configured with little knowledge of python π€.
- Determining if thumb is down enough
- Considered
constant*handSize
to get a threshold for determining if thumb is down on index-finger.
- Considered
- Implementing key-mappings of keyboard
- Used keyboard library for key-mappings.
- Determining if enlisted process is focused
- Used win32gui library to get
hwnd
, passing it to win32process library to get it's correspondingpid
. - This is followed by matching it to enlisted process
pid
got from psutil. - If both the pids' matches, then key-mapping are performed else not.
- This ensures key-mappings are restricted to enlisted process only.
- Used win32gui library to get
- Provide options for changing key-mappings.
- Provide GUI Interface for manual configuration.
- Improve Hand detection & tracking specially in case of high contrast.
- Improve thumb-based & turn action while playing.
- Support for multiple applications at a time.
- Support for OS other than Windows.
- Automatic start-up support when OS loads.