コード例 #1
0
        static void FaceDetectorLightFPSTest(SessionOptions options, Bitmap bitmap)
        {
            int   tic, toc, time;
            float average;
            var   faceDetectorLight = new FaceDetectorLight(options);

            Console.WriteLine($"FPS test for [{faceDetectorLight}]");
            Console.WriteLine($"Initializing GPU device [{gpuId}]");
            tic = Environment.TickCount;
            _   = faceDetectorLight.Forward(bitmap);
            toc = Environment.TickCount - tic;
            Console.WriteLine($"Finished in [{toc}] mls.");

            time = 0;
            Console.WriteLine($"Running FPS test for [{iterations}] iterations");

            for (int i = 0; i < iterations; i++)
            {
                tic   = Environment.TickCount;
                _     = faceDetectorLight.Forward(bitmap);
                toc   = Environment.TickCount - tic;
                time += toc;
            }

            average = time / (float)iterations;
            Console.WriteLine($"FPS --> [{oneSecond / average}]\n");

            Console.WriteLine("Done.");
            Console.ReadKey();
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: victor-mikhalev/FaceONNX
        static void Main()
        {
            Console.WriteLine("FaceONNX: Race and age classification");
            var files = Directory.GetFiles(@"..\..\..\images");
            var path  = @"..\..\..\results";

            Directory.CreateDirectory(path);

            _faceDetectorLight      = new FaceDetectorLight();
            _faceLandmarksExtractor = new FaceLandmarksExtractor();
            _faceRaceClassifier     = new FaceRaceClassifier();
            _faceAgeClassifier      = new FaceAgeClassifier();
            var painter = new Painter()
            {
                PointPen     = new Pen(Color.Yellow, 4),
                Transparency = 0,
                TextFont     = new Font("Arial", 24)
            };

            Console.WriteLine($"Processing {files.Length} images");

            foreach (var file in files)
            {
                using var bitmap = new Bitmap(file);
                var filename = Path.GetFileName(file);
                var faces    = _faceDetectorLight.Forward(bitmap);
                int i        = 1;

                Console.WriteLine($"Image: [{filename}] --> detected [{faces.Length}] faces");

                foreach (var face in faces)
                {
                    Console.Write($"\t[Face #{i++}]: ");

                    var labels = GetRaceAndAge(bitmap, face);

                    var paintData = new PaintData()
                    {
                        Rectangle = face,
                        Labels    = labels
                    };

                    painter.Draw(bitmap, paintData);
                }

                bitmap.Save(Path.Combine(path, filename));
            }

            _faceDetectorLight.Dispose();
            _faceLandmarksExtractor.Dispose();
            _faceRaceClassifier.Dispose();
            _faceAgeClassifier.Dispose();

            Console.WriteLine("Done.");
            Console.ReadKey();
        }
コード例 #3
0
        static void Main()
        {
            Console.WriteLine("FaceONNX: Face embeddings classification");
            var fits = Directory.GetFiles(@"..\..\..\images\fit");

            _faceDetectorLight      = new FaceDetectorLight();
            _faceLandmarksExtractor = new FaceLandmarksExtractor();
            _faceEmbedder           = new FaceEmbedder();
            var embeddings = new Embeddings();

            foreach (var fit in fits)
            {
                using var bitmap = new Bitmap(fit);
                var embedding = GetEmbedding(bitmap);
                var name      = Path.GetFileNameWithoutExtension(fit);
                embeddings.Add(embedding, name);
            }

            Console.WriteLine($"Embeddings count: {embeddings.Count}");
            var scores = Directory.GetFiles(@"..\..\..\images\score");

            Console.WriteLine($"Processing {scores.Length} images");

            foreach (var score in scores)
            {
                using var bitmap = new Bitmap(score);
                var embedding  = GetEmbedding(bitmap);
                var proto      = embeddings.FromSimilarity(embedding);
                var label      = proto.Item1;
                var similarity = proto.Item2;
                var filename   = Path.GetFileName(score);

                Console.WriteLine($"Image: [{filename}] --> classified as [{label}] with similarity [{similarity}]");
            }

            _faceDetectorLight.Dispose();
            _faceLandmarksExtractor.Dispose();
            _faceEmbedder.Dispose();

            Console.WriteLine("Done.");
            Console.ReadKey();
        }
コード例 #4
0
        static void Main()
        {
            Console.WriteLine("FaceONNX: Emotion and beauty estimation");
            var files = Directory.GetFiles(@"..\..\..\images");
            var path  = @"..\..\..\results";

            Directory.CreateDirectory(path);

            _faceDetectorLight      = new FaceDetectorLight();
            _faceLandmarksExtractor = new FaceLandmarksExtractor();
            _faceEmotionClassifier  = new FaceEmotionClassifier();
            _faceBautyClassifier    = new FaceBautyClassifier();

            Console.WriteLine($"Processing {files.Length} images");

            foreach (var file in files)
            {
                using var bitmap = new Bitmap(file);
                var filename = Path.GetFileName(file);
                var faces    = _faceDetectorLight.Forward(bitmap);
                int i        = 1;

                Console.WriteLine($"Image: [{filename}] --> detected [{faces.Length}] faces");

                foreach (var face in faces)
                {
                    Console.Write($"\t[Face #{i++}]: ");

                    var labels = GetEmotionAndBeauty(bitmap, face);
                }
            }

            _faceDetectorLight.Dispose();
            _faceLandmarksExtractor.Dispose();
            _faceEmotionClassifier.Dispose();
            _faceBautyClassifier.Dispose();

            Console.WriteLine("Done.");
            Console.ReadKey();
        }
コード例 #5
0
        static void Main()
        {
            Console.WriteLine("FaceONNX: Gender classification");
            var files = Directory.GetFiles(@"..\..\..\images");

            using var faceDetectorLight    = new FaceDetectorLight();
            using var faceGenderClassifier = new FaceGenderClassifier();
            var labels = FaceGenderClassifier.Labels;

            foreach (var label in labels)
            {
                Directory.CreateDirectory(label);
            }

            Console.WriteLine($"Processing {files.Length} images");

            foreach (var file in files)
            {
                using var bitmap = new Bitmap(file);
                var filename = Path.GetFileName(file);
                var faces    = faceDetectorLight.Forward(bitmap);
                int i        = 1;

                Console.WriteLine($"Image: [{filename}] --> detected [{faces.Length}] faces");

                foreach (var face in faces)
                {
                    Console.Write($"\t[Face #{i++}]: ");

                    var output = faceGenderClassifier.Forward(bitmap);
                    var gender = Vector.Argmax(output);
                    var label  = labels[gender];

                    Console.WriteLine($"--> classified as [{label}] gender with probability [{output.Max()}]");
                }
            }

            Console.WriteLine("Done.");
            Console.ReadKey();
        }
コード例 #6
0
        static void Main()
        {
            Console.WriteLine("FaceONNX: Face detection");
            var files = Directory.GetFiles(@"..\..\..\images");
            var path  = @"..\..\..\results";

            Directory.CreateDirectory(path);

            using var faceDetectorLight = new FaceDetectorLight(0.95f, 0.25f);
            var painter = new Painter()
            {
                BoxPen       = new Pen(Color.Yellow, 4),
                Transparency = 0,
            };

            Console.WriteLine($"Processing {files.Length} images");

            foreach (var file in files)
            {
                using var bitmap = new Bitmap(file);
                var output = faceDetectorLight.Forward(bitmap);

                foreach (var rectangle in output)
                {
                    var paintData = new PaintData()
                    {
                        Rectangle = rectangle,
                        Title     = string.Empty
                    };
                    painter.Draw(bitmap, paintData);
                }

                var filename = Path.GetFileName(file);
                bitmap.Save(Path.Combine(path, filename));
                Console.WriteLine($"Image: [{filename}] --> detected [{output.Length}] faces");
            }

            Console.WriteLine("Done.");
            Console.ReadKey();
        }