private void AddImageToolStripMenuItem1_Click(object sender, EventArgs e) { if (listBox1.SelectedIndex < 0) { return; } if (openImageFileDialog1.ShowDialog() != DialogResult.OK) { return; } FaceDatabaseFile.FormatData(FaceData, NameMapping); foreach (var fileName in openImageFileDialog1.FileNames) { var image = new Bitmap(fileName); if (image.Size.Height != 128 || image.Size.Width != 128) { image = new Bitmap(image, 128, 128); } var faceData = new RecognitionFaceData(null) { Image = image, PrimaryKey = FaceData.Count, ForeignKey = 100 + FaceData.Count }; FaceData.Add(faceData); NameMapping[listBox1.SelectedIndex].DataIds.Add(faceData.ForeignKey); } FaceDatabaseFile.FormatData(FaceData, NameMapping); listBox1_SelectedIndexChanged(null, null); }
private void AddImageToolStripMenuItem_Click(object sender, EventArgs e) { if (UserListBox.SelectedIndex == -1) { return; } var open = new OpenFileDialog() { FileName = "", Multiselect = true, Filter = "JPEG Files(*.jpg)|*.jpg|" + "PNG Files(*.png)|*.png|" + "BMP Files(*.bmp)|*.bmp|" + "所有圖片類型|*.jpg;*.png;*.bmp" }; if (open.ShowDialog() != DialogResult.OK) { return; } var key = UserTable.Keys.ToArray()[UserListBox.SelectedIndex]; foreach (var file in open.FileNames) { var newData = new RecognitionFaceData(); newData.PrimaryKey = FaceData.Count(); newData.ForeignKey = key; newData.Image = new Bitmap(new Bitmap(file), 128, 128); var faceData = FaceData; Array.Resize(ref faceData, FaceData.Length + 1); faceData[faceData.Length - 1] = newData; FaceData = faceData; } if (realSenseProgram.recognitionConfig != null) { realSenseProgram.recognitionConfig.SetDatabase(FaceData); realSenseProgram.moduleConfiguration.ApplyChanges(); } UserListBox_SelectedIndexChanged(null, null); }
private void ImportToolStripMenuItem_Click(object sender, EventArgs e) { var folder = new FolderBrowserDialog(); if (folder.ShowDialog() != DialogResult.OK) { return; } var path = folder.SelectedPath; int temp_ = 0;//無用變數 var subDirs = new DirectoryInfo(path).EnumerateDirectories() .Where(x => int.TryParse(x.Name, out temp_)); #region UserTable讀取 var userTablePath = path + $"\\UserTable.csv"; Dictionary <int, string> userTable = new Dictionary <int, string>(); if (!File.Exists(userTablePath)) { var importUserTable = MessageBox.Show( "找不到UserTable.csv檔案,該檔案用以將使用者ID與姓名對應," + "該檔案雖非必要,但姓名將會使用ID作為代替,您是否繼續匯入?", "匯入時發現問題", MessageBoxButtons.YesNo, MessageBoxIcon.Information); if (importUserTable != DialogResult.Yes) { return; } foreach (var dir in subDirs) { userTable[int.Parse(dir.Name)] = dir.Name; } } else { var fileStream = new FileStream(userTablePath, FileMode.Open); userTable = FaceDatabaseFile.CSVBinaryToUserTable( FaceDatabaseFile.StreamToBytes(fileStream)); } #endregion #region 照片讀取 List <RecognitionFaceData> faceData = new List <RecognitionFaceData>(); int IdStart = 0; if (FaceData.Count() > 0) { IdStart = FaceData.Select(x => x.PrimaryKey).Max() + 1; } foreach (var dir in subDirs) { foreach (var file in dir.EnumerateFiles()) { var faceImage = new RecognitionFaceData(); faceImage.PrimaryKey = IdStart++; faceImage.ForeignKey = int.Parse(dir.Name); faceImage.Image = new Bitmap(file.FullName); faceData.Add(faceImage); } } if (FaceData == null || FaceData.Count() == 0) { FaceData = faceData.ToArray(); } else { FaceData = FaceData.Union(faceData).ToArray(); } if (UserTable == null || UserTable.Count == 0) { UserTable = userTable; } else { var TEMP = UserTable.Union(userTable).ToArray(); foreach (var keyvalue in TEMP) { UserTable[keyvalue.Key] = keyvalue.Value; } } SaveFileToolStripMenuItem.Enabled = true; if (realSenseProgram.recognitionConfig != null) { realSenseProgram.recognitionConfig.SetDatabase(FaceData); realSenseProgram.moduleConfiguration.ApplyChanges(); } tabControl1_SelectedIndexChanged(null, null); #endregion MessageBox.Show( "已成功自指定目錄讀取資料", "匯入成功", MessageBoxButtons.OK, MessageBoxIcon.Information); }
private void registerButton_Click(object sender, EventArgs e) { CurentDataLocked = true; realSenseProgram.Paush();//暫停影像更新 //按下註冊瞬間的名稱 var onClickName = CurrentName; var registerForm = new RegisterForm() { UserName = onClickName, Picture = FaceImage }; if (registerForm.ShowDialog() != DialogResult.OK) { realSenseProgram.UnPaush(); return; } int?registedUserId = null; if (UserTable.ContainsValue(registerForm.UserName)) { //重複項目,選取使用者後registedUserId Dictionary <int, Image> mapping = new Dictionary <int, Image>(); var userIds = UserTable.Where(x => x.Value == registerForm.UserName).Select(x => x.Key).ToArray(); for (int i = 0; i < userIds.Length; i++) { mapping[userIds[i]] = FaceData.Where(x => x.ForeignKey == userIds[i]).FirstOrDefault()?.Image; if (mapping[userIds[i]] == null) { mapping[userIds[i]] = new Bitmap(128, 128); using (Graphics g = Graphics.FromImage(mapping[userIds[i]])) { g.DrawString("找不到圖片", new Font("Arial", 16), Brushes.Black, 0, 0); } } } var dupForm = new DuplicateUserForm() { IdFaceMapping = mapping }; if (dupForm.ShowDialog() == DialogResult.OK) { registedUserId = dupForm.UserId; } } //註冊並寫入資料庫 var userId = Current.RegisterUser(); if (userId == -1) { MessageBox.Show( "註冊過程出現異常,請再嘗試一次", "註冊失敗", MessageBoxButtons.OK, MessageBoxIcon.Error); CurentDataLocked = false; realSenseProgram.UnPaush(); return; } //取得資料庫緩衝區 var buffer = CurrentData.QueryRecognitionModule() .GetDatabaseBuffer(); FaceData = RecognitionFaceData .FromDatabaseBuffer(buffer); //有選擇使用者,但是註冊後ID不合,修正ID if (registedUserId.HasValue && userId != registedUserId.Value) { var userItem = FaceData.Last(); userItem.ForeignKey = registedUserId.Value; userId = userItem.ForeignKey; FaceDatabaseManager.UpdateBuffer(buffer, userItem); //FaceDatabaseManager.ClearRemovedBuffer(buffer); realSenseProgram.recognitionConfig .SetDatabaseBuffer(buffer); realSenseProgram.moduleConfiguration.ApplyChanges(); } else if (!registedUserId.HasValue && UserTable.ContainsKey(userId)) { //新建使用者,但是UserID指向了現有使用者 var userItem = FaceData.Last(); //新建使用者ID userItem.ForeignKey = UserTable.ToArray().Select(x => x.Key).Max() + 1; userId = userItem.ForeignKey; FaceDatabaseManager.UpdateBuffer(buffer, userItem); //FaceDatabaseManager.ClearRemovedBuffer(buffer); realSenseProgram.recognitionConfig .SetDatabaseBuffer(buffer); realSenseProgram.moduleConfiguration.ApplyChanges(); } UserTable[userId] = registerForm.UserName; realSenseProgram.UnPaush();//暫停影像更新 CurentDataLocked = false; }