private void SavePicture(CHCNetSDK.NET_VCA_FACESNAP_MATCH_ALARM struFaceMatchAlarm, string filePath, Dictionary <string, string> imagePath) { try { string bigImage = string.Empty; string faceImage = string.Empty; string compareImage = string.Empty; //抓拍大图 if (struFaceMatchAlarm.dwSnapPicLen > 1) { bigImage = SavePicture(struFaceMatchAlarm.dwSnapPicLen, struFaceMatchAlarm.pSnapPicBuffer, filePath, "BigImage"); } //抓拍头像 if ((struFaceMatchAlarm.struSnapInfo.dwSnapFacePicLen != 0) && (struFaceMatchAlarm.struSnapInfo.pBuffer1 != IntPtr.Zero)) { faceImage = SavePicture(struFaceMatchAlarm.struSnapInfo.dwSnapFacePicLen, struFaceMatchAlarm.struSnapInfo.pBuffer1, filePath, "FaceImage"); } //对比照片 if ((struFaceMatchAlarm.struBlackListInfo.dwBlackListPicLen != 0) && (struFaceMatchAlarm.struBlackListInfo.pBuffer1 != IntPtr.Zero)) { compareImage = SavePicture(struFaceMatchAlarm.struBlackListInfo.dwBlackListPicLen, struFaceMatchAlarm.struBlackListInfo.pBuffer1, filePath, "CompareImage"); } imagePath.Add("bigImage", bigImage); imagePath.Add("faceImage", faceImage); imagePath.Add("compareImage", compareImage); } catch (Exception ex) { ToolHelper.RecordSystemErrorLog(this.GetType().ToString(), MethodBase.GetCurrentMethod().Name, ex.Message, ex.StackTrace); } }
private void ProcessCommAlarm_FaceMatch(CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser) { try { Dictionary <string, string> imagePath = new Dictionary <string, string>(); CHCNetSDK.NET_VCA_FACESNAP_MATCH_ALARM struFaceMatchAlarm = new CHCNetSDK.NET_VCA_FACESNAP_MATCH_ALARM(); struFaceMatchAlarm = (CHCNetSDK.NET_VCA_FACESNAP_MATCH_ALARM)Marshal.PtrToStructure(pAlarmInfo, typeof(CHCNetSDK.NET_VCA_FACESNAP_MATCH_ALARM)); //保存图片 SavePicture(struFaceMatchAlarm, "FaceCompareImage", imagePath); //更新xml UpdateXmlFile(pAlarmer, struFaceMatchAlarm, "FaceCompareXmlFile", "faceCompare", imagePath); } catch (Exception ex) { ToolHelper.RecordSystemErrorLog(this.GetType().ToString(), MethodBase.GetCurrentMethod().Name, ex.Message, ex.StackTrace); } }
private void UpdateXmlFile(CHCNetSDK.NET_DVR_ALARMER pAlarmer, CHCNetSDK.NET_VCA_FACESNAP_MATCH_ALARM struFaceMatchAlarm, string filePath, string fileName, Dictionary <string, string> imagePath) { try { Dictionary <string, string> keyValue = new Dictionary <string, string>(); string nodeType = string.Empty; string sex = string.Empty; string telephone = string.Empty; string personName = string.Empty; //抓拍时间:年月日时分秒 string strTimeYear = ((struFaceMatchAlarm.struSnapInfo.dwAbsTime >> 26) + 2000).ToString(); string strTimeMonth = ((struFaceMatchAlarm.struSnapInfo.dwAbsTime >> 22) & 15).ToString("d2"); string strTimeDay = ((struFaceMatchAlarm.struSnapInfo.dwAbsTime >> 17) & 31).ToString("d2"); string strTimeHour = ((struFaceMatchAlarm.struSnapInfo.dwAbsTime >> 12) & 31).ToString("d2"); string strTimeMinute = ((struFaceMatchAlarm.struSnapInfo.dwAbsTime >> 6) & 63).ToString("d2"); string strTimeSecond = ((struFaceMatchAlarm.struSnapInfo.dwAbsTime >> 0) & 63).ToString("d2"); string strTime = string.Format("{0}-{1}-{2} {3}:{4}:{5}", strTimeYear, strTimeMonth, strTimeDay, strTimeHour, strTimeMinute, strTimeSecond); //比对成功 if ((struFaceMatchAlarm.struBlackListInfo.dwBlackListPicLen != 0) && (struFaceMatchAlarm.struBlackListInfo.pBuffer1 != IntPtr.Zero)) { nodeType = "compareSuccess"; string[] strArray = Encoding.Default.GetString(struFaceMatchAlarm.struBlackListInfo.struBlackListInfo.struAttribute.byName).Split(new char[] { '-' }, StringSplitOptions.RemoveEmptyEntries); if (strArray != null && strArray.Length > 2) { personName = strArray[0].Split('\0')[0]; sex = strArray[1].Split('\0')[0]; telephone = strArray[2].Split('\0')[0]; } else { personName = Encoding.Default.GetString(struFaceMatchAlarm.struBlackListInfo.struBlackListInfo.struAttribute.byName).Split(new char[] { '\0' }, StringSplitOptions.RemoveEmptyEntries)[0]; } } else { nodeType = "compareFail"; } if (nodeType == "compareSuccess") //比对成功要去重 { if (faceCompareInfoList != null && faceCompareInfoList.Count > 0) { List <FaceCompareInfo> selectList = faceCompareInfoList.FindAll(x => x.PersonName == personName); if (selectList != null && selectList.Count > 0) { return; } } } keyValue.Add("caputerDeviceIp", struFaceMatchAlarm.struSnapInfo.struDevInfo.struDevIP.sIpV4); //抓拍设备 keyValue.Add("channel", struFaceMatchAlarm.struSnapInfo.struDevInfo.byChannel.ToString()); //通道号 keyValue.Add("captureTime", strTime); //抓拍时间 keyValue.Add("similarityDegree", Convert.ToString(struFaceMatchAlarm.fSimilarity)); //相似度 keyValue.Add("personName", personName); //姓名 keyValue.Add("alarmTime", DateTime.Now.ToString()); //报警时间 keyValue.Add("alarmDeviceIp", pAlarmer.sDeviceIP); //报警设备 keyValue.Add("sex", sex); //性别 keyValue.Add("glasses", struFaceMatchAlarm.struSnapInfo.byGlasses == 1 ? "是" : (struFaceMatchAlarm.struSnapInfo.byGlasses == 2 ? "否" : "无法确认")); //眼镜 keyValue.Add("faceScore", struFaceMatchAlarm.struSnapInfo.byFaceScore.ToString()); //人脸清晰 keyValue.Add("bigImage", imagePath["bigImage"]); //抓拍大图 keyValue.Add("faceImage", imagePath["faceImage"]); //抓拍头像 keyValue.Add("compareImage", imagePath["compareImage"]); //人脸比对照片 keyValue.Add("telePhone", telephone); //电话 bool isSuccess = ToolHelper.SaveXmlFile(filePath, fileName, keyValue, nodeType); if (isSuccess) { if (nodeType == "compareSuccess") { FaceCompareInfo faceCompareInfoItem = new FaceCompareInfo(); faceCompareInfoItem.CaputerDeviceIp = struFaceMatchAlarm.struSnapInfo.struDevInfo.struDevIP.sIpV4; faceCompareInfoItem.Channel = struFaceMatchAlarm.struSnapInfo.struDevInfo.byChannel.ToString(); faceCompareInfoItem.CaptureTime = strTime; faceCompareInfoItem.SimilarityDegree = Convert.ToString(struFaceMatchAlarm.fSimilarity); faceCompareInfoItem.PersonName = personName; faceCompareInfoItem.AlarmTime = DateTime.Now.ToString(); faceCompareInfoItem.AlarmDeviceIp = pAlarmer.sDeviceIP; faceCompareInfoItem.Sex = sex; faceCompareInfoItem.Glasses = struFaceMatchAlarm.struSnapInfo.byGlasses == 1 ? "是" : (struFaceMatchAlarm.struSnapInfo.byGlasses == 2 ? "否" : "无法确认"); faceCompareInfoItem.FaceScore = struFaceMatchAlarm.struSnapInfo.byFaceScore.ToString(); faceCompareInfoItem.BigImage = imagePath["bigImage"]; faceCompareInfoItem.FaceImage = imagePath["faceImage"]; faceCompareInfoItem.CompareImage = imagePath["compareImage"]; faceCompareInfoItem.TelePhone = telephone; faceCompareInfoList.Add(faceCompareInfoItem); if (!timer1.Enabled) { timerCallBackAction(new object(), null); timer1.Enabled = true; } } if (!ToolHelper.SaveXmlFile(filePath, fileName, nodeType)) { ToolHelper.RecordSystemErrorLog(this.GetType().ToString(), MethodBase.GetCurrentMethod().Name, "更新汇总XML文件失败", nodeType); } } else { ToolHelper.RecordSystemErrorLog(this.GetType().ToString(), MethodBase.GetCurrentMethod().Name, "更新XML文件失败", JsonConvert.SerializeObject(keyValue)); } } catch (Exception ex) { ToolHelper.RecordSystemErrorLog(this.GetType().ToString(), MethodBase.GetCurrentMethod().Name, ex.Message, ex.StackTrace); } }