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(); }
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(); }
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(); }
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(); }
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(); }
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(); }