private void ProcessCommAlarm_ITSPlate(ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser) { int dvrloginid = pAlarmer.lUserID; var dvs = devicelists.Where(x => x.DVRLoginID == dvrloginid); if (dvs.Count() == 0) { if (OnShowInfoData != null) { OnShowInfoData(InfoType.抓拍信息, null, "没有找到对应的注册设备,回调注册号:" + dvrloginid); } return; } DeviceInfo di = (DeviceInfo)dvs.ToArray()[0]; if (di.beginTime != DateTime.MinValue) { if (DateTime.Now < di.beginTime || DateTime.Now > di.endTime) { return; } } CHCNetSDK.NET_ITS_PLATE_RESULT struITSPlateResult = new CHCNetSDK.NET_ITS_PLATE_RESULT(); uint dwSize = (uint)Marshal.SizeOf(struITSPlateResult); string imgBase64 = ""; struITSPlateResult = (CHCNetSDK.NET_ITS_PLATE_RESULT)Marshal.PtrToStructure(pAlarmInfo, typeof(CHCNetSDK.NET_ITS_PLATE_RESULT)); //保存抓拍图片 for (int i = 0; i < struITSPlateResult.dwPicNum; i++) { if (struITSPlateResult.struPicInfo[i].byType == 1) { if (struITSPlateResult.struPicInfo[i].dwDataLen != 0) { int iLen = (int)struITSPlateResult.struPicInfo[i].dwDataLen; byte[] by = new byte[iLen]; Marshal.Copy(struITSPlateResult.struPicInfo[i].pBuffer, by, 0, iLen); imgBase64 = Convert.ToBase64String(by); if (IsSaveImage) { SaveImage(by, di.DeviceName + "_" + struITSPlateResult.struPicInfo[i].byType.ToString()); } } } } //log4net.ILog log = log4net.LogManager.GetLogger("abc"); //log.Debug(Newtonsoft.Json.JsonConvert.SerializeObject(struITSPlateResult)); //抓拍时间:年月日时分秒 string strTimeYear = string.Format("{0:D4}", struITSPlateResult.struSnapFirstPicTime.wYear) + "-" + string.Format("{0:D2}", struITSPlateResult.struSnapFirstPicTime.byMonth) + "-" + string.Format("{0:D2}", struITSPlateResult.struSnapFirstPicTime.byDay) + " " + string.Format("{0:D2}", struITSPlateResult.struSnapFirstPicTime.byHour) + ":" + string.Format("{0:D2}", struITSPlateResult.struSnapFirstPicTime.byMinute) + ":" + string.Format("{0:D2}", struITSPlateResult.struSnapFirstPicTime.bySecond); di.LastTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); // 对上传的车牌含颜色,对其做处理 string carNo = struITSPlateResult.struPlateInfo.sLicense; if (carNo.Length > 7) { carNo = carNo.Substring(carNo.Length - 7, 7); } //struITSPlateResult.struPlateInfo.sLicense 车牌号码 //struITSPlateResult.byVehicleType //车型识别:0- 未知,1- 客车(大型),2- 货车(大型),3- 轿车(小型),4- 面包车, //5- 小货车,6- 行人,7- 二轮车,8- 三轮车,9- SUV/MPV,10- 中型客车 //设置车辆类型 string CarType = "Z"; switch (struITSPlateResult.byVehicleType) { case 1: case 10: CarType = "K"; break; case 2: CarType = "H"; break; case 3: case 4: case 5: case 9: CarType = "X"; break; } //设置车牌颜色 string CarNocolor = "4"; switch ((CHCNetSDK.VCA_PLATE_COLOR)struITSPlateResult.struPlateInfo.byColor) { case CHCNetSDK.VCA_PLATE_COLOR.VCA_BLUE_PLATE: //蓝色车牌 CarNocolor = "2"; break; case CHCNetSDK.VCA_PLATE_COLOR.VCA_YELLOW_PLATE: //黄色车牌 CarNocolor = "1"; break; case CHCNetSDK.VCA_PLATE_COLOR.VCA_WHITE_PLATE: //白色车牌 CarNocolor = "0"; break; case CHCNetSDK.VCA_PLATE_COLOR.VCA_BLACK_PLATE: //黑色车牌 CarNocolor = "3"; break; case CHCNetSDK.VCA_PLATE_COLOR.VCA_GREEN_PLATE: //绿色车牌 CarNocolor = "5"; break; default: break; } //设置车辆方向 //string CarDirection = struITSPlateResult.byDir == 1 ? "19" : "20"; //使用触发的车道号来判断方向 string CarDirection = struITSPlateResult.byDriveChan == 1 ? "19" : "20"; //上传结果 string stringAlarm = "[" + di.UnitName + "-" + di.DeviceAddress + "]抓拍上传," + "车牌:" + carNo + ",方向:" + (CarDirection == "19" ? "进入" : "离开"); carservice.SaveCarInfo(di.DeviceName, carNo, strTimeYear, CarNocolor, CarType, CarDirection, imgBase64); if (OnShowInfoData != null) { OnShowInfoData(InfoType.抓拍信息, di, stringAlarm); } }
public void MsgCallback(int lCommand, ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser) { //通过lCommand来判断接收到的报警信息类型,不同的lCommand对应不同的pAlarmInfo内容 AlarmMessageHandle(lCommand, ref pAlarmer, pAlarmInfo, dwBufLen, pUser); }
//海康回调函数 public bool MsgCallbackHik(int lCommand, ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser) { return(true); }
/// <summary> /// AI识别报警布放 /// </summary> /// <param name="pAlarmer"></param> /// <param name="pAlarmInfo"></param> /// <param name="dwBufLen"></param> /// <param name="pUser"></param> private void ProcessCommAIOP_VIDEO(ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser) { CHCNetSDK.NET_AIOP_VIDEO_HEAD struAiopVideoHead = new CHCNetSDK.NET_AIOP_VIDEO_HEAD(); object temp = Marshal.PtrToStructure(pAlarmInfo, typeof(CHCNetSDK.NET_AIOP_VIDEO_HEAD)); struAiopVideoHead = (CHCNetSDK.NET_AIOP_VIDEO_HEAD)temp; // 报警信息 string stringAI = ""; uint dwSize = (uint)Marshal.SizeOf(struAiopVideoHead); //报警设备IP地址 string strIP = System.Text.Encoding.UTF8.GetString(pAlarmer.sDeviceIP).TrimEnd('\0').TrimEnd('\0'); //报警时间:年月日时分秒 string strTimeYear = struAiopVideoHead.struTime.wYear.ToString(); string strTimeMonth = struAiopVideoHead.struTime.wMonth.ToString("d2"); string strTimeDay = struAiopVideoHead.struTime.wDay.ToString("d2"); string strTimeHour = struAiopVideoHead.struTime.wHour.ToString("d2"); string strTimeMinute = struAiopVideoHead.struTime.wMinute.ToString("d2"); string strTimeSecond = struAiopVideoHead.struTime.wSecond.ToString("d2"); string strTime = strTimeYear + "-" + strTimeMonth + "-" + strTimeDay + " " + strTimeHour + ":" + strTimeMinute + ":" + strTimeSecond; string szTaskID = System.Text.Encoding.UTF8.GetString(struAiopVideoHead.szTaskID).TrimEnd('\0'); string szMPID = System.Text.Encoding.UTF8.GetString(struAiopVideoHead.szMPID).TrimEnd('\0'); //var picSize = Marshal.PtrToStringAnsi(struAiopVideoHead.pBufferPictureSize); stringAI = "AI识别,报警触发时间:" + strTime + ",szTaskID:" + szTaskID + ",szMPID:" + szMPID; string fPath = tmpFilePath + "picture\\"; string filename = fPath + "UserID_" + pAlarmer.lUserID + "_AI开放平台检测报警_" + iFileNumber + ".jpg"; //报警图片保存-对应分析图片数据 if (struAiopVideoHead.dwPictureSize > 0) { MkDir(fPath); FileStream fs = new FileStream(filename, FileMode.Create); int iLen = (int)struAiopVideoHead.dwPictureSize; byte[] by = new byte[iLen]; Marshal.Copy(struAiopVideoHead.pBufferPictureSize, by, 0, iLen); fs.Write(by, 0, iLen); fs.Close(); iFileNumber++; // 超过10个文件就清除文件夹 } //AIOPData数据 if (struAiopVideoHead.dwAIOPDataSize > 0) { string AIOPData = Marshal.PtrToStringAnsi(struAiopVideoHead.pBufferAIOPData).TrimEnd('\0').TrimEnd('\0'); var tIndex = AIOPData.LastIndexOf("??"); string jsonStr = AIOPData.Substring(0, tIndex); if (!string.IsNullOrEmpty(jsonStr)) { //var aiopJson = JsonHelper.DeserializeJsonToObject<object>(jsonStr); //trainModelId: 8274 var aiopJson = Newtonsoft.Json.Linq.JObject.Parse(jsonStr); string url = ConfigurationManager.AppSettings.Get("API_HIK_ALARM").ToString(); var obj = new { url = url, data = jsonStr }; var postData = new Dictionary <string, string>() { { "time", strTime }, { "szTaskID", szTaskID }, { "szMPID", szMPID }, { "aiopJson", jsonStr }, }; var now = DateTime.Now; if (isInit) { isInit = false; AddAgManage(url, filename, postData); } else { TimeSpan ts1 = new TimeSpan(now.Ticks); TimeSpan ts2 = new TimeSpan(dtExec.Ticks); TimeSpan ts = ts1.Subtract(ts2).Duration(); var dateDiff = ts.Minutes; //如果当前时间与采集时间的差值超过30分钟就采集 if (dateDiff >= AlarmIntervalTime) { AddAgManage(url, filename, postData); } } //if (now.Hour >= DtStar.Hour && now.Hour <= DtEnd.Hour && now.Date == DtStar.Date)//开始时间和结束时间之间,并且是今天 //{ // if (isInit) // { // isInit = false; // AddAgManage(url, filename, postData); // } // else // { // TimeSpan ts1 = new TimeSpan(now.Ticks); // TimeSpan ts2 = new TimeSpan(dtExec.Ticks); // TimeSpan ts = ts1.Subtract(ts2).Duration(); // var dateDiff = ts.Minutes; // //如果当前时间与采集时间的差值超过30分钟就采集 // if (dateDiff >= AlarmIntervalTime) // { // AddAgManage(url, filename, postData); // } // } //} if (iFileNumber > 10) { FileHelper.DeleteFolderFiles(fPath, ""); iFileNumber = 0; //listViewAlarmInfo.Items.Clear(); } } } WriteMsg(stringAI, "ok"); }
private void ProcessCommAlarm_Plate(ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser) { CHCNetSDK.NET_DVR_PLATE_RESULT struPlateResultInfo = new CHCNetSDK.NET_DVR_PLATE_RESULT(); uint dwSize = (uint)Marshal.SizeOf(struPlateResultInfo); struPlateResultInfo = (CHCNetSDK.NET_DVR_PLATE_RESULT)Marshal.PtrToStructure(pAlarmInfo, typeof(CHCNetSDK.NET_DVR_PLATE_RESULT)); ////保存抓拍图片 //string str = ""; //if (struPlateResultInfo.byResultType == 1 && struPlateResultInfo.dwPicLen != 0) //{ // str = ".\\picture\\Plate_UserID_" + pAlarmer.lUserID + "_近景图_" + iFileNumber + ".jpg"; // FileStream fs = new FileStream(str, FileMode.Create); // int iLen = (int)struPlateResultInfo.dwPicLen; // byte[] by = new byte[iLen]; // Marshal.Copy(struPlateResultInfo.pBuffer1, by, 0, iLen); // fs.Write(by, 0, iLen); // fs.Close(); // iFileNumber++; //} //if (struPlateResultInfo.dwPicPlateLen != 0) //{ // str = ".\\picture\\Plate_UserID_" + pAlarmer.lUserID + "_车牌图_" + iFileNumber + ".jpg"; // FileStream fs = new FileStream(str, FileMode.Create); // int iLen = (int)struPlateResultInfo.dwPicPlateLen; // byte[] by = new byte[iLen]; // Marshal.Copy(struPlateResultInfo.pBuffer2, by, 0, iLen); // fs.Write(by, 0, iLen); // fs.Close(); // iFileNumber++; //} //if (struPlateResultInfo.dwFarCarPicLen != 0) //{ // str = ".\\picture\\Plate_UserID_" + pAlarmer.lUserID + "_远景图_" + iFileNumber + ".jpg"; // FileStream fs = new FileStream(str, FileMode.Create); // int iLen = (int)struPlateResultInfo.dwFarCarPicLen; // byte[] by = new byte[iLen]; // Marshal.Copy(struPlateResultInfo.pBuffer5, by, 0, iLen); // fs.Write(by, 0, iLen); // fs.Close(); // iFileNumber++; //} //抓拍时间:年月日时分秒 //string strTimeYear = System.Text.Encoding.UTF8.GetString(struPlateResultInfo.byAbsTime).TrimEnd('\0'); //报警设备IP地址 string strIP = System.Text.Encoding.UTF8.GetString(pAlarmer.sDeviceIP).TrimEnd('\0'); //车牌信息 string stringPlateLicense = System.Text.Encoding.GetEncoding("GBK").GetString(struPlateResultInfo.struPlateInfo.sLicense).TrimEnd('\0').Replace("无车牌", ""); if (!string.IsNullOrEmpty(stringPlateLicense)) { if (stringPlateLicense.Length > 7) { stringPlateLicense = stringPlateLicense.Substring(stringPlateLicense.Length - 7, 7); } if (OnReceived != null) { OnReceived(stringPlateLicense, strIP); } } }
private void ProcessCommAlarm_Plate(ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser, string commType) { CHCNetSDK.NET_DVR_PLATE_RESULT struPlateResultInfo = new CHCNetSDK.NET_DVR_PLATE_RESULT(); uint dwSize = (uint)Marshal.SizeOf(struPlateResultInfo); struPlateResultInfo = (CHCNetSDK.NET_DVR_PLATE_RESULT)Marshal.PtrToStructure(pAlarmInfo, typeof(CHCNetSDK.NET_DVR_PLATE_RESULT)); //保存抓拍图片 string strFilePath = ""; //报警设备IP地址 string strIP = pAlarmer.sDeviceIP; if (!Directory.Exists(m_OutputDir + strIP + "\\")) { Directory.CreateDirectory(m_OutputDir + strIP + "\\"); } if (struPlateResultInfo.byResultType == 1 && struPlateResultInfo.dwPicLen != 0) { strFilePath = m_OutputDir + strIP + "\\" + pAlarmer.lUserID + "_近景图.jpg"; FileStream fs = new FileStream(strFilePath, FileMode.Create); int iLen = (int)struPlateResultInfo.dwPicLen; byte[] by = new byte[iLen]; Marshal.Copy(struPlateResultInfo.pBuffer1, by, 0, iLen); fs.Write(by, 0, iLen); fs.Close(); } if (struPlateResultInfo.dwPicPlateLen != 0) { strFilePath = m_OutputDir + strIP + "\\" + pAlarmer.lUserID + "_车牌图.jpg"; FileStream fs = new FileStream(strFilePath, FileMode.Create); int iLen = (int)struPlateResultInfo.dwPicPlateLen; byte[] by = new byte[iLen]; Marshal.Copy(struPlateResultInfo.pBuffer2, by, 0, iLen); fs.Write(by, 0, iLen); fs.Close(); } if (struPlateResultInfo.dwFarCarPicLen != 0) { strFilePath = m_OutputDir + strIP + "\\" + pAlarmer.lUserID + "_远景图.jpg"; FileStream fs = new FileStream(strFilePath, FileMode.Create); int iLen = (int)struPlateResultInfo.dwFarCarPicLen; byte[] by = new byte[iLen]; Marshal.Copy(struPlateResultInfo.pBuffer5, by, 0, iLen); fs.Write(by, 0, iLen); fs.Close(); } //抓拍时间:年月日时分秒 string strTimeYear = System.Text.Encoding.UTF8.GetString(struPlateResultInfo.byAbsTime); //上传结果 string stringAlarm = "抓拍上传," + "车牌:" + struPlateResultInfo.struPlateInfo.sLicense + ",车辆序号:" + struPlateResultInfo.struVehicleInfo.dwIndex; if (NoticeAlarmEvent != null) { string ccommType = ObjectCopier.Clone <string>(commType); string cstrIP = ObjectCopier.Clone <string>(strIP); string cstringAlarm = ObjectCopier.Clone <string>(stringAlarm); NoticeAlarmEvent(ccommType, DateTime.Now.ToString(), cstrIP, cstringAlarm); } }
public void ProcessCommAlarm(ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser) { CHCNetSDK.NET_DVR_ALARMINFO struAlarmInfo = new CHCNetSDK.NET_DVR_ALARMINFO(); struAlarmInfo = (CHCNetSDK.NET_DVR_ALARMINFO)Marshal.PtrToStructure(pAlarmInfo, typeof(CHCNetSDK.NET_DVR_ALARMINFO)); string strIP = pAlarmer.sDeviceIP; string stringAlarm = ""; int i = 0; switch (struAlarmInfo.dwAlarmType) { case 0: stringAlarm = "信号量报警,报警报警输入口:" + struAlarmInfo.dwAlarmInputNumber + ",触发录像通道:"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM; i++) { if (struAlarmInfo.dwAlarmRelateChannel[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 1: stringAlarm = "硬盘满,报警硬盘号:"; for (i = 0; i < CHCNetSDK.MAX_DISKNUM; i++) { if (struAlarmInfo.dwDiskNumber[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 2: stringAlarm = "信号丢失,报警通道:"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM; i++) { if (struAlarmInfo.dwChannel[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 3: stringAlarm = "移动侦测,报警通道:"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM; i++) { if (struAlarmInfo.dwChannel[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 4: stringAlarm = "硬盘未格式化,报警硬盘号:"; for (i = 0; i < CHCNetSDK.MAX_DISKNUM; i++) { if (struAlarmInfo.dwDiskNumber[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 5: stringAlarm = "读写硬盘出错,报警硬盘号:"; for (i = 0; i < CHCNetSDK.MAX_DISKNUM; i++) { if (struAlarmInfo.dwDiskNumber[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 6: stringAlarm = "遮挡报警,报警通道:"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM; i++) { if (struAlarmInfo.dwChannel[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 7: stringAlarm = "制式不匹配,报警通道"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM; i++) { if (struAlarmInfo.dwChannel[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 8: stringAlarm = "非法访问"; break; default: stringAlarm = "其他未知报警信息"; break; } MessageBox.Show("ProcessCommAlarm:" + stringAlarm); }
/// <summary> /// 越界侦测用的报警 /// </summary> /// <param name="pAlarmer"></param> /// <param name="pAlarmInfo"></param> /// <param name="dwBufLen"></param> /// <param name="pUser"></param> private void ProcessCommAlarm_RULE(ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser) { string strNvrIp = pAlarmer.sDeviceIP;//报警nvrIp地址 CHCNetSDK.NET_VCA_RULE_ALARM struRuleAlarmInfo = new CHCNetSDK.NET_VCA_RULE_ALARM(); //看下报警信息里面有没有通道号, struRuleAlarmInfo = (CHCNetSDK.NET_VCA_RULE_ALARM)Marshal.PtrToStructure(pAlarmInfo, typeof(CHCNetSDK.NET_VCA_RULE_ALARM)); byte channel = struRuleAlarmInfo.struDevInfo.byChannel; //报警设备IP地址 string strIP = struRuleAlarmInfo.struDevInfo.struDevIP.sIpV4; //报警信息 string stringAlarm = ""; uint dwSize = (uint)Marshal.SizeOf(struRuleAlarmInfo.struRuleInfo.uEventParam); switch (struRuleAlarmInfo.struRuleInfo.wEventTypeEx) { case (ushort)CHCNetSDK.VCA_RULE_EVENT_TYPE_EX.ENUM_VCA_EVENT_TRAVERSE_PLANE: IntPtr ptrTraverseInfo = Marshal.AllocHGlobal((Int32)dwSize); Marshal.StructureToPtr(struRuleAlarmInfo.struRuleInfo.uEventParam, ptrTraverseInfo, false); CHCNetSDK.NET_VCA_TRAVERSE_PLANE m_struTraversePlane = (CHCNetSDK.NET_VCA_TRAVERSE_PLANE)Marshal.PtrToStructure(ptrTraverseInfo, typeof(CHCNetSDK.NET_VCA_TRAVERSE_PLANE)); stringAlarm = "穿越警戒面,目标ID:" + struRuleAlarmInfo.struTargetInfo.dwID; //警戒面边线起点坐标: (m_struTraversePlane.struPlaneBottom.struStart.fX, m_struTraversePlane.struPlaneBottom.struStart.fY) //警戒面边线终点坐标: (m_struTraversePlane.struPlaneBottom.struEnd.fX, m_struTraversePlane.struPlaneBottom.struEnd.fY) break; case (ushort)CHCNetSDK.VCA_RULE_EVENT_TYPE_EX.ENUM_VCA_EVENT_ENTER_AREA: IntPtr ptrEnterInfo = Marshal.AllocHGlobal((Int32)dwSize); Marshal.StructureToPtr(struRuleAlarmInfo.struRuleInfo.uEventParam, ptrEnterInfo, false); CHCNetSDK.NET_VCA_AREA m_struVcaArea = (CHCNetSDK.NET_VCA_AREA)Marshal.PtrToStructure(ptrEnterInfo, typeof(CHCNetSDK.NET_VCA_AREA)); stringAlarm = "目标进入区域,目标ID:" + struRuleAlarmInfo.struTargetInfo.dwID; //m_struVcaArea.struRegion 多边形区域坐标 break; case (ushort)CHCNetSDK.VCA_RULE_EVENT_TYPE_EX.ENUM_VCA_EVENT_EXIT_AREA: IntPtr ptrExitInfo = Marshal.AllocHGlobal((Int32)dwSize); Marshal.StructureToPtr(struRuleAlarmInfo.struRuleInfo.uEventParam, ptrExitInfo, false); m_struVcaArea = (CHCNetSDK.NET_VCA_AREA)Marshal.PtrToStructure(ptrExitInfo, typeof(CHCNetSDK.NET_VCA_AREA)); stringAlarm = "目标离开区域,目标ID:" + struRuleAlarmInfo.struTargetInfo.dwID; //m_struVcaArea.struRegion 多边形区域坐标 break; case (ushort)CHCNetSDK.VCA_RULE_EVENT_TYPE_EX.ENUM_VCA_EVENT_INTRUSION: IntPtr ptrIntrusionInfo = Marshal.AllocHGlobal((Int32)dwSize); Marshal.StructureToPtr(struRuleAlarmInfo.struRuleInfo.uEventParam, ptrIntrusionInfo, false); CHCNetSDK.NET_VCA_INTRUSION m_struIntrusion = (CHCNetSDK.NET_VCA_INTRUSION)Marshal.PtrToStructure(ptrIntrusionInfo, typeof(CHCNetSDK.NET_VCA_INTRUSION)); stringAlarm = "周界入侵,目标ID:" + struRuleAlarmInfo.struTargetInfo.dwID; //m_struIntrusion.struRegion 多边形区域坐标 break; default: stringAlarm = "其他行为分析报警,目标ID:" + struRuleAlarmInfo.struTargetInfo.dwID; break; } //报警图片保存 if (struRuleAlarmInfo.dwPicDataLen > 0) { FileStream fs = new FileStream("行为分析报警抓图.jpg", FileMode.Create); int iLen = (int)struRuleAlarmInfo.dwPicDataLen; byte[] by = new byte[iLen]; Marshal.Copy(struRuleAlarmInfo.pImage, by, 0, iLen); fs.Write(by, 0, iLen); fs.Close(); } //报警时间:年月日时分秒 string time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); string theone = "0"; string name = ""; string position = ""; try { //根据数据库找到theone、摄像头名称等内容 //找到了目前这个函数通道所在的NVR, //然后根据通道号跟NVRip地址,找到摄像头 string srtSql = "IP地址 ='" + strIP + "'"; DataRow[] dr = StaticData.g_dtCamera.Select(srtSql); if (dr.Length > 0) { theone = dr[0]["theone"].ToString(); name = dr[0]["摄像头名称"].ToString(); position = dr[0]["坐标"].ToString(); } else { // 处理获取非指定camaras错误回调后所产生的数据为空的异常情况 // 异常eg: 发现了非列表中的未知nvrip = “10.1.12.51”的设备 return; } } catch (Exception) { StaticUtils.ShowEventMsg("HikvisionAlarmCallBackFun.class-ProcessCommAlarm_RULE : 报警回调函数出现异常!\n"); //throw; } //读取事件数据库,判断数据库是否存在该事件,且时间是否2分钟以上差别,存在且是的话插入新事件 //不是的话更新endtime字段为当前时间 //不存在的话直接插入数据,还需要插入个摄像头的位置,名称 string[] paras = new string[2] { time, strNvrIp }; string str_channel = Convert.ToString(channel); CheckEvent(name, theone, stringAlarm, DateTime.Now.ToString().Replace('/', '-'), position, name, paras, str_channel); }
private void MsgCallback(int lCommand, ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser) { //通过lCommand来判断接收到的报警信息类型,不同的lCommand对应不同的pAlarmInfo内容 switch (lCommand) { case CHCNetSDK.COMM_ALARM: //(DS-8000老设备)移动侦测、视频丢失、遮挡、IO信号量等报警信息 ProcessCommAlarm(ref pAlarmer, pAlarmInfo, dwBufLen, pUser); break; case CHCNetSDK.COMM_ALARM_V30: //移动侦测、视频丢失、遮挡、IO信号量等报警信息 ProcessCommAlarm_V30(ref pAlarmer, pAlarmInfo, dwBufLen, pUser); break; case CHCNetSDK.COMM_ALARM_RULE: //进出区域、入侵、徘徊、人员聚集等行为分析报警信息 ProcessCommAlarm_RULE(ref pAlarmer, pAlarmInfo, dwBufLen, pUser); break; //case CHCNetSDK.COMM_UPLOAD_PLATE_RESULT://交通抓拍结果上传(老报警信息类型) // ProcessCommAlarm_Plate(ref pAlarmer, pAlarmInfo, dwBufLen, pUser); // break; //case CHCNetSDK.COMM_ITS_PLATE_RESULT://交通抓拍结果上传(新报警信息类型) // ProcessCommAlarm_ITSPlate(ref pAlarmer, pAlarmInfo, dwBufLen, pUser); // break; //case CHCNetSDK.COMM_ALARM_PDC://客流量统计报警信息 // ProcessCommAlarm_PDC(ref pAlarmer, pAlarmInfo, dwBufLen, pUser); // break; //case CHCNetSDK.COMM_ITS_PARK_VEHICLE://客流量统计报警信息 // ProcessCommAlarm_PARK(ref pAlarmer, pAlarmInfo, dwBufLen, pUser); // break; //case CHCNetSDK.COMM_DIAGNOSIS_UPLOAD://VQD报警信息 // ProcessCommAlarm_VQD(ref pAlarmer, pAlarmInfo, dwBufLen, pUser); // break; //case CHCNetSDK.COMM_UPLOAD_FACESNAP_RESULT://人脸抓拍结果信息 // ProcessCommAlarm_FaceSnap(ref pAlarmer, pAlarmInfo, dwBufLen, pUser); // break; //case CHCNetSDK.COMM_SNAP_MATCH_ALARM://人脸比对结果信息 // ProcessCommAlarm_FaceMatch(ref pAlarmer, pAlarmInfo, dwBufLen, pUser); // break; //case CHCNetSDK.COMM_ALARM_FACE_DETECTION://人脸侦测报警信息 // ProcessCommAlarm_FaceDetect(ref pAlarmer, pAlarmInfo, dwBufLen, pUser); // break; //case CHCNetSDK.COMM_ALARMHOST_CID_ALARM://报警主机CID报警上传 // ProcessCommAlarm_CIDAlarm(ref pAlarmer, pAlarmInfo, dwBufLen, pUser); // break; //case CHCNetSDK.COMM_ALARM_ACS://门禁主机报警上传 // ProcessCommAlarm_AcsAlarm(ref pAlarmer, pAlarmInfo, dwBufLen, pUser); // break; //case CHCNetSDK.COMM_ID_INFO_ALARM://身份证刷卡信息上传 // ProcessCommAlarm_IDInfoAlarm(ref pAlarmer, pAlarmInfo, dwBufLen, pUser); // break; default: { //报警设备IP地址 string strIP = pAlarmer.sDeviceIP; //报警信息类型 string stringAlarm = "报警上传,信息类型:" + lCommand; if (true) { string[] paras = new string[3]; paras[0] = DateTime.Now.ToString(); //当前PC系统时间 paras[1] = strIP; paras[2] = stringAlarm; // Console.WriteLine (paras[0] + " " + paras[1] + " " + paras[2]); } else { //创建该控件的主线程直接更新信息列表 //UpdateClientList(DateTime.Now.ToString(), strIP, stringAlarm); } } break; } }
private void ProcessCommAlarm(ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser) { CHCNetSDK.NET_DVR_ALARMINFO struAlarmInfo = new CHCNetSDK.NET_DVR_ALARMINFO(); struAlarmInfo = (CHCNetSDK.NET_DVR_ALARMINFO)Marshal.PtrToStructure(pAlarmInfo, typeof(CHCNetSDK.NET_DVR_ALARMINFO)); string strIP = pAlarmer.sDeviceIP; string stringAlarm = ""; int i = 0; switch (struAlarmInfo.dwAlarmType) { case 0: stringAlarm = "信号量报警,报警报警输入口:" + struAlarmInfo.dwAlarmInputNumber + ",触发录像通道:"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM; i++) { if (struAlarmInfo.dwAlarmRelateChannel[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 1: stringAlarm = "硬盘满,报警硬盘号:"; for (i = 0; i < CHCNetSDK.MAX_DISKNUM; i++) { if (struAlarmInfo.dwDiskNumber[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 2: stringAlarm = "信号丢失,报警通道:"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM; i++) { if (struAlarmInfo.dwChannel[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 3: stringAlarm = "移动侦测,报警通道:"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM; i++) { if (struAlarmInfo.dwChannel[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 4: stringAlarm = "硬盘未格式化,报警硬盘号:"; for (i = 0; i < CHCNetSDK.MAX_DISKNUM; i++) { if (struAlarmInfo.dwDiskNumber[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 5: stringAlarm = "读写硬盘出错,报警硬盘号:"; for (i = 0; i < CHCNetSDK.MAX_DISKNUM; i++) { if (struAlarmInfo.dwDiskNumber[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 6: stringAlarm = "遮挡报警,报警通道:"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM; i++) { if (struAlarmInfo.dwChannel[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 7: stringAlarm = "制式不匹配,报警通道"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM; i++) { if (struAlarmInfo.dwChannel[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 8: stringAlarm = "非法访问"; break; default: stringAlarm = "其他未知报警信息"; break; } if (true) { string[] paras = new string[3]; paras[0] = DateTime.Now.ToString(); //当前PC系统时间 paras[1] = strIP; paras[2] = stringAlarm; // Console.WriteLine(paras[0] + " " + paras[1] + " " + paras[2]); } else { //创建该控件的主线程直接更新信息列表 // UpdateClientList(DateTime.Now.ToString(), strIP, stringAlarm); } }
private void ProcessCommAlarm_V30(ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser) { CHCNetSDK.NET_DVR_ALARMINFO_V30 struAlarmInfoV30 = new CHCNetSDK.NET_DVR_ALARMINFO_V30(); struAlarmInfoV30 = (CHCNetSDK.NET_DVR_ALARMINFO_V30)Marshal.PtrToStructure(pAlarmInfo, typeof(CHCNetSDK.NET_DVR_ALARMINFO_V30)); string strIP = pAlarmer.sDeviceIP; string stringAlarm = ""; int i; switch (struAlarmInfoV30.dwAlarmType) { case 0: stringAlarm = "信号量报警,报警报警输入口:" + struAlarmInfoV30.dwAlarmInputNumber + ",触发录像通道:"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byAlarmRelateChannel[i] == 1) { stringAlarm += (i + 1 - 32) + ","; } } break; case 1: stringAlarm = "硬盘满,"; for (i = 0; i < CHCNetSDK.MAX_DISKNUM_V30; i++) { if (struAlarmInfoV30.byDiskNumber[i] == 1) { stringAlarm += (i + 1 - 32) + ","; } } break; case 2: stringAlarm = "信号丢失,"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byChannel[i] == 1) { stringAlarm += (i + 1 - 32) + ","; } } break; case 3: stringAlarm = "移动侦测,"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) //MAX_CHANNUM_V30 { if (struAlarmInfoV30.byChannel[i] == 1) { stringAlarm += (i + 1 - 32) + ","; } } break; case 4: stringAlarm = "硬盘未格式化,"; for (i = 0; i < CHCNetSDK.MAX_DISKNUM_V30; i++) { if (struAlarmInfoV30.byDiskNumber[i] == 1) { stringAlarm += (i + 1 - 32) + ","; } } break; case 5: stringAlarm = "读写硬盘出错,"; for (i = 0; i < CHCNetSDK.MAX_DISKNUM_V30; i++) { if (struAlarmInfoV30.byDiskNumber[i] == 1) { stringAlarm += (i + 1 - 32) + ","; } } break; case 6: stringAlarm = "遮挡报警,"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byChannel[i] == 1) { stringAlarm += (i + 1 - 32) + ","; } } break; case 7: stringAlarm = "制式不匹配,"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byChannel[i] == 1) { stringAlarm += (i + 1 - 32) + ","; } } break; case 8: stringAlarm = "非法访问,"; break; case 9: stringAlarm = "视频信号异常,"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byChannel[i] == 1) { stringAlarm += (i + 1 - 32) + ","; } } break; case 10: stringAlarm = "录像/抓图异常,"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byChannel[i] == 1) { stringAlarm += (i + 1 - 32) + ","; } } break; case 11: stringAlarm = "智能场景变化,"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byChannel[i] == 1) { stringAlarm += (i + 1 - 32) + ","; } } break; case 12: stringAlarm = "阵列异常,"; break; case 13: stringAlarm = "前端/录像分辨率不匹配,"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byChannel[i] == 1) { stringAlarm += (i + 1 - 32) + ","; } } break; case 15: stringAlarm = "智能侦测,"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byChannel[i] == 1) { stringAlarm += (i + 1 - 32) + ","; } } break; default: stringAlarm = "其他未知报警信息,"; break; } //在这里为报警信息 if (true) { string[] paras = new string[3]; paras[0] = DateTime.Now.ToString(); //当前PC系统时间 paras[1] = strIP; //nvrip地址 paras[2] = stringAlarm; string[] alarmMsg = paras[2].Split(','); //报警类型和通道号 // Console.WriteLine(paras[0] + "," + paras[1] + "," + paras[2] + "\n"); //根据数据库找到theone、摄像头名称等内容 string theone = "0"; string name = ""; string position = ""; try { //根据数据库找到theone、摄像头名称等内容 //找到了目前这个函数通道所在的NVR, //然后根据通道号跟NVRip地址,找到摄像头 string srtSql = "NVRIP地址= '" + paras[1] + "'" + " and 通道号 ='" + alarmMsg[1] + "'"; DataRow[] dr = StaticData.g_dtCamera.Select(srtSql); if (dr.Length > 0) { theone = dr[0]["theone"].ToString(); name = dr[0]["摄像头名称"].ToString(); position = dr[0]["坐标"].ToString(); } else { // 处理获取非指定camaras错误回调后所产生的数据为空的异常情况 // 异常eg: 发现了非列表中的未知nvrip = “10.1.12.51”的设备 return; } } catch (Exception) { StaticUtils.ShowEventMsg("HikvisionAlarmCallBackFun.class-ProcessCommAlarm_V30 : 报警回调函数出现异常!\n"); //throw; } //读取事件数据库,判断数据库是否存在该事件,且时间是否2分钟以上差别,存在且是的话插入新事件 //不是的话更新endtime字段为当前时间 //不存在的话直接插入数据,还需要插入个摄像头的位置,名称 CheckEvent(name, theone, alarmMsg[0], DateTime.Now.ToString().Replace('/', '-'), position, name, paras, alarmMsg[1]); } else { //创建该控件的主线程直接更新信息列表 // UpdateClientList(DateTime.Now.ToString(), strIP, stringAlarm); } }
/// <summary> /// 回调函数 /// </summary> /// <param name="lCommand">报警信息类型</param> /// <param name="pAlarmer"></param> /// <param name="pAlarmInfo"></param> /// <param name="dwBufLen"></param> /// <param name="pUser"></param> /// <returns></returns> private bool MSgCallback_V31(int lCommand, ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser) { switch (lCommand) //不同的lCommand对应不同的pAlarmInfo内容 { case CHCNetSDK.COMM_ITS_PLATE_RESULT: //交通抓拍结果上传(新类型) { #region 车头相片 第一部相机 CHCNetSDK.NET_ITS_PLATE_RESULT struITSPlateResult2 = new CHCNetSDK.NET_ITS_PLATE_RESULT(); uint dwSize2 = (uint)Marshal.SizeOf(struITSPlateResult2); struITSPlateResult2 = (CHCNetSDK.NET_ITS_PLATE_RESULT)Marshal.PtrToStructure(pAlarmInfo, typeof(CHCNetSDK.NET_ITS_PLATE_RESULT)); int lChannel2 = 1; //通道号 Channel number CHCNetSDK.NET_DVR_MakeKeyFrame(m_lUserID, lChannel2); //保存车头相片 byte[] Carno = struITSPlateResult2.struPlateInfo.sLicense; //车牌号码 byte roudNo = struITSPlateResult2.byDriveChan; //车道号 byte secondCam = struITSPlateResult2.bySecondCam; string carNumber = System.Text.Encoding.Default.GetString(Carno); string nocar = roudNo.ToString(); string strSecondCam = secondCam.ToString(); string chepaihao = System.Text.Encoding.GetEncoding("GBK").GetString(struITSPlateResult2.struPlateInfo.sLicense).TrimEnd('\0'); string headpath = "F:\\VideoCapture\\picture\\NoCar.jpg"; //保存抓拍图片 for (int i = 0; i < struITSPlateResult2.dwPicNum; i++) { if (struITSPlateResult2.struPicInfo[i].dwDataLen != 0) { // label7.Text = nocar; //iFileNumber string path = "F:\\VideoCapture\\picture"; if (System.IO.Directory.Exists(path) == false) { System.IO.Directory.CreateDirectory(path); } headpath = "\\" + "G" + chepaihao + "G2" + secondCam + ".jpg"; if (struITSPlateResult2.struPicInfo[i].byType == 1) { FileStream fs = new FileStream(headpath, FileMode.Create); int iLen = (int)struITSPlateResult2.struPicInfo[i].dwDataLen; byte[] by = new byte[iLen]; Marshal.Copy(struITSPlateResult2.struPicInfo[i].pBuffer, by, 0, iLen); fs.Write(by, 0, iLen); fs.Close(); } iFileNumber++; } } #endregion #region 保存视频 黑烟相机 第二部相机 CHCNetSDK.NET_ITS_PLATE_RESULT struITSPlateResult = new CHCNetSDK.NET_ITS_PLATE_RESULT(); uint dwSize = (uint)Marshal.SizeOf(struITSPlateResult); struITSPlateResult = (CHCNetSDK.NET_ITS_PLATE_RESULT)Marshal.PtrToStructure(pAlarmInfo, typeof(CHCNetSDK.NET_ITS_PLATE_RESULT)); //获取黄色车牌才抓拍以及录视频 //车牌颜色 byte plateColor = struITSPlateResult.struPlateInfo.byColor; //1黄色 //录像保存路径和文件名 the path and file name to save string sVideoFileName; string path2 = "F:\\VideoCapture"; if (System.IO.Directory.Exists(path2) == false) { System.IO.Directory.CreateDirectory(path2); } sVideoFileName = "\\" + DateTime.Now.ToString("hhmmss") + ".mp4"; //强制I帧 Make a I frame // int lChannel = Int16.Parse(textBoxChannel.Text); //通道号 Channel number int lChannel = 2; //通道号 Channel number CHCNetSDK.NET_DVR_MakeKeyFrame(m_lUserID2, lChannel); //开始录像 Start recording CHCNetSDK.NET_DVR_SaveRealData(m_lUserID2, sVideoFileName); Thread.Sleep(5000); //停止录像 CHCNetSDK.NET_DVR_StopSaveRealData(m_lUserID2); #endregion #region 调用黑烟检测函数 如果满足要求将 先关信息存入到数据库 string ss = HttpGet("http://192.168.200.8:5000/parse/"); JsonReader reader = new JsonTextReader(new StringReader(ss)); while (reader.Read()) { ss = reader.Value.ToString(); } Console.WriteLine("处理后:" + ss); JArray jArray = (JArray)JsonConvert.DeserializeObject(ss); string vLicenceNo = jArray[0]["vLicenceNo"].ToString(); float vLicenceNoCer = (float)Convert.ToDouble(jArray[0]["vLicenceNoCer"]); int vRingelLevel = Convert.ToInt32(jArray[0]["vRingelLevel"]); //jArray[0]["vRingelLevel"].ToString(); float vRingelLevelCer = (float)Convert.ToDouble(jArray[0]["vRingelLevelCer"]); string vType = jArray[0]["vType"].ToString(); string vLicenceColor = jArray[0]["vLicenceColor"].ToString(); string vLicenceType = jArray[0]["vLicenceType"].ToString(); string vimage11 = jArray[0]["vImage1"].ToString(); string vimage21 = jArray[0]["vImage2"].ToString(); #endregion #region 保存数据 DateTime vchecktime = System.DateTime.Now; //检测的时间 string vstation = "文曲路"; //站点 string vno = vLicenceNo; //车牌号 float vnocer = vLicenceNoCer; string vcolor = vLicenceColor; //车牌颜色 string vtype = vType; int vroadno = roudNo; string vboadtype = vLicenceType; float vboardcer = vLicenceNoCer; //车牌置信度 int vrigel = vRingelLevel; //林格曼黑度 float vrigelcer = vRingelLevelCer; //置信度 string vimage1 = vimage11; //车尾照片1 string vimage2 = vimage21; //车尾照片2 string vimage = headpath; string vvideo = sVideoFileName; Vehicle v = new Vehicle(); v.vcheckdate = vchecktime; v.vstationname = vstation; v.vno = vno; v.vboardcredi = (float)vnocer; v.vcolor = vcolor; v.vroadno = vroadno; v.vboardtype = vboadtype; v.vringelman = vrigel; v.vringelmancredi = (float)vrigelcer; v.vimage1 = vimage1; v.vheadimage = vimage; v.vimage2 = vimage2; v.vvideo = vvideo; IVehicleBAL vehicleBAL = new ImVehicleBAL(); if (vehicleBAL.AddVehicle(v) < 0) { MessageBox.Show("添加失败"); } #endregion } break; } return(true); }
private void ProcessCommAlarmACS(ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser) { CHCNetSDK.NET_DVR_ACS_ALARM_INFO struAcsAlarmInfo = new CHCNetSDK.NET_DVR_ACS_ALARM_INFO(); struAcsAlarmInfo = (CHCNetSDK.NET_DVR_ACS_ALARM_INFO)Marshal.PtrToStructure(pAlarmInfo, typeof(CHCNetSDK.NET_DVR_ACS_ALARM_INFO)); CHCNetSDK.NET_DVR_LOG_V30 struFileInfo = new CHCNetSDK.NET_DVR_LOG_V30(); struFileInfo.dwMajorType = struAcsAlarmInfo.dwMajor; struFileInfo.dwMinorType = struAcsAlarmInfo.dwMinor; char[] csTmp = new char[256]; if (CHCNetSDK.MAJOR_ALARM == struFileInfo.dwMajorType) { TypeMap.AlarmMinorTypeMap(struFileInfo, csTmp); } else if (CHCNetSDK.MAJOR_OPERATION == struFileInfo.dwMajorType) { TypeMap.OperationMinorTypeMap(struFileInfo, csTmp); } else if (CHCNetSDK.MAJOR_EXCEPTION == struFileInfo.dwMajorType) { TypeMap.ExceptionMinorTypeMap(struFileInfo, csTmp); } else if (CHCNetSDK.MAJOR_EVENT == struFileInfo.dwMajorType) { TypeMap.EventMinorTypeMap(struFileInfo, csTmp); } String szInfo = new String(csTmp).TrimEnd('\0'); String szInfoBuf = null; szInfoBuf = szInfo; /**************************************************/ String name = System.Text.Encoding.UTF8.GetString(struAcsAlarmInfo.sNetUser).TrimEnd('\0'); for (int i = 0; i < struAcsAlarmInfo.sNetUser.Length; i++) { if (struAcsAlarmInfo.sNetUser[i] == 0) { name = name.Substring(0, i); break; } } /**************************************************/ szInfoBuf = string.Format("{0} time:{1,4}-{2:D2}-{3} {4:D2}:{5:D2}:{6:D2}, [{7}]({8})", szInfo, struAcsAlarmInfo.struTime.dwYear, struAcsAlarmInfo.struTime.dwMonth, struAcsAlarmInfo.struTime.dwDay, struAcsAlarmInfo.struTime.dwHour, struAcsAlarmInfo.struTime.dwMinute, struAcsAlarmInfo.struTime.dwSecond, struAcsAlarmInfo.struRemoteHostAddr.sIpV4, name); if (struAcsAlarmInfo.struAcsEventInfo.byCardNo[0] != 0) { szInfoBuf = szInfoBuf + "+Card Number:" + System.Text.Encoding.UTF8.GetString(struAcsAlarmInfo.struAcsEventInfo.byCardNo).TrimEnd('\0'); } String[] szCardType = { "normal card", "disabled card", "blacklist card", "night watch card", "stress card", "super card", "guest card" }; byte byCardType = struAcsAlarmInfo.struAcsEventInfo.byCardType; if (byCardType != 0 && byCardType <= szCardType.Length) { szInfoBuf = szInfoBuf + "+Card Type:" + szCardType[byCardType - 1]; } if (struAcsAlarmInfo.struAcsEventInfo.dwCardReaderNo != 0) { szInfoBuf = szInfoBuf + "+Card Reader Number:" + struAcsAlarmInfo.struAcsEventInfo.dwCardReaderNo; } if (struAcsAlarmInfo.struAcsEventInfo.dwDoorNo != 0) { szInfoBuf = szInfoBuf + "+Door Number:" + struAcsAlarmInfo.struAcsEventInfo.dwDoorNo; } if (struAcsAlarmInfo.struAcsEventInfo.dwVerifyNo != 0) { szInfoBuf = szInfoBuf + "+Multiple Card Authentication Serial Number:" + struAcsAlarmInfo.struAcsEventInfo.dwVerifyNo; } if (struAcsAlarmInfo.struAcsEventInfo.dwAlarmInNo != 0) { szInfoBuf = szInfoBuf + "+Alarm Input Number:" + struAcsAlarmInfo.struAcsEventInfo.dwAlarmInNo; } if (struAcsAlarmInfo.struAcsEventInfo.dwAlarmOutNo != 0) { szInfoBuf = szInfoBuf + "+Alarm Output Number:" + struAcsAlarmInfo.struAcsEventInfo.dwAlarmOutNo; } if (struAcsAlarmInfo.struAcsEventInfo.dwCaseSensorNo != 0) { szInfoBuf = szInfoBuf + "+Event Trigger Number:" + struAcsAlarmInfo.struAcsEventInfo.dwCaseSensorNo; } if (struAcsAlarmInfo.struAcsEventInfo.dwRs485No != 0) { szInfoBuf = szInfoBuf + "+RS485 Channel Number:" + struAcsAlarmInfo.struAcsEventInfo.dwRs485No; } if (struAcsAlarmInfo.struAcsEventInfo.dwMultiCardGroupNo != 0) { szInfoBuf = szInfoBuf + "+Multi Recombinant Authentication ID:" + struAcsAlarmInfo.struAcsEventInfo.dwMultiCardGroupNo; } if (struAcsAlarmInfo.struAcsEventInfo.byCardReaderKind != 0) { szInfoBuf = szInfoBuf + "+CardReaderKind:" + struAcsAlarmInfo.struAcsEventInfo.byCardReaderKind.ToString(); } if (struAcsAlarmInfo.struAcsEventInfo.wAccessChannel >= 0) { szInfoBuf = szInfoBuf + "+wAccessChannel:" + struAcsAlarmInfo.struAcsEventInfo.wAccessChannel; } if (struAcsAlarmInfo.struAcsEventInfo.dwEmployeeNo != 0) { szInfoBuf = szInfoBuf + "+EmployeeNo:" + struAcsAlarmInfo.struAcsEventInfo.dwEmployeeNo; } if (struAcsAlarmInfo.struAcsEventInfo.byDeviceNo != 0) { szInfoBuf = szInfoBuf + "+byDeviceNo:" + struAcsAlarmInfo.struAcsEventInfo.byDeviceNo.ToString(); } if (struAcsAlarmInfo.struAcsEventInfo.wLocalControllerID >= 0) { szInfoBuf = szInfoBuf + "+wLocalControllerID:" + struAcsAlarmInfo.struAcsEventInfo.wLocalControllerID; } if (struAcsAlarmInfo.struAcsEventInfo.byInternetAccess >= 0) { szInfoBuf = szInfoBuf + "+byInternetAccess:" + struAcsAlarmInfo.struAcsEventInfo.byInternetAccess.ToString(); } if (struAcsAlarmInfo.struAcsEventInfo.byType >= 0) { szInfoBuf = szInfoBuf + "+byType:" + struAcsAlarmInfo.struAcsEventInfo.byType.ToString(); } if (struAcsAlarmInfo.struAcsEventInfo.bySwipeCardType != 0) { szInfoBuf = szInfoBuf + "+bySwipeCardType:" + struAcsAlarmInfo.struAcsEventInfo.bySwipeCardType.ToString(); } //其它消息先不罗列了...... if (struAcsAlarmInfo.dwPicDataLen > 0) { path = null; Random rand = new Random(unchecked ((int)DateTime.Now.Ticks)); path = string.Format(@"C:/Picture/ACS_LocalTime{0}_{1}.bmp", szInfo, rand.Next()); using (FileStream fs = new FileStream(path, FileMode.Create)) { int iLen = (int)struAcsAlarmInfo.dwPicDataLen; byte[] by = new byte[iLen]; Marshal.Copy(struAcsAlarmInfo.pPicData, by, 0, iLen); fs.Write(by, 0, iLen); fs.Close(); } szInfoBuf = szInfoBuf + "SavePath:" + path; } this.listViewAlarmInfo.BeginInvoke(new Action(() => { ListViewItem Item = new ListViewItem(); Item.Text = (++m_lLogNum).ToString(); Item.SubItems.Add(DateTime.Now.ToString()); Item.SubItems.Add(szInfoBuf); this.listViewAlarmInfo.Items.Add(Item); })); }
private void ProcessCommAlarm_V30(ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser) { MyDebugInfo AlarmInfo = new MyDebugInfo(DebugInfo); CHCNetSDK.NET_DVR_ALARMINFO_V30 struAlarmInfoV30 = new CHCNetSDK.NET_DVR_ALARMINFO_V30(); struAlarmInfoV30 = (CHCNetSDK.NET_DVR_ALARMINFO_V30)Marshal.PtrToStructure(pAlarmInfo, typeof(CHCNetSDK.NET_DVR_ALARMINFO_V30)); string str; switch (struAlarmInfoV30.dwAlarmType) { case 0: this.BeginInvoke(AlarmInfo, "sensor alarm"); break; case 1: this.BeginInvoke(AlarmInfo, "hard disk full"); break; case 2: this.BeginInvoke(AlarmInfo, "video lost"); break; case 3: str = ""; str += pAlarmer.sDeviceIP; str += " motion detection"; this.BeginInvoke(AlarmInfo, str); break; case 4: this.BeginInvoke(AlarmInfo, "hard disk unformatted"); break; case 5: this.BeginInvoke(AlarmInfo, "hard disk error"); break; case 6: this.BeginInvoke(AlarmInfo, "tampering detection"); break; case 7: this.BeginInvoke(AlarmInfo, "unmatched video output standard"); break; case 8: this.BeginInvoke(AlarmInfo, "illegal operation"); break; case 9: this.BeginInvoke(AlarmInfo, "videl Signal abnormal"); break; case 10: this.BeginInvoke(AlarmInfo, "record abnormal"); break; default: this.BeginInvoke(AlarmInfo, "Unknow alarm"); break; } }
public void ProcessCommAlarm(ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser, string commType) { CHCNetSDK.NET_DVR_ALARMINFO struAlarmInfo = new CHCNetSDK.NET_DVR_ALARMINFO(); struAlarmInfo = (CHCNetSDK.NET_DVR_ALARMINFO)Marshal.PtrToStructure(pAlarmInfo, typeof(CHCNetSDK.NET_DVR_ALARMINFO)); string strIP = pAlarmer.sDeviceIP; string stringAlarm = ""; int i = 0; switch (struAlarmInfo.dwAlarmType) { case 0: stringAlarm = "信号量报警,报警报警输入口:" + struAlarmInfo.dwAlarmInputNumber + ",触发录像通道:"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM; i++) { if (struAlarmInfo.dwAlarmRelateChannel[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 1: stringAlarm = "硬盘满,报警硬盘号:"; for (i = 0; i < CHCNetSDK.MAX_DISKNUM; i++) { if (struAlarmInfo.dwDiskNumber[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 2: stringAlarm = "信号丢失,报警通道:"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM; i++) { if (struAlarmInfo.dwChannel[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 3: stringAlarm = "移动侦测,报警通道:"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM; i++) { if (struAlarmInfo.dwChannel[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 4: stringAlarm = "硬盘未格式化,报警硬盘号:"; for (i = 0; i < CHCNetSDK.MAX_DISKNUM; i++) { if (struAlarmInfo.dwDiskNumber[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 5: stringAlarm = "读写硬盘出错,报警硬盘号:"; for (i = 0; i < CHCNetSDK.MAX_DISKNUM; i++) { if (struAlarmInfo.dwDiskNumber[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 6: stringAlarm = "遮挡报警,报警通道:"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM; i++) { if (struAlarmInfo.dwChannel[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 7: stringAlarm = "制式不匹配,报警通道"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM; i++) { if (struAlarmInfo.dwChannel[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 8: stringAlarm = "非法访问"; break; default: stringAlarm = "其他未知报警信息"; break; } if (NoticeAlarmEvent != null) { string ccommType = ObjectCopier.Clone <string>(commType); string cstrIP = ObjectCopier.Clone <string>(strIP); string cstringAlarm = ObjectCopier.Clone <string>(stringAlarm); NoticeAlarmEvent(ccommType, DateTime.Now.ToString(), cstrIP, cstringAlarm); } }
private bool MsgCallback_V31(int lCommand, ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser) { AlarmMessageHandle(lCommand, ref pAlarmer, pAlarmInfo, dwBufLen, pUser); return(true); }
private void ProcessCommAlarm_RULE(ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser, string commType) { CHCNetSDK.NET_VCA_RULE_ALARM struRuleAlarmInfo = new CHCNetSDK.NET_VCA_RULE_ALARM(); struRuleAlarmInfo = (CHCNetSDK.NET_VCA_RULE_ALARM)Marshal.PtrToStructure(pAlarmInfo, typeof(CHCNetSDK.NET_VCA_RULE_ALARM)); //报警信息 string stringAlarm = ""; uint dwSize = (uint)Marshal.SizeOf(struRuleAlarmInfo.struRuleInfo.uEventParam); switch (struRuleAlarmInfo.struRuleInfo.wEventTypeEx) { case (ushort)CHCNetSDK.VCA_RULE_EVENT_TYPE_EX.ENUM_VCA_EVENT_TRAVERSE_PLANE: IntPtr ptrTraverseInfo = Marshal.AllocHGlobal((Int32)dwSize); Marshal.StructureToPtr(struRuleAlarmInfo.struRuleInfo.uEventParam, ptrTraverseInfo, false); m_struTraversePlane = (CHCNetSDK.NET_VCA_TRAVERSE_PLANE)Marshal.PtrToStructure(ptrTraverseInfo, typeof(CHCNetSDK.NET_VCA_TRAVERSE_PLANE)); stringAlarm = "穿越警戒面,目标ID:" + struRuleAlarmInfo.struTargetInfo.dwID; //警戒面边线起点坐标: (m_struTraversePlane.struPlaneBottom.struStart.fX, m_struTraversePlane.struPlaneBottom.struStart.fY) //警戒面边线终点坐标: (m_struTraversePlane.struPlaneBottom.struEnd.fX, m_struTraversePlane.struPlaneBottom.struEnd.fY) break; case (ushort)CHCNetSDK.VCA_RULE_EVENT_TYPE_EX.ENUM_VCA_EVENT_ENTER_AREA: IntPtr ptrEnterInfo = Marshal.AllocHGlobal((Int32)dwSize); Marshal.StructureToPtr(struRuleAlarmInfo.struRuleInfo.uEventParam, ptrEnterInfo, false); m_struVcaArea = (CHCNetSDK.NET_VCA_AREA)Marshal.PtrToStructure(ptrEnterInfo, typeof(CHCNetSDK.NET_VCA_AREA)); stringAlarm = "目标进入区域,目标ID:" + struRuleAlarmInfo.struTargetInfo.dwID; //m_struVcaArea.struRegion 多边形区域坐标 break; case (ushort)CHCNetSDK.VCA_RULE_EVENT_TYPE_EX.ENUM_VCA_EVENT_EXIT_AREA: IntPtr ptrExitInfo = Marshal.AllocHGlobal((Int32)dwSize); Marshal.StructureToPtr(struRuleAlarmInfo.struRuleInfo.uEventParam, ptrExitInfo, false); m_struVcaArea = (CHCNetSDK.NET_VCA_AREA)Marshal.PtrToStructure(ptrExitInfo, typeof(CHCNetSDK.NET_VCA_AREA)); stringAlarm = "目标离开区域,目标ID:" + struRuleAlarmInfo.struTargetInfo.dwID; //m_struVcaArea.struRegion 多边形区域坐标 break; case (ushort)CHCNetSDK.VCA_RULE_EVENT_TYPE_EX.ENUM_VCA_EVENT_INTRUSION: IntPtr ptrIntrusionInfo = Marshal.AllocHGlobal((Int32)dwSize); Marshal.StructureToPtr(struRuleAlarmInfo.struRuleInfo.uEventParam, ptrIntrusionInfo, false); m_struIntrusion = (CHCNetSDK.NET_VCA_INTRUSION)Marshal.PtrToStructure(ptrIntrusionInfo, typeof(CHCNetSDK.NET_VCA_INTRUSION)); int i = 0; string strRegion = ""; for (i = 0; i < m_struIntrusion.struRegion.dwPointNum; i++) { strRegion = strRegion + "(" + m_struIntrusion.struRegion.struPos[i].fX + "," + m_struIntrusion.struRegion.struPos[i].fY + ")"; } stringAlarm = "周界入侵,目标ID:" + struRuleAlarmInfo.struTargetInfo.dwID + ",区域范围:" + strRegion; //m_struIntrusion.struRegion 多边形区域坐标 break; default: stringAlarm = "其他行为分析报警,目标ID:" + struRuleAlarmInfo.struTargetInfo.dwID; break; } //报警图片保存 if (struRuleAlarmInfo.dwPicDataLen > 0) { FileStream fs = new FileStream(m_OutputDir + "行为分析报警抓图.jpg", FileMode.Create); int iLen = (int)struRuleAlarmInfo.dwPicDataLen; byte[] by = new byte[iLen]; Marshal.Copy(struRuleAlarmInfo.pImage, by, 0, iLen); fs.Write(by, 0, iLen); fs.Close(); } //报警时间:年月日时分秒 string strTimeYear = ((struRuleAlarmInfo.dwAbsTime >> 26) + 2000).ToString(); string strTimeMonth = ((struRuleAlarmInfo.dwAbsTime >> 22) & 15).ToString("d2"); string strTimeDay = ((struRuleAlarmInfo.dwAbsTime >> 17) & 31).ToString("d2"); string strTimeHour = ((struRuleAlarmInfo.dwAbsTime >> 12) & 31).ToString("d2"); string strTimeMinute = ((struRuleAlarmInfo.dwAbsTime >> 6) & 63).ToString("d2"); string strTimeSecond = ((struRuleAlarmInfo.dwAbsTime >> 0) & 63).ToString("d2"); string strTime = strTimeYear + "-" + strTimeMonth + "-" + strTimeDay + " " + strTimeHour + ":" + strTimeMinute + ":" + strTimeSecond; //报警设备IP地址 string strIP = struRuleAlarmInfo.struDevInfo.struDevIP.sIpV4; //将报警信息添加进列表 if (NoticeAlarmEvent != null) { string ccommType = ObjectCopier.Clone <string>(commType); string cstrIP = ObjectCopier.Clone <string>(strIP); string cstrTime = ObjectCopier.Clone <string>(strTime); string cstringAlarm = ObjectCopier.Clone <string>(stringAlarm); NoticeAlarmEvent(ccommType, cstrTime, cstrIP, cstringAlarm); } }
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); } }
private void ProcessCommFace(ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser) { uint faceId = 0; Image faceImg = null; try { CHCNetSDK.NET_VCA_FACESNAP_RESULT jpFacedetectAlarm = new CHCNetSDK.NET_VCA_FACESNAP_RESULT(); uint dwSize = (uint)Marshal.SizeOf(jpFacedetectAlarm); jpFacedetectAlarm = (CHCNetSDK.NET_VCA_FACESNAP_RESULT)Marshal.PtrToStructure(pAlarmInfo, typeof(CHCNetSDK.NET_VCA_FACESNAP_RESULT)); if (jpFacedetectAlarm.dwFacePicLen > 0) { faceId = jpFacedetectAlarm.dwFacePicID; int iLen = (int)jpFacedetectAlarm.dwFacePicLen; byte[] by = new byte[iLen]; Marshal.Copy(jpFacedetectAlarm.pBuffer1, by, 0, iLen); MemoryStream ms = new MemoryStream(by); Image imgStream = Image.FromStream(ms); faceImg = imgStream; // Bitmap imgClone= (Bitmap) imgStream; // faceImg = imgClone.Clone(new Rectangle(0,0, imgStream.Width, imgStream.Height), imgStream.PixelFormat); // imgStream.Dispose(); // ms.Close(); } } catch (Exception ex) { ShowMsgEvent("ProcessCommFace Get Image From CHC Error:", ex); } if (null != faceImg) { Monitor.Enter(catchFaceImageMap); if (catchFaceImageMap.ContainsKey(faceId)) { CatchFaceInfo catchInfo = catchFaceImageMap[faceId]; if (catchInfo.faceImgSet.Count < detectImgCount) { catchInfo.faceImgSet.Add(faceImg); } } else { CatchFaceInfo catchInfo = new CatchFaceInfo(); catchInfo.faceImgSet = new List <Image>(); catchInfo.faceImgSet.Add(faceImg); catchInfo.catchTime = DateTime.Now; //放入队列 catchFaceImageMap.Add(faceId, catchInfo); // countCHC++; // ShowCountEvent(2, countCHC); ShowCountEvent(4, catchFaceImageMap.Count); } Monitor.Exit(catchFaceImageMap); } }
public uint ProcessCommAlarm_ITSPlate(ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser) { DateTime dtS = DateTime.Now; CHCNetSDK.NET_ITS_PLATE_RESULT struITSPlateResult = new CHCNetSDK.NET_ITS_PLATE_RESULT(); uint dwSize = (uint)Marshal.SizeOf(struITSPlateResult); struITSPlateResult = (CHCNetSDK.NET_ITS_PLATE_RESULT)Marshal.PtrToStructure(pAlarmInfo, typeof(CHCNetSDK.NET_ITS_PLATE_RESULT)); TimeSpan ts = DateTime.Now - dtS; Log.WritePlateLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff") + " 摄像机抓拍完成时间1:" + ts.TotalMilliseconds + "\r\n"); MF.CameraCanpost.WaitOne(1000); MF.AddOperLogCacheStr("进入报警布防回调函数,图片" + struITSPlateResult.dwPicNum.ToString() + "张.."); string res = "成功"; int iLen = (int)struITSPlateResult.struPicInfo[0].dwDataLen; byte[] by = new byte[iLen]; if (iLen > 0) { res = "成功"; } else { res = "失败"; } MF.AddOperLogCacheStr("取图返回:" + res); if (struITSPlateResult.struPlateInfo.sLicense.Equals("无车牌")) { GetPlateNo = "未检测"; } else { string temp = ""; switch (struITSPlateResult.struPlateInfo.byColor) { case 0: temp = "蓝"; break; case 1: temp = "黄"; break; case 2: temp = "白"; break; case 3: temp = "黑"; break; case 4: temp = "绿"; break; default: break; } GetPlateNo = struITSPlateResult.struPlateInfo.sLicense; } if (GetPlateNo.Equals("")) { GetPlateNo = "无牌车"; } MF.AddOperLogCacheStr("车牌: " + GetPlateNo); GetVehicleLogoRecog = ""; GetVehicleLogoRecog = CHCNetSDK.VLR_VEHICLE_CLASS[struITSPlateResult.struVehicleInfo.byVehicleLogoRecog]; FlieClass fc = new FlieClass(); string dirpath = GlobalMember.SavePicPath + "\\"; DateTime forcetimedt = DateTime.Now; string forcetime = forcetimedt.ToString("yyyyMMddHHmmss"); string imagename = forcetime + GetPlateNo + ".bmp"; dirpath += DateTime.Now.Year.ToString(); dirpath += "年\\"; dirpath += DateTime.Now.Month.ToString(); dirpath += "月\\"; dirpath += DateTime.Now.Day.ToString(); dirpath += "日\\"; imagepath = dirpath + imagename; //暂时放这里 ts = DateTime.Now - dtS; Log.WritePlateLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff") + " 摄像机抓拍完成时间2:" + ts.TotalMilliseconds + "\r\n"); Marshal.Copy(struITSPlateResult.struPicInfo[0].pBuffer, by, 0, iLen); try { if (true == fc.WriteFileImage(dirpath, imagename, by, 0, iLen)) { //MF.CameraCanpost.WaitOne(300); MF.CameraPicture.Set(); ts = DateTime.Now - dtS; Log.WritePlateLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff") + " 摄像机抓拍完成时间3:" + ts.TotalMilliseconds + "\r\n"); } else { MF.AddOperLogCacheStr("保存车牌图片失败!"); return(1); } } catch (Exception) { MF.AddOperLogCacheStr("保存车牌图片失败!"); return(1); } //MF.CameraCanpost.Reset(); return(0); }
private void ProcessCommAlarm_V30(ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser) { CHCNetSDK.NET_DVR_ALARMINFO_V30 struAlarmInfoV30 = new CHCNetSDK.NET_DVR_ALARMINFO_V30(); struAlarmInfoV30 = (CHCNetSDK.NET_DVR_ALARMINFO_V30)Marshal.PtrToStructure(pAlarmInfo, typeof(CHCNetSDK.NET_DVR_ALARMINFO_V30)); string strIP = pAlarmer.sDeviceIP; string stringAlarm = ""; int i; switch (struAlarmInfoV30.dwAlarmType) { case 0: stringAlarm = "信号量报警,报警报警输入口:" + struAlarmInfoV30.dwAlarmInputNumber + ",触发录像通道:"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byAlarmRelateChannel[i] == 1) { stringAlarm += (i + 1) + "\\"; } } break; case 1: stringAlarm = "硬盘满,报警硬盘号:"; for (i = 0; i < CHCNetSDK.MAX_DISKNUM_V30; i++) { if (struAlarmInfoV30.byDiskNumber[i] == 1) { stringAlarm += (i + 1) + " "; } } break; case 2: stringAlarm = "信号丢失,报警通道:"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byChannel[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 3: stringAlarm = "移动侦测,报警通道:"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byChannel[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 4: stringAlarm = "硬盘未格式化,报警硬盘号:"; for (i = 0; i < CHCNetSDK.MAX_DISKNUM_V30; i++) { if (struAlarmInfoV30.byDiskNumber[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 5: stringAlarm = "读写硬盘出错,报警硬盘号:"; for (i = 0; i < CHCNetSDK.MAX_DISKNUM_V30; i++) { if (struAlarmInfoV30.byDiskNumber[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 6: stringAlarm = "遮挡报警,报警通道:"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byChannel[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 7: stringAlarm = "制式不匹配,报警通道"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byChannel[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 8: stringAlarm = "非法访问"; break; case 9: stringAlarm = "视频信号异常,报警通道"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byChannel[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 10: stringAlarm = "录像/抓图异常,报警通道"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byChannel[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 11: stringAlarm = "智能场景变化,报警通道"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byChannel[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 12: stringAlarm = "阵列异常"; break; case 13: stringAlarm = "前端/录像分辨率不匹配,报警通道"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byChannel[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 15: stringAlarm = "智能侦测,报警通道"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byChannel[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; default: stringAlarm = "其他未知报警信息"; break; } MessageBox.Show("ProcessCommAlarm_V30:" + stringAlarm); }
private void ProcessCommAlarm(ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser) { CHCNetSDK.NET_DVR_ALARMINFO struAlarmInfo = new CHCNetSDK.NET_DVR_ALARMINFO(); struAlarmInfo = (CHCNetSDK.NET_DVR_ALARMINFO)Marshal.PtrToStructure(pAlarmInfo, typeof(CHCNetSDK.NET_DVR_ALARMINFO)); string strIP = pAlarmer.sDeviceIP; // string stringAlarm = ""; int i = 0; switch (struAlarmInfo.dwAlarmType) { case 0: log.Info(string.Format("端口{0}输出报警。", struAlarmInfo.dwAlarmInputNumber)); foreach (Device di in _curIOconfig.InDeviceList) { if (struAlarmInfo.dwAlarmInputNumber.ToString() == di.Port) { lock (di) { //System.Diagnostics.Debug.WriteLine(string.Format("报警端口:{0}。时间:{1}",di.Port, di.ReceiveSignalTime)); di.ReceiveSignalTime = DateTime.Now; } //if (di.Port == "0") //{ // System.Diagnostics.Debug.WriteLine(string.Format("报警时间:{0}", di.ReceiveSignalTime)); //} break; } } //stringAlarm = "信号量报警,报警报警输入口:" + struAlarmInfo.dwAlarmInputNumber + ",触发录像通道:"; //for (i = 0; i < CHCNetSDK.MAX_CHANNUM; i++) //{ // if (struAlarmInfo.dwAlarmRelateChannel[i] == 1) // { // stringAlarm += (i + 1) + " \\ "; // } //} break; //case 1: // stringAlarm = "硬盘满,报警硬盘号:"; // for (i = 0; i < CHCNetSDK.MAX_DISKNUM; i++) // { // if (struAlarmInfo.dwDiskNumber[i] == 1) // { // stringAlarm += (i + 1) + " \\ "; // } // } // break; //case 2: // stringAlarm = "信号丢失,报警通道:"; // for (i = 0; i < CHCNetSDK.MAX_CHANNUM; i++) // { // if (struAlarmInfo.dwChannel[i] == 1) // { // stringAlarm += (i + 1) + " \\ "; // } // } // break; //case 3: // stringAlarm = "移动侦测,报警通道:"; // for (i = 0; i < CHCNetSDK.MAX_CHANNUM; i++) // { // if (struAlarmInfo.dwChannel[i] == 1) // { // stringAlarm += (i + 1) + " \\ "; // } // } // break; //case 4: // stringAlarm = "硬盘未格式化,报警硬盘号:"; // for (i = 0; i < CHCNetSDK.MAX_DISKNUM; i++) // { // if (struAlarmInfo.dwDiskNumber[i] == 1) // { // stringAlarm += (i + 1) + " \\ "; // } // } // break; //case 5: // stringAlarm = "读写硬盘出错,报警硬盘号:"; // for (i = 0; i < CHCNetSDK.MAX_DISKNUM; i++) // { // if (struAlarmInfo.dwDiskNumber[i] == 1) // { // stringAlarm += (i + 1) + " \\ "; // } // } // break; //case 6: // stringAlarm = "遮挡报警,报警通道:"; // for (i = 0; i < CHCNetSDK.MAX_CHANNUM; i++) // { // if (struAlarmInfo.dwChannel[i] == 1) // { // stringAlarm += (i + 1) + " \\ "; // } // } // break; //case 7: // stringAlarm = "制式不匹配,报警通道"; // for (i = 0; i < CHCNetSDK.MAX_CHANNUM; i++) // { // if (struAlarmInfo.dwChannel[i] == 1) // { // stringAlarm += (i + 1) + " \\ "; // } // } // break; //case 8: // stringAlarm = "非法访问"; // break; default: //stringAlarm = "其他未知报警信息"; break; } }