Beispiel #1
0
        /// <summary>
        /// Raises the disable event.
        /// </summary>
        void OnDisable()
        {
            webCamTextureToMatHelper.Dispose();

            if (faceCascade != null && !faceCascade.IsDisposed)
            {
                faceCascade.Dispose();
            }

            if (eyeCascade1 != null && !eyeCascade1.IsDisposed)
            {
                eyeCascade1.Dispose();
            }

            if (eyeCascade2 != null && !eyeCascade2.IsDisposed)
            {
                eyeCascade2.Dispose();
            }

            foreach (Mat face in preprocessedFaces)
            {
                if (face != null && !face.IsDisposed)
                {
                    face.Dispose();
                }
            }

            if (old_prepreprocessedFace != null && !old_prepreprocessedFace.IsDisposed)
            {
                old_prepreprocessedFace.Dispose();
            }

            if (prev_prepreprocessedFace != null && !prev_prepreprocessedFace.IsDisposed)
            {
                prev_prepreprocessedFace.Dispose();
            }

            if (reconstructedFace != null && !reconstructedFace.IsDisposed)
            {
                reconstructedFace.Dispose();
            }

            if (model != null && !model.IsDisposed)
            {
                model.Dispose();
            }
        }
        /// <summary>
        /// Raises the load button click event.
        /// </summary>
        public void LoadModel()
        {
            string loadDirectoryPath = Path.Combine(Application.persistentDataPath, saveDirectoryName);

            if (!Directory.Exists(loadDirectoryPath))
            {
                Debug.Log("load failure. saved train data file does not exist.");
                return;
            }

            // Restart everything!
            dispose();

            if (facerecAlgorithm == "FaceRecognizer.Fisherfaces")
            {
                model = FisherFaceRecognizer.create();
            }
            else if (facerecAlgorithm == "FaceRecognizer.Eigenfaces")
            {
                model = EigenFaceRecognizer.create();
            }

            if (model == null)
            {
                Debug.LogError("ERROR: The FaceRecognizer algorithm [" + facerecAlgorithm + "] is not available in your version of OpenCV. Please update to OpenCV v2.4.1 or newer.");
                m_mode = R_MODES.MODE_DETECTION;
                return;
            }

            // load the train data.
            model.read(Path.Combine(loadDirectoryPath, "traindata.yml"));

            int maxLabel = (int)Core.minMaxLoc(model.getLabels()).maxVal;

            if (maxLabel < 0)
            {
                Debug.Log("load failure.");
                model.Dispose();
                return;
            }

            // Restore the save data.
            #if UNITY_WEBGL && !UNITY_EDITOR
            string format = "jpg";
            #else
            string format = "png";
            #endif
            m_numPersons = maxLabel + 1;
            personsNames = new string[m_numPersons];

            for (int i = 0; i < m_numPersons; ++i)
            {
                personsNames[i] = GameManager.instance.personsNames[i];

                m_latestFaces.Add(i);
                preprocessedFaces.Add(Imgcodecs.imread(Path.Combine(loadDirectoryPath, "preprocessedface" + i + "." + format), 0));
                if (preprocessedFaces[i].total() == 0)
                {
                    preprocessedFaces[i] = new Mat(faceHeight, faceWidth, CvType.CV_8UC1, new Scalar(128));
                }
                faceLabels.Add(i);
            }


            // go to the recognition mode!
            m_mode = R_MODES.MODE_RECOGNITION;
        }