コード例 #1
0
 static private void SerializeFacepointsWithCsv(CsvWriter csvwriter, CsvFer2013Row fer2013record, int refId, ref PointF[] facepoints)
 {
     csvwriter.WriteRecord(new CsvFer2013ModRow()
     {
         RefId      = refId,
         Emotion    = fer2013record.emotion,
         LandmarksX = ArrayToString(from point in facepoints select point.X),
         LandmarksY = ArrayToString(from point in facepoints select point.Y),
         Usage      = fer2013record.Usage
     });
     csvwriter.NextRecord();
 }
コード例 #2
0
        static private void RunWithCsv(CascadeClassifier faceDetector, FacemarkLBF facemark, string inputFilepath, string outputFilepath, Size imageSize)
        {
            using (var csvreader = new CsvReader(new StreamReader(inputFilepath)))
                using (var csvwriter = new CsvWriter(new StreamWriter(outputFilepath, false)))
                {
                    csvwriter.WriteHeader <CsvFer2013ModRow>();
                    csvwriter.NextRecord();

                    var record   = new CsvFer2013Row();
                    var records  = csvreader.EnumerateRecords(record);
                    int recordId = 0;
                    foreach (var r in records)
                    {
                        recordId++;

                        Image <Gray, byte> image = StringToImage(r.pixels, imageSize);

                        Rectangle face = image.ROI;
                        if (localiseFace)
                        {
                            Rectangle?detectionResult = DetectFace(faceDetector, image);
                            if (!detectionResult.HasValue)
                            {
                                continue;
                            }
                            face = detectionResult.Value;
                        }

                        //Image<Bgr, byte> colorImage = image.Convert<Bgr, byte>();
                        //CvInvoke.Imshow("image", colorImage);
                        //CvInvoke.WaitKey();

                        VectorOfPointF landmarks = MarkFacialPoints(facemark, image, face, out bool isSuccess);
                        if (!isSuccess)
                        {
                            continue;
                        }

                        //FaceInvoke.DrawFacemarks(colorImage, landmarks, new Bgr(0, 0, 255).MCvScalar);
                        //CvInvoke.Imshow("landmarked image", colorImage);
                        //CvInvoke.WaitKey();
                        //CvInvoke.DestroyAllWindows();

                        PointF[] facepoints = landmarks.ToArray();
                        if (normalise)
                        {
                            NormalizeFacepoints(facepoints);
                        }

                        SerializeFacepointsWithCsv(csvwriter, r, recordId, ref facepoints);

                        if (verbose)
                        {
                            Console.Write("\rRecord No: {0}", recordId);
                        }
                    }
                    if (verbose)
                    {
                        Console.WriteLine();
                    }
                }
        }