// using System.Collections; // using OpenCVForUnity.CoreModule; // using OpenCVForUnity.ImgprocModule; // using OpenCVForUnity.ObjdetectModule; // using OpenCVForUnity.UnityUtils; // using OpenCVForUnity.UnityUtils.Helper; // using UnityEngine; // using UnityEngine.Networking; // using UnityEngine.SceneManagement; // using UnityEngine.UI; // namespace Assets.Scripts // { // [RequireComponent(typeof(WebCamTextureToMatHelper))] // internal class FaceDetectionController : MonoBehaviour // { // private GUIStyle fontSytle; // /// // /// The gray mat. // /// // private Mat grayMat; // /// // /// The texture. // /// // private Texture2D texture; // /// // /// The cascade. // /// // private CascadeClassifier cascade; // /// // /// The faces. // /// // private MatOfRect faces; // /// // /// The webcam texture to mat helper. // /// // private WebCamTextureToMatHelper webCamTextureToMatHelper; // private bool _isChecking; // private static object _lockObject = new object(); // /// // /// LBP_CASCADE_FILENAME // /// // protected static readonly string LBP_CASCADE_FILENAME = "lbpcascade_frontalface.xml"; // public Text text; // // Use this for initialization // private void Start() // { // webCamTextureToMatHelper = gameObject.GetComponent(); // cascade = new CascadeClassifier(); // cascade.load(Utils.getFilePath(LBP_CASCADE_FILENAME)); // // cascade.load (Utils.getFilePath ("haarcascade_frontalface_alt.xml")); // if (cascade.empty()) // { // Debug.LogError("cascade file is not loaded. Please copy from “OpenCVForUnity/StreamingAssets/” to “Assets/StreamingAssets/” folder. "); // } // webCamTextureToMatHelper.Initialize(); // webCamTextureToMatHelper.requestedIsFrontFacing = true; // } // /// // /// Raises the web cam texture to mat helper initialized event. // /// // public void OnWebCamTextureToMatHelperInitialized() // { // Debug.Log("OnWebCamTextureToMatHelperInitialized"); // Mat webCamTextureMat = webCamTextureToMatHelper.GetMat(); // texture = new Texture2D(webCamTextureMat.cols(), webCamTextureMat.rows(), TextureFormat.RGBA32, false); // gameObject.GetComponent().material.mainTexture = texture; // gameObject.transform.localScale = new Vector3(webCamTextureMat.cols(), webCamTextureMat.rows(), 1); // Debug.Log("Screen.width " + Screen.width + " Screen.height " + Screen.height + " Screen.orientation " + Screen.orientation); // float width = webCamTextureMat.width(); // float height = webCamTextureMat.height(); // float widthScale = (float)Screen.width / width; // float heightScale = (float)Screen.height / height; // if (widthScale < heightScale) // { // Camera.main.orthographicSize = (width * (float)Screen.height / (float)Screen.width) / 2; // } // else // { // Camera.main.orthographicSize = height / 2; // } // grayMat = new Mat(webCamTextureMat.rows(), webCamTextureMat.cols(), CvType.CV_8UC1); // faces = new MatOfRect(); // } // /// // /// Raises the web cam texture to mat helper disposed event. // /// // public void OnWebCamTextureToMatHelperDisposed() // { // Debug.Log("OnWebCamTextureToMatHelperDisposed"); // if (grayMat != null) // { // grayMat.Dispose(); // } // if (texture != null) // { // Texture2D.Destroy(texture); // texture = null; // } // if (faces != null) // { // faces.Dispose(); // } // } // /// // /// Raises the web cam texture to mat helper error occurred event. // /// // /// Error code. // public void OnWebCamTextureToMatHelperErrorOccurred(WebCamTextureToMatHelper.ErrorCode errorCode) // { // Debug.Log("OnWebCamTextureToMatHelperErrorOccurred " + errorCode); // } // // Update is called once per frame // private void Update() // { // if (webCamTextureToMatHelper.IsPlaying() && webCamTextureToMatHelper.DidUpdateThisFrame()) // { // Mat rgbaMat = webCamTextureToMatHelper.GetMat(); // Imgproc.cvtColor(rgbaMat, grayMat, Imgproc.COLOR_RGBA2GRAY); // Imgproc.equalizeHist(grayMat, grayMat); // if (cascade != null) // { // cascade.detectMultiScale(grayMat, faces, 1.1, 2, 2, new Size(grayMat.cols() * 0.2, grayMat.rows() * 0.2), new Size()); // } // OpenCVForUnity.CoreModule.Rect[] rects = faces.toArray(); // for (int i = 0; i < rects.Length; i++) // { // Imgproc.rectangle(rgbaMat, new Point(rects[i].x, rects[i].y), new Point(rects[i].x + rects[i].width, rects[i].y + rects[i].height), new Scalar(255, 0, 0, 255), 2); // } // Utils.fastMatToTexture2D(rgbaMat, texture); // if (rects.Length > 0) // { // StartCoroutine(this.FindFaceFromServer(texture.EncodeToJPG())); // } // } // } // /// // /// Raises the destroy event. // /// // private void OnDestroy() // { // webCamTextureToMatHelper.Dispose(); // if (cascade != null) // cascade.Dispose(); // } // /// // /// Raises the back button click event. // /// // public void OnBackButtonClick() // { // webCamTextureToMatHelper.Stop(); // SceneManager.LoadScene(0); // } // /// // /// Raises the play button click event. // /// // public void OnPlayButtonClick() // { // webCamTextureToMatHelper.Play(); // } // /// // /// Raises the pause button click event. // /// // public void OnPauseButtonClick() // { // webCamTextureToMatHelper.Pause(); // } // /// // /// Raises the stop button click event. // /// // public void OnStopButtonClick() // { // webCamTextureToMatHelper.Stop(); // } // /// // /// Raises the change camera button click event. // /// // public void OnChangeCameraButtonClick() // { // webCamTextureToMatHelper.requestedIsFrontFacing = !webCamTextureToMatHelper.IsFrontFacing(); // } // private IEnumerator FindFaceFromServer(byte[] jpgBytes)//Mat grayMat) // { // if (!this._isChecking) // { // lock (_lockObject) // { // if (!this._isChecking) // { // this._isChecking = true; // } // { // var form = new WWWForm(); // form.AddBinaryData("face", jpgBytes); // using (var request = UnityWebRequest.Post(WebViewController.FaceLoginUrl, form)) // { // text.text = WebViewController.FaceLoginUrl; // yield return request.SendWebRequest(); // if (request.isNetworkError || request.isHttpError) // { // Debug.Log(request.error); // } // else // { // var response = request.downloadHandler.text; // Debug.Log(response); // var result = JsonUtility.FromJson(response); // if (result.Code == 0) // { // WebViewController.Token = result.Token; // SceneManager.LoadScene(0); // } // } // } // } // this._isChecking = false; // } // } // } // } // }