コード例 #1
0
        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);
            }
        }
コード例 #2
0
 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);
     }
 }
コード例 #3
0
        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);
            }
        }