Пример #1
0
        public User TestFromFeature(Guid frsId, MatrixString matrixString)
        {
            var db  = new FrcContext();
            var frs = db.FaceRecognitionSystems.Where(x => x.FaceRecognitionSystemId == frsId).FirstOrDefault();

            if (frs == null)
            {
                throw new Exception("Face recognition system is not exist");
            }

            User result;

            switch (frs.Type)
            {
            case "LDA":
                result = recognizeLDAbyFeature(frs.TypeSystemId, db, frsId, matrixString);
                break;

            default:
                throw new NotImplementedException();
            }

            db.Dispose();
            return(result);
        }
Пример #2
0
        public User TestFromImage(Guid frsId, string imageByteArray, int systemEtalonCount)
        {
            var db  = new FrcContext();
            var frs = db.FaceRecognitionSystems.Where(x => x.FaceRecognitionSystemId == frsId).FirstOrDefault();

            if (frs == null)
            {
                throw new Exception("Face recognition system is not exist");
            }

            User result;

            switch (frs.Type)
            {
            case "LDA":
                result = recognizeLDA(frs.TypeSystemId, db, frsId, imageByteArray, systemEtalonCount);
                break;

            default:
                throw new NotImplementedException();
            }

            db.Dispose();
            return(result);
        }
Пример #3
0
        public MatrixString[] GetFrsParemeter(Guid frsId)
        {
            var db  = new FrcContext();
            var frs = db.FaceRecognitionSystems.Where(x => x.FaceRecognitionSystemId == frsId).FirstOrDefault();

            if (frs == null)
            {
                throw new Exception("Face recognition system is not exist");
            }

            MatrixString[] result;
            switch (frs.Type)
            {
            case "LDA":
                result = paramLDA(frs.TypeSystemId, db, frsId);
                break;

            default:
                throw new NotImplementedException();
            }

            db.Dispose();

            return(result);
        }
Пример #4
0
        public Image Get(Guid imageId)
        {
            var db          = new FrcContext();
            var imageEntity = db.Images.Where(x => x.ImageId == imageId).FirstOrDefault();

            db.Dispose();

            return(imageEntity);
        }
Пример #5
0
        public List <DatabaseTestUser> GetList(Guid frsId)
        {
            var db      = new FrcContext();
            var frsList = db.DatabaseTestUsers.Where(x => x.FaceRecognitionSystemId == frsId).ToList();

            db.Dispose();

            return(frsList);
        }
Пример #6
0
        public void startAddingDatabase()
        {
            var db = new FrcContext();

            proccessDatabase(db);

            Console.ReadKey();
            db.Dispose();
        }
Пример #7
0
        public List <FaceRecognitionSystem> GetFrsList()
        {
            var db      = new FrcContext();
            var frsList = db.FaceRecognitionSystems.ToList();

            db.Dispose();

            return(frsList);
        }
Пример #8
0
        // Вообще лучше инкапсулировать всё что связано с LDA в отдельный модуль.
        public void TestFromDatabase(Guid frsId)
        {
            var db  = new FrcContext();
            var frs = db.FaceRecognitionSystems.Where(x => x.FaceRecognitionSystemId == frsId).FirstOrDefault();

            if (frs == null)
            {
                throw new Exception("Face recognition system is not exist");
            }

            switch (frs.Type)
            {
            case "LDA":
                testLDA(frs.TypeSystemId, db, frsId);
                break;

            default:
                throw new NotImplementedException();
            }

            db.Dispose();
        }
Пример #9
0
        // to do: продумать как можно лучше работать с массивами пользователей,
        // чтобы не пришлось по сто раз извлекать для каждой регистрации в БД.
        public void RegisterUserList(List <Guid> imageIdList, Guid frsId)
        {
            var db  = new FrcContext();
            var frs = db.FaceRecognitionSystems.Where(x => x.FaceRecognitionSystemId == frsId).FirstOrDefault();

            if (frs == null)
            {
                throw new Exception("Face recognition system is not exist");
            }

            switch (frs.Type)
            {
            case "LDA":
                registerLDA(frs.TypeSystemId, db, imageIdList, frsId);
                break;

            default:
                throw new NotImplementedException();
            }

            db.Dispose();
        }
Пример #10
0
        public Guid Create()
        {
            var db   = new FrcContext();
            var imdb = db.ImageDatabases.Where(x => x.DatabaseName == md.databaseName).FirstOrDefault();

            if (imdb == null)
            {
                throw new Exception("Image database is not exist");
            }

            totalTrainImageForUser = (int)Math.Floor(
                (double)imdb.TotalImageForUser * (Constants.HUNDRED_PERCENT - md.databaseTestImagesPercent) / Constants.HUNDRED_PERCENT);
            totalUserForTrain = (int)Math.Floor(
                (double)imdb.TotalUser * (Constants.HUNDRED_PERCENT - md.databaseTestUsersForOpenTaskPercent) / Constants.HUNDRED_PERCENT);

            if (totalTrainImageForUser == 0 || totalUserForTrain == 0)
            {
                throw new Exception("Not enaught images for user");
            }

            // to do: обращаться ко всем элементам не очень так как для больших БД может не хватить памяти:
            var userListOfListsForTrain = db.Users.OrderBy(x => x.Username).Take(totalUserForTrain)
                                          .Select(x => x.Images.OrderBy(y => y.ImageName).Take(totalTrainImageForUser)).ToList();

            foreach (var userImageList in userListOfListsForTrain)
            {
                List <Matrix <double> > userMatrixList = new List <Matrix <double> >();
                foreach (var userImage in userImageList)
                {
                    var imageMatrix = ImageHelper.ImageByteArray2pixelArray(userImage.ImageByteArray);
                    userMatrixList.Add(DenseMatrix.OfArray(imageMatrix));
                }
                trainImageLists.Add(userMatrixList);
            }

            Guid frsId;

            switch (md.trainName)
            {
            case "LDA":
                frsId = trainLDA(imdb, db);
                break;

            default:
                throw new NotImplementedException();
            }

            // Записать все изображения пользователей, которые предназначены для тестирования БД на закрытом множестве.
            var userListOfListsForTest = db.Users.OrderBy(x => x.Username).Take(totalUserForTrain)
                                         .Select(x => x.Images.OrderBy(y => y.ImageName).Skip(totalTrainImageForUser)).ToList();

            var testList = userListOfListsForTest.SelectMany(x => x.Select(i => new DatabaseTestUser
            {
                DatabaseTestUserId      = Guid.NewGuid(),
                FaceRecognitionSystemId = frsId,
                ImageId = i.ImageId,
            })).ToList();

            db.DatabaseTestUsers.AddRange(testList);
            db.SaveChanges();

            db.Dispose();

            // Зарегестрировать все изображения пользователей, которые учавствовали в обучении.
            var registrator = new FaceRecognitionRegistrator();
            var imageIdList = userListOfListsForTrain.SelectMany(x => x.Select(y => y.ImageId)).ToList();

            registrator.RegisterUserList(imageIdList, frsId);

            return(frsId);
        }