// Use this for initialization void Start() { _capDev = new UnityOpenCVVideoCaptureAPI(); _faceDetector = new UnityOpenCVFaceDetectorAPI(Application.dataPath + DetectorParameters.cascadesPath, DetectorParameters.resizeFactor, DetectorParameters.scaler, DetectorParameters.minNeighbors, DetectorParameters.minSize, DetectorParameters.maxSize); _faceDetector.BindCamera(_capDev); _image = new GstImageInfo(); _faceImage = new GstImageInfo(); BlitImage = new Texture2D(1, 1); FaceImage = new Texture2D(1, 1); _image.Create(1, 1, GstImageInfo.EPixelFormat.EPixel_R8G8B8); _faceImage.Create(1, 1, GstImageInfo.EPixelFormat.EPixel_R8G8B8); _imageGrabber = new Thread(new ThreadStart(ImageGrabberThread)); SettingsHolder.Instance.AddDependencyNode(this); if (Debugger != null) { Debugger.AddDebugElement(this); } }
void _threadProcess() { if (!_inited) { _inited = true; if (_config.EnableRecognizer) { _recognizer = new UnityOpenCVPersonRecognizerAPI(_config.trainingPath); } _detector = new UnityOpenCVFaceDetectorAPI(_config.cascadePath, _config.scaler, _config.minNeighbors, _config.minSize, _config.maxSize); } while (!_isDone) { _signalEvent.WaitOne(); _signalEvent.Reset(); if (_newImage) { _detecting = true; try{ _detector.BindImage(_img); _faces = _detector.DetectFaces(); TriggerFaceDetected(_detector.DetectedFaces); Debug.Log("Face Detected : " + _faces.Count.ToString()); if (_recognizer != null) { _recognizedFaces.Clear(); for (int i = 0; i < _detector.DetectedFaces.Count; ++i) { _recognizer.BindImage(_img); RecognizedFace f = new RecognizedFace(); f.ID = _recognizer.RecognizeFace(_detector.DetectedFaces[i], ref f.distance); f.rect = _detector.DetectedFaces[i]; _recognizedFaces.Add(f); //if(conf<60) Debug.Log("Face Detected with label: " + f.ID.ToString() + " with distance:" + f.distance.ToString()); } TriggerFaceRecognized(_recognizedFaces); } }catch (Exception) { } _detecting = false; _newImage = false; } } }