Exemplo n.º 1
0
    /* Initialize All Members*/
    public void Init(ASLAlphabetDetectedHandler letterCallback = null, ASLSimilarityDetectedHandler similarityCallback = null)
    {
        MyLeapListener listener;

        Leap.Controller controller;
        if (_instance != null)
        {
            listener   = _instance.leapListener;
            controller = _instance.leapController;
        }
        else
        {
            listener   = new MyLeapListener();
            controller = new Leap.Controller(listener);
        }
        _instance = this;

        // Set-up the Listener
        leapListener   = listener;
        leapController = controller;

        // Initialize Local Data
        letterHandler     = letterCallback;
        similarityHandler = similarityCallback;

        lastLetterTime    = DateTime.Now.Ticks;
        currentLetter     = INVALID_ASL_LETTER;
        currentSimilarity = ASLTest.INVALID_ASL_TEST;
        lastResult        = INVALID_ASL_LETTER;

        FirstPassInit();
        SecondPassInit();
    }
Exemplo n.º 2
0
    /* ========================= Initialize Tracking Algorithms ============================ */

    /* Method for the Distance Between Palm and Pointer */
    private static void OnLeapMotionUpdate(Leap.Hand hand)
    {
        // Get Instance
        InputManager IM = _instance;

        if (IM == null)
        {
            return;
        }

        // Complete First Pass
        FingerLift[] fingerTest       = IM.RetrieveFingerLift(hand);
        ASLTest      firstPassResults = IM.FirstPassAlgorithm(fingerTest);

        // Call Similarity Handler
        IM.UpdateCurrentSimilarity(firstPassResults);

        /*if(IM.similarityHandler != null)
         * {
         *      IM.similarityHandler(firstPassResults);
         * }*/

        if (firstPassResults == ASLTest.INVALID_ASL_TEST)
        {
            IM.UpdateCurrentLetter(INVALID_ASL_LETTER);
            return;
        }

        // Complete Second Pass
        char secondPassResults = IM.SecondPassAlgorithm(firstPassResults, hand);

        // Determine if Successful
        bool finalResults = (secondPassResults >= 'A' && secondPassResults <= 'Z') || (secondPassResults >= 'a' && secondPassResults <= 'z');

        if (IM.lastResult != secondPassResults)
        {
            IM.lastResult     = secondPassResults;
            IM.lastLetterTime = DateTime.Now.Ticks;
        }

        // Call Letter Handler
        if (finalResults)
        {
            if (((DateTime.Now.Ticks - IM.lastLetterTime) / TimeSpan.TicksPerMillisecond) >= (IM.dwellTime * 1000))
            {
                IM.UpdateCurrentLetter(secondPassResults);
            }
            else
            {
                IM.UpdateCurrentLetter(INVALID_ASL_LETTER);
            }
        }
        else
        {
            IM.UpdateCurrentLetter(INVALID_ASL_LETTER);
        }
    }
Exemplo n.º 3
0
    /* Returns the alphabet that this algorithm has detected, a non-alphabet (whitespace) otherwise */
    private char SecondPassAlgorithm(ASLTest test, Leap.Hand hand)
    {
        // (For Reassurance Purposes)
        if (hand == null)
        {
            Debug.Log("Lift Result is Null. This should not happen.");
            return(INVALID_ASL_LETTER);
        }

        // Call Respective ASL Test (using fancy delegates!)
        return(DoASLTestCall[(int)test](hand));
    }
Exemplo n.º 4
0
 /* Set Current Similarity Result */
 private void UpdateCurrentSimilarity(ASLTest test)
 {
     if (currentSimilarity != test)
     {
         currentSimilarity = test;
         if (similarityHandler != null)
         {
             if (debugMode)
             {
                 Debug.Log("ASL Similary Handler Called. Value: " + test);
             }
             similarityHandler(test);
         }
     }
 }
Exemplo n.º 5
0
    /* ========================= Initialize First-Pass Algorithms ========================== */
    void FirstPassInit()
    {
        // Distance Threshold Initialize
        DownDistanceThreshold = new int[5];
        DownDistanceThreshold[(int)MyFingerType.TYPE_THUMB]  = 10;
        DownDistanceThreshold[(int)MyFingerType.TYPE_INDEX]  = 65;          //70;
        DownDistanceThreshold[(int)MyFingerType.TYPE_MIDDLE] = 65;          //70;
        DownDistanceThreshold[(int)MyFingerType.TYPE_RING]   = 65;          //70;
        DownDistanceThreshold[(int)MyFingerType.TYPE_PINKY]  = 60;          //60;

        MiddleDistanceThreshold = new int[5];
        MiddleDistanceThreshold[(int)MyFingerType.TYPE_THUMB]  = 50;
        MiddleDistanceThreshold[(int)MyFingerType.TYPE_INDEX]  = 80;
        MiddleDistanceThreshold[(int)MyFingerType.TYPE_MIDDLE] = 80;
        MiddleDistanceThreshold[(int)MyFingerType.TYPE_RING]   = 80;
        MiddleDistanceThreshold[(int)MyFingerType.TYPE_PINKY]  = 70;

        // ASL Test Map Initialize
        ASLTestMapping = new ASLTest[3][][][][];
        for (int i = 0; i < 3; ++i)
        {
            ASLTestMapping[i] = new ASLTest[3][][][];
            for (int j = 0; j < 3; ++j)
            {
                ASLTestMapping[i][j] = new ASLTest[3][][];
                for (int k = 0; k < 3; ++k)
                {
                    ASLTestMapping[i][j][k] = new ASLTest[3][];
                    for (int l = 0; l < 3; ++l)
                    {
                        ASLTestMapping[i][j][k][l] = new ASLTest[3];
                        for (int m = 0; m < 3; ++m)
                        {
                            ASLTestMapping[i][j][k][l][m] = ASLTest.INVALID_ASL_TEST;
                        }
                    }
                }
            }
        }

        int DOWN = (int)FingerLift.FINGER_DOWN;
        int MID_ = (int)FingerLift.FINGER_MIDDLE;
        int UP__ = (int)FingerLift.FINGER_UP;

        // Initialize the ASLTest Function calls to its respective ASL Test enumeration

        //=============== TEST A-E-M-N-S-T Test ==========================
        //_____________THMB__INDX__MID___RING__PNKY_______________________
        ASLTestMapping[DOWN][DOWN][DOWN][DOWN][DOWN] = ASLTest.TEST_AEMNST;
        ASLTestMapping[MID_][DOWN][DOWN][DOWN][DOWN] = ASLTest.TEST_AEMNST;

        //=============== TEST H-K-R-U-V Test ============================
        //_____________THMB__INDX__MID___RING__PNKY_______________________
        ASLTestMapping[DOWN][UP__][UP__][DOWN][DOWN] = ASLTest.TEST_HKRUV;
        ASLTestMapping[MID_][UP__][UP__][DOWN][DOWN] = ASLTest.TEST_HKRUV;

        //================ TEST D-G-P-Q-Z Test ===========================
        //_____________THMB__INDX__MID___RING__PNKY_______________________
        ASLTestMapping[DOWN][UP__][DOWN][DOWN][DOWN] = ASLTest.TEST_DGPQZ;
        ASLTestMapping[MID_][UP__][DOWN][DOWN][DOWN] = ASLTest.TEST_DGPQZ;

        ASLTestMapping[MID_][UP__][DOWN][DOWN][DOWN] = ASLTest.TEST_DGPQZ;
        ASLTestMapping[MID_][UP__][DOWN][DOWN][MID_] = ASLTest.TEST_DGPQZ;
        ASLTestMapping[MID_][UP__][DOWN][MID_][DOWN] = ASLTest.TEST_DGPQZ;
        ASLTestMapping[MID_][UP__][DOWN][MID_][MID_] = ASLTest.TEST_DGPQZ;
        ASLTestMapping[MID_][UP__][MID_][DOWN][DOWN] = ASLTest.TEST_DGPQZ;
        ASLTestMapping[MID_][UP__][MID_][DOWN][MID_] = ASLTest.TEST_DGPQZ;
        ASLTestMapping[MID_][UP__][MID_][MID_][DOWN] = ASLTest.TEST_DGPQZ;
        ASLTestMapping[MID_][UP__][MID_][MID_][MID_] = ASLTest.TEST_DGPQZ;
        ASLTestMapping[DOWN][UP__][MID_][MID_][MID_] = ASLTest.TEST_DGPQZ;

        //====================== TEST L Test =============================
        //_____________THMB__INDX__MID___RING__PNKY_______________________
        ASLTestMapping[UP__][UP__][DOWN][DOWN][DOWN] = ASLTest.TEST_L;

        //==================== TEST I-J Test =============================
        //_____________THMB__INDX__MID___RING__PNKY_______________________
        ASLTestMapping[DOWN][DOWN][DOWN][DOWN][UP__] = ASLTest.TEST_IJ;
        ASLTestMapping[MID_][DOWN][DOWN][DOWN][UP__] = ASLTest.TEST_IJ;

        //==================== TEST C-O Test =============================
        //_____________THMB__INDX__MID___RING__PNKY_______________________

        ASLTestMapping[MID_][UP__][UP__][UP__][UP__] = ASLTest.TEST_CO;
        //ASLTestMapping[MID_][UP__][UP__][UP__][MID_] = ASLTest.TEST_CO;
        //ASLTestMapping[MID_][UP__][UP__][MID_][UP__] = ASLTest.TEST_CO;
        //ASLTestMapping[MID_][UP__][UP__][MID_][MID_] = ASLTest.TEST_CO;
        //ASLTestMapping[MID_][UP__][MID_][UP__][UP__] = ASLTest.TEST_CO;
        //ASLTestMapping[MID_][UP__][MID_][UP__][MID_] = ASLTest.TEST_CO;
        //ASLTestMapping[MID_][UP__][MID_][MID_][UP__] = ASLTest.TEST_CO;
        //ASLTestMapping[MID_][UP__][MID_][MID_][MID_] = ASLTest.TEST_CO;       // Same as PQ
        //ASLTestMapping[MID_][MID_][UP__][UP__][UP__] = ASLTest.TEST_CO;
        //ASLTestMapping[MID_][MID_][UP__][UP__][MID_] = ASLTest.TEST_CO;
        //ASLTestMapping[MID_][MID_][UP__][MID_][UP__] = ASLTest.TEST_CO;
        //ASLTestMapping[MID_][MID_][UP__][MID_][MID_] = ASLTest.TEST_CO;
        //ASLTestMapping[MID_][MID_][MID_][UP__][UP__] = ASLTest.TEST_CO;
        //ASLTestMapping[MID_][MID_][MID_][UP__][MID_] = ASLTest.TEST_CO;
        //ASLTestMapping[MID_][MID_][MID_][MID_][UP__] = ASLTest.TEST_CO;
        ASLTestMapping[MID_][MID_][MID_][MID_][MID_] = ASLTest.TEST_CO;
        ASLTestMapping[DOWN][MID_][MID_][MID_][MID_] = ASLTest.TEST_CO;

        //===================== TEST B Test ==============================
        //_____________THMB__INDX__MID___RING__PNKY_______________________
        ASLTestMapping[DOWN][UP__][UP__][UP__][UP__] = ASLTest.TEST_B;

        //====================== TEST F Test =============================
        //_____________THMB__INDX__MID___RING__PNKY_______________________
        //ASLTestMapping[DOWN][DOWN][UP__][UP__][UP__] = ASLTest.TEST_F;
        ASLTestMapping[MID_][DOWN][UP__][UP__][UP__] = ASLTest.TEST_F;
        ASLTestMapping[MID_][MID_][UP__][UP__][UP__] = ASLTest.TEST_F;

        //==================== TEST W Test ===============================
        //_____________THMB__INDX__MID___RING__PNKY_______________________
        ASLTestMapping[DOWN][UP__][UP__][UP__][DOWN] = ASLTest.TEST_W;
        ASLTestMapping[DOWN][UP__][UP__][UP__][MID_] = ASLTest.TEST_W;

        /*ASLTestMapping[DOWN][MID_][UP__][UP__][DOWN] = ASLTest.TEST_W;
        *  ASLTestMapping[DOWN][UP__][UP__][MID_][DOWN] = ASLTest.TEST_W;
        *  ASLTestMapping[DOWN][MID_][UP__][MID_][DOWN] = ASLTest.TEST_W;
        *  ASLTestMapping[DOWN][UP__][MID_][UP__][DOWN] = ASLTest.TEST_W;
        *  ASLTestMapping[DOWN][MID_][MID_][UP__][DOWN] = ASLTest.TEST_W;
        *  ASLTestMapping[DOWN][UP__][MID_][MID_][DOWN] = ASLTest.TEST_W;
        *  ASLTestMapping[DOWN][MID_][MID_][MID_][DOWN] = ASLTest.TEST_W;*/

        //===================== TEST X Test ==============================
        //_____________THMB__INDX__MID___RING__PNKY_______________________
        ASLTestMapping[DOWN][MID_][DOWN][DOWN][DOWN] = ASLTest.TEST_X;
        ASLTestMapping[MID_][MID_][DOWN][DOWN][DOWN] = ASLTest.TEST_X;
        // Middle or up

        //==================== TEST Y Test ===============================
        //_____________THMB__INDX__MID___RING__PNKY_______________________
        ASLTestMapping[UP__][DOWN][DOWN][DOWN][UP__] = ASLTest.TEST_Y;
        ASLTestMapping[UP__][DOWN][DOWN][DOWN][MID_] = ASLTest.TEST_Y;
    }