/// <summary> /// Predict emotion on the basis of wrinkles and distances /// </summary> /// <param name="ImageMats">Input image on which emotion need to detect</param> /// <returns>Business model containing images of different steps and output result</returns> public EmotionBusinessModel DetectEmotionsDistanceAndWrinkledBased(Mat[] ImageMats, List <Rectangle> facess) { EmotionBusinessModel output = new EmotionBusinessModel(); EmotionBusinessModel.outputmsgs = new List <string>(); try { using (Logger logger = new Logger()) { KeyValuePair <string, Color> keyPair = new KeyValuePair <string, Color>("smile", Color.Yellow); keyPairs.Add(keyPair); keyPair = new KeyValuePair <string, Color>("sad", Color.Blue); keyPairs.Add(keyPair); keyPair = new KeyValuePair <string, Color>("surprise", Color.SlateGray); keyPairs.Add(keyPair); keyPair = new KeyValuePair <string, Color>("anger", Color.Red); keyPairs.Add(keyPair); keyPair = new KeyValuePair <string, Color>("disgust", Color.Purple); keyPairs.Add(keyPair); keyPair = new KeyValuePair <string, Color>("fear", Color.Black); keyPairs.Add(keyPair); keyPair = new KeyValuePair <string, Color>("neutral", Color.Green); keyPairs.Add(keyPair); Mat ImageMat = ImageMats[0]; logger.LogIntoFile(Log.logType.INFO, (string)ConstantsLoader.getInstance().getValue(EnumConstant.emotionDetectionMessage)); List <Rectangle> faces = new List <Rectangle>(); faces = facess; //faces = FDIPMAin.DetectFace(ImageMat); output.faceRect = new List <Rectangle>(); foreach (Rectangle face in faces) { List <Rectangle> fcs = new List <Rectangle>(); fcs.Add(face); output.outputResult = EDRIPDistanceAndWrinklesBasedFeatures.getInstance().FindEmotionDistanceAndWrinkleBased(ImageMat, fcs, 0); EmotionBusinessModel.outputmsgs.Add(output.outputResult); output.faceRect.Add(face); } imageModel img = new imageModel(); if (faces.Count > 0) { img.image = CvmlUtility.getInstance().annotate(ImageMat, faces[0], output.outputResult, Color.Blue); } //img.image=drawRect(ImageMat.ToImage<Bgr, byte>(), faces[0], output.outputResult); img.label = "Final emotion detected image with rectangle on face"; output.images.Add(img); output.outputMessage = "Emotion detected successfully in given image using wrinkled and distance based approach"; output.success = true; } } catch (Exception e) { string text = ExceptionHandle.GetExceptionMessage(e); output.success = false; output.outputResult = "neutral"; output.e = e; } return(output); }
/// <summary> /// Return single object of EDRIPDistanceAndWrinklesBasedFeatures class and if object already exist then send same object /// </summary> /// <returns>Rerturns object of EDRIPDistanceAndWrinklesBasedFeatures</returns> public static EDRIPDistanceAndWrinklesBasedFeatures getInstance() { if (instance == null) { instance = new EDRIPDistanceAndWrinklesBasedFeatures(); } return(instance); }