public static void AddToQueue(FileFaceImage date)
 {
     lock (_datequeue)
     {
         _datequeue.Enqueue(date);
     }
 }
        private void WatcherOnChanged(object sender, FileSystemEventArgs e)
        {
            if (e.ChangeType == WatcherChangeTypes.Created)
            {
                // 文件格式范例 172.31.108.248_01_20170905143220480_FACE_ALARM.jpg
                string[] vals = e.Name.Split('_');
                if (vals.Length >= 3)
                {
                    if (e.FullPath.EndsWith(".jpg") || e.FullPath.EndsWith(".bmp") ||
                        e.FullPath.EndsWith(".png"))
                    {
                        string cameraIp = vals[0];
                        if (cameraIp.Contains("\\"))
                        {
                            cameraIp = cameraIp.Substring(0, cameraIp.IndexOf("\\"));
                        }
                        string fileTime = DateTime.Now.ToString("yyyyMMddHHmmss");

                        Thread.Sleep(50);
                        if (e.FullPath.ToLower().Contains("face"))
                        {
                            var fileFace = new FileFaceImage(fileTime, DateTime.Now, cameraIp, e.FullPath);
                            Log4NetHelper.Instance.Info("抓拍人脸图像文件:" + cameraIp + "," + Path.GetFileName(e.FullPath));
                            ResultFileQueue.AddToQueue(fileFace);
                        }
                        else
                        {
                            Log4NetHelper.Instance.Debug("抓拍人脸图像文件忽略:" + e.FullPath);
                        }
                    }
                }
            }
        }
        public static FileFaceImage GetFromQueue()
        {
            FileFaceImage data = null;

            lock (_datequeue)
            {
                if (_datequeue.Count >= 0)
                {
                    _datequeue.TryDequeue(out data); //从队列中取数据
                }
            }
            return(data);
        }
Example #4
0
        private void watcher_FaceEvent(FileFaceImage faceimage)
        {
            if (faceimage == null || string.IsNullOrEmpty(faceimage.ImgFilePath))
            {
                return;
            }

            ///////////////////////////////////
            // 增加发送到Kafka
            try
            {
                string outputfile = Guid.NewGuid().ToString().Replace("-", "") + ".jpg";

                string filedir = _faceFilePath + DateTime.Today.ToString("yyyy-M-d") + "\\";
                if (!Directory.Exists(filedir))
                {
                    Directory.CreateDirectory(filedir);
                }
                File.Copy(faceimage.ImgFilePath, filedir + outputfile);

                Log4NetHelper.Instance.Info("图像存储文件:" + outputfile);
                // 将数据进行组合后重新发送
                string serveroutputPath = GetResultImageServerPath(filedir + outputfile);

                var resultkafka = new FaceImg4kafka();
                resultkafka.ImgNum   = ConvertHelper.DateTimeToStamp().ToString();
                resultkafka.PassTime = faceimage.TimeStamp;
                resultkafka.CameraIp = faceimage.CameraIp;
                resultkafka.FaceUrl  = serveroutputPath;

                string resultjson = Newtonsoft.Json.JsonConvert.SerializeObject(resultkafka);
                _imgkafkaActor.Send2Quere(resultjson);
            }
            catch (Exception ex)
            {
                Log4NetHelper.Instance.Error("FaceEvent生成Kakfa数据出现错误:" + ex.Message);
            }
            ///////////////////////////////////

            if (NoticeFaceEvent != null)
            {
                Image          faceImg    = new Bitmap(faceimage.ImgFilePath);
                string         frameid    = ObjectCopier.Clone(faceimage.TimeStamp);
                DateTime       createDate = faceimage.CreateTime;
                SnapVideoImage videoImg   = new SnapVideoImage(_videoSrcUrl, frameid, 1, createDate, faceImg);
                NoticeFaceEvent(videoImg);
            }
        }
        private void StartFileTask()
        {
            if (_taskFile != null)
            {
                return;
            }

            _taskFile = Task.Run(() =>
            {
                while (true)
                {
                    try
                    {
                        // 取消任务判断
                        if (_tokenFileWatch.IsCancellationRequested)
                        {
                            break;
                        }

                        FileFaceImage message = ResultFileQueue.GetFromQueue();
                        if (message == null)
                        {
                            Thread.Sleep(1000);
                            continue;
                        }
                        else
                        {
                            if (ReceiveFaceEvent != null)
                            {
                                // 该处理确保图像文件已经完成,可以进行读取操作
                                Thread.Sleep(500);
                                ReceiveFaceEvent(message);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Log4NetHelper.Instance.Error("从队列发送Kafka数据错误:" + (ex.InnerException != null ? ex.InnerException.Message : ex.Message));
                    }
                    Thread.Sleep(1000);
                }
            }, _tokenFileWatch.Token);
        }