Esempio n. 1
0
        public Rank <PhotoMetadata, double>[] ComputeComponentRanks(string sketchPath, Gender gender)
        {
            var sketchFeature = featureExtractor.ExtractFaceFeatures(sketchPath);
            var ranks         = new Rank <PhotoMetadata, double> [6];

            Task.WaitAll(
                Task.Run(() => ranks[0] = MakeComponentRank(Database.FeaturesHair(gender), sketchFeature.Hair)),
                Task.Run(() => ranks[1] = MakeComponentRank(Database.FeaturesEyebrows(gender), sketchFeature.Eyebrows)),
                Task.Run(() => ranks[2] = MakeComponentRank(Database.FeaturesEyes(gender), sketchFeature.Eyes)),
                Task.Run(() => ranks[3] = MakeComponentRank(Database.FeaturesNose(gender), sketchFeature.Nose)),
                Task.Run(() => ranks[4] = MakeComponentRank(Database.FeaturesMouth(gender), sketchFeature.Mouth)),
                Task.Run(() => ranks[5] = Rank.FromMetric(Database.FeaturesShape(gender), sketchFeature.Shape, SHAPE_METRIC).NormalizeScore(ScoreNormalization.Tanh))
                );

            return(ranks);
        }
        public static FaceFeaturesDB ExtractFeaturesDB(PhotoSketchFeatureExtractor extractor, List <PhotoMetadata> photos, bool savedb = true)
        {
            var dbName = string.Format("features-{0}.csv", DateTimeOffset.Now.ToUnixTimeMilliseconds());
            var db     = new FaceFeaturesDB();

            Parallel.ForEach(photos, photo =>
            {
                try {
                    var feature = extractor.ExtractFaceFeatures(photo.AbsolutePath);
                    db.AddPhotoFeatures(photo, feature);
                } catch (ArgumentException) { }
            });

            if (savedb)
            {
                db.Dump(dbName);
                Console.WriteLine("Features db saved on: {0}", dbName);
            }

            return(db);
        }
        public TaskExtractGalleryFeatures(PhotoSketchFeatureExtractor extractor, string galleryPath)
        {
            WorkerReportsProgress = true;
            DoWork += (s, e) =>
            {
                var db              = new FaceFeaturesDB();
                var photos          = PhotoMetadataCsv.FromCSV(galleryPath).ToList();
                var totalPhotos     = photos.Count;
                var currentProgress = 0;

                Parallel.ForEach(photos, photo =>
                {
                    try {
                        var feature = extractor.ExtractFaceFeatures(photo.AbsolutePath);
                        db.AddPhotoFeatures(photo, feature);
                    } catch (ArgumentException) { }

                    Interlocked.Increment(ref currentProgress);
                    ReportProgress((int)(currentProgress / (float)totalPhotos * 100));
                });

                e.Result = db;
            };
        }