Home

Awesome

<h2 align="center">Affine Transformation of Virtual Object</h2> <p align="justify"> A convolutional neural network (CNN) based thumb and index fingertip detection system are presented here for seamless interaction with a virtual 3D object in the virtual environment. First, a two-stage CNN is employed to detect the hand and fingertips, and using the information of the fingertip position, the scale, rotation, translation, and in general, the affine transformation of the virtual object is performed. </p>

Update

This is the version 2.0 that includes a more generalized affine transformation of virtual objects in the virtual environment with more experimentation and analysis. Previous versions only include the geometric transformation of a virtual 3D object with respect to a finger gesture. To get the previous version visit here.

GitHub stars GitHub forks Downloads GitHub license

Paper

Paper for the affine transformation of the virtual 3D object has been published in Virtual Reality & Intelligent Hardware, Elsevier Science Publishers in 2020. To get more detail, please go through the paper. Paper for the geometric transformation of the virtual object v1.0 has also been published. For more detail, please go through this paper. If you use the code or data from the project, please cite the following papers:

Paper

Affine transformation of virtual 3D object using 2D localization of fingertips 🔗

@article{alam2020affine,
  title={Affine transformation of virtual 3D object using 2D localization of fingertips},
  author={Alam, Mohammad Mahmudul and Rahman, SM Mahbubur},
  journal={Virtual Reality \& Intelligent Hardware},
  volume={2},
  number={6},
  pages={534--555},
  year={2020},
  publisher={Elsevier}
}

Paper

Detection and Tracking of Fingertips for Geometric Transformation of Objects in Virtual Environment 🔗

@inproceedings{alam2019detection,
  title={Detection and Tracking of Fingertips for Geometric Transformation of Objects in Virtual Environment},
  author={Alam, Mohammad Mahmudul and Rahman, SM Mahbubur},
  booktitle={2019 IEEE/ACS 16th International Conference on Computer Systems and Applications (AICCSA)},
  address = {Abu Dhabi, United Arab Emirates},
  pages={1--8},
  year={2019},
  organization={IEEE}
}

System Overview

Here it the real-time demo of the scale, rotation, translation, and overall affine transformation of the virtual object using finger interaction.

<p align="center"> <img src="https://user-images.githubusercontent.com/37298971/78501859-96a26b00-777f-11ea-9f33-977ea8feda09.gif" width="640"> </p>
<img src="https://user-images.githubusercontent.com/37298971/82154840-6d9eeb00-9892-11ea-986d-6314a21d5283.gif"><img src="https://user-images.githubusercontent.com/37298971/82154849-7abbda00-9892-11ea-84e9-4e1b5508c1e8.gif"><img src="https://user-images.githubusercontent.com/37298971/82154850-81e2e800-9892-11ea-8d7f-7d6830978a49.gif">

Dataset

To train the hand and fingertip detection model two different datasets are used. One is a self-made publicly released dataset called TI1K Dataset which contains 1000 images with the annotations of hand and fingertip position and another one is Scut-Ego-Gesture Dataset.

Requirements

Downloads

Experimental Setup

The experimental setup has a server and client-side. Fingertip detection and tracking and all other machine learning stuff are programmed in the server-side using Python. On the client-side, the virtual environment is created using Unity along with the Vuforia software development kit (SDK). To locate and track a virtual object using the webcam, Vuforia needs marker assistance. For that purpose, a marker is designed which works as an image target. The marker/ folder contains the pdf of the designed marker. To use the system print a copy of the marker.

<p align="center"> <img src="https://user-images.githubusercontent.com/37298971/57572552-c9dc5d00-743d-11e9-9f1c-fcf9d97517b5.jpg" width="800"> </p>

How to Use

First, to run the server-side directly run 'server.py'. It will wait until the client-side (Unity) is starting to send images to the server.

directory > python server.py
<p align="center"> <img src="https://user-images.githubusercontent.com/37298971/57572729-97802f00-7440-11e9-9c5c-fa4d6427d8ec.png" width="700"> </p>

Open the 'Unity Affine Transformation' environment using Unity and hit the play button. Make sure a webcam is connected.

<p align="center"> <img src="https://user-images.githubusercontent.com/37298971/57572793-5b010300-7441-11e9-96cb-07bec8f818b1.png" width="700"> </p>

Bring your hand in front of the webcam and interact with the virtual object using your finger gesture.

<!--- ## Demo <p align="center"> <img src="https://user-images.githubusercontent.com/37298971/60720908-07e19300-9f4e-11e9-8e38-f322d81a9abd.gif" width="700"> </p> -->