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(); } } }
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"); } } } } }