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); }
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); }