private void RegisterUser(PXCMFaceData faceOutput) { m_form.Register = false; if (faceOutput.QueryNumberOfDetectedFaces() <= 0) { return; } PXCMFaceData.Face qface = faceOutput.QueryFaceByIndex(0); if (qface == null) { throw new Exception("PXCMFaceData.Face null"); } PXCMFaceData.RecognitionData rdata = qface.QueryRecognition(); if (rdata == null) { throw new Exception(" PXCMFaceData.RecognitionData null"); } #region 註冊視窗 bool isRegistered = rdata.IsRegistered();//已註冊? int realSenseId = rdata.RegisterUser(); var collection = faceOutput.QueryRecognitionModule() .GetDatabase() .Where(x => x.ForeignKey == realSenseId); var dbItem = collection.LastOrDefault(); if (realSenseId == -1) { return; } if (isRegistered) { //已註冊的畫面卻又重新註冊,可能是辨識錯誤的更正 List <RecognitionFaceData> faceData = faceOutput.QueryRecognitionModule() .GetDatabase().ToList(); dbItem = faceData.Last(); dbItem.ForeignKey = dbItem.PrimaryKey + 100;//校正Id faceData[faceData.Count - 1] = dbItem; //整理資料庫的錯誤 FaceDatabaseFile.FormatData(faceData, NameMapping); qrecognition.SetDatabase(faceData.ToArray()); } var registerForm = new RegisterForm() { Picture = dbItem.Image }; if (registerForm.ShowDialog() == DialogResult.OK) { var mapping = NameMapping.Where(x => x.Id == registerForm.Id).FirstOrDefault(); if (mapping == null) { mapping = new NameMapping() { Id = registerForm.Id, Name = registerForm.Name }; NameMapping.Add(mapping); } if (registerForm.Name.Length > 0) { mapping.Name = registerForm.Name; } mapping.DataIds.Add(dbItem.ForeignKey); } #endregion }