private void TargetMatch()
    {
        TakePic();

        targetImg = targetTex.GetRawTextureData();

        if (SkiingController.onGame)
        {
            OcvMechanics.MatchTemplateImg(camImg, camWidth, camHeight, targetImg, targetTex.width, targetTex.height, out matchVal, out matchPosX, out matchPosY);
        }
    }
    private void NewTarget()
    {
        TakePic();
        //byte[] bytes = tex.EncodeToPNG();
        //File.WriteAllBytes(Application.persistentDataPath + "/frame.png", bytes);

        if (SkiingController.onGame)
        {
            OcvMechanics.GetTarget(camImg, camWidth, camHeight, out targetCenterX, out targetCenterY);
        }

        CutTarget();
        lostTarget    = false;
        thereIsTarget = true;

        //transform.position = new Vector3(Math.Abs(targetCenterX - cam.width), targetCenterY, 0);
    }
    void LateUpdate()
    {
        if (settingBackground)  //Temporizer for the player to know how much time ha has to stay in the correct side
        {
            settingBackgroundTemporizer -= Time.deltaTime;
            instructionsTxt.text         = "Párate aquí " + ((int)settingBackgroundTemporizer).ToString();
        }
        if (cam.isPlaying && backgroundB != null && cam.didUpdateThisFrame)
        {
            tex.SetPixels32(cam.GetPixels32());
            tex.Apply();
            camImg = tex.GetRawTextureData();
            OcvMechanics.GetBodyTrack(camImg, cam.width, cam.height, backgroundB, hullPoints, out hullLen);

            if (hullLen > 2)
            {
                CreateMesh();
            }
        }
    }
Example #4
0
 void MarchCaptureAcc()
 {
     if (greenLight)
     {
         xAcc = Input.acceleration.x;
         yAcc = Input.acceleration.y;
         zAcc = Input.acceleration.z;
         if (kernellTime < (oneStep * initStepCount))    // Waits the amount of time corresponding to the initial steps
         {
             //state.text = ("Adquiring data for Kernell");
             xKernellData = xKernellData.Concat(new float[] { xAcc }).ToArray();
             yKernellData = yKernellData.Concat(new float[] { yAcc }).ToArray();
             zKernellData = zKernellData.Concat(new float[] { zAcc }).ToArray();
         }
         else
         {
             if (capKernell)     //Esto solo ocurre una vez para seleccionar el kernell de los datos almacenados
             {
                 capKernell = false;
                 //Detectar kernell
                 //Primero sobre el eje con mayor dispercion
                 float  Average = xKernellData.Average();
                 float  sumOfSquaresOfDifferences = xKernellData.Select(val => (val - Average) * (val - Average)).Sum();
                 double xSd = Math.Sqrt(sumOfSquaresOfDifferences / xKernellData.Length);
                 Average = yKernellData.Average();
                 sumOfSquaresOfDifferences = yKernellData.Select(val => (val - Average) * (val - Average)).Sum();
                 double ySd = Math.Sqrt(sumOfSquaresOfDifferences / yKernellData.Length);
                 Average = zKernellData.Average();
                 sumOfSquaresOfDifferences = zKernellData.Select(val => (val - Average) * (val - Average)).Sum();
                 double zSd = Math.Sqrt(sumOfSquaresOfDifferences / zKernellData.Length);
                 //state.text = ("Std" + xSd.ToString() + ySd.ToString() + zSd.ToString());
                 if (ySd > xSd && ySd > zSd)
                 {
                     CaptureKernell(yKernellData);
                     //state.text = ("Y selected");
                     accSelected = new Vector3(0, 1, 0);
                 }
                 else if (zSd > xSd && zSd > ySd)
                 {
                     CaptureKernell(zKernellData);
                     //state.text = ("Z selected");
                     accSelected = new Vector3(0, 0, 1);
                 }
                 else
                 {
                     CaptureKernell(xKernellData);
                     //state.text = ("X selected");
                     accSelected = new Vector3(1, 0, 0);
                 }
                 //state.text = ("Kernell: " + string.Join(",", kernell.Select(p => p.ToString()).ToArray()));
             }
             else    // After having the kernell, it is used to counter steps
             {
                 //Detectar pasos con el kernell
                 //state.text = ("Using Kernell");
                 Array.Copy(realTimeData, 0, realTimeData, 1, realTimeData.Length - 1);
                 realTimeData[0] = xAcc * accSelected.x + yAcc * accSelected.y + zAcc * accSelected.z;
                 //state.text = ("Real Time Data: " + string.Join(",", realTimeData.Select(p => p.ToString()).ToArray()));
                 float result;
                 unsafe
                 {
                     fixed(float *src = &realTimeData[0])
                     {
                         fixed(float *tmp = &kernell[0])
                         {
                             result = OcvMechanics.MatchTemplate(src, realTimeData.Length, tmp, kernell.Length);
                             stepRestriction++;      //No cuenta pasos dentro de 0.5s despupes del anterior
                         }
                     }
                 }
                 if (result > presision && stepRestriction > 5)
                 {
                     steps++;
                     stepRestriction = 0;
                 }
                 if (stepRestriction > 40)   // Reinicia la captura del kernell después de 3 segundos
                 {
                     ResetKernell();
                     //Debug.Log("Kernell lost, getting new");
                 }
             }
         }
     }
 }