private async Task ProcessCurrentVideoFrame() { try { if (mediaElement.MediaPlayer == null) { return; } mediaElement.MediaPlayer.takeSnapshot(0, path, InfoSettingFix.FixTakeWidth, InfoSettingFix.FixTakeHeight); data = File.ReadAllBytes(path); int byteLength = data.Length; //Trường hợp data trống và byte 2 Frame liên tiếp bằng nhau if (data == null || byteLength == 0 || byteLength == this.ByteLength) { return; } this.ByteLength = byteLength; CurrentFrame = new CurrentFrameModel() { CaptureTime = DateTime.Now, DataCurrent = data }; RealtimeFixModel.ListFrame4.Enqueue(CurrentFrame); data = null; } catch (Exception ex) { return; } CoreUtil.FreeMemory(); }
private async void ProcessingReadQueue() { while (this.isProcessingReadQueue) { await this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async() => { try { if (!this.isReadQueue && RealtimeFixModel.ListImageDetect1.Count > 0) { LogWriter.GetInstance().Write(DateTime.Now.ToString("HH:mm:ss") + " Count ListImageDetect1: " + RealtimeFixModel.ListImageDetect1.Count + "\n\r"); this.isReadQueue = true; ImageAnalyzer imageAnalyzer; lock (RealtimeFixModel.ListFrame1) { imageAnalyzer = RealtimeFixModel.ListImageDetect1.Dequeue(); } await this.ProcessDetectFace(imageAnalyzer); imageAnalyzer = null; } //Nếu rảnh chuyển sang ghi Queue else if (!this.isReadQueue) { if (RealtimeFixModel.ListFrame1.Count > 0) { this.isReadQueue = true; CurrentFrameModel currentFrameModel; lock (RealtimeFixModel.ListFrame1) { currentFrameModel = RealtimeFixModel.ListFrame1.Dequeue(); } ImageAnalyzer imageAnalyzer1 = await this.cameraControl.CaptureFrameAsync(currentFrameModel); if (imageAnalyzer1 != null) { RealtimeFixModel.ListImageDetect1.Enqueue(imageAnalyzer1); } currentFrameModel = null; imageAnalyzer1 = null; this.isReadQueue = false; } } } catch (Exception ex) { this.isReadQueue = false; LogWriter.GetInstance().Write(DateTime.Now.ToString("HH:mm:ss") + " ProcessingReadQueue: " + ex.Message + "\n\r"); } CoreUtil.FreeMemory(); }); await Task.Delay(TimeRead); } }
/// <summary> /// /// </summary> /// <param name="e"></param> /// <returns></returns> private async Task ProcessDetectFace(ImageAnalyzer e) { if (e == null) { this.isReadQueue = false; return; } try { //Detect face await this.DetectFacesAsync(e); //EmployeeModel itemPersons; //if (e.IdentifiedPersons != null) //{ // foreach (var item in e.IdentifiedPersons) // { // //Không tồn tại thì thêm mới // if (item.InfoEmployee != null) // { // itemPersons = new EmployeeModel() // { // DateTime = e.CaptureTime.ToString("HH:mm:ss"), // Name = item.InfoEmployee.Name + " (" + item.InfoEmployee.Code + ") ", // JobTitle = item.InfoEmployee.JobTitleName + " / " + item.InfoEmployee.DepartmentName, // Type = "1", // Color = "#00265c" // }; // this.PersonsInCurrentGroup.Insert(0, itemPersons); // if (this.PersonsInCurrentGroup.Count() > 200) // this.PersonsInCurrentGroup.RemoveAt(200); // } // } //} //itemPersons = null; } catch (Exception ex) { this.isReadQueue = false; LogWriter.GetInstance().Write(DateTime.Now.ToString("HH:mm:ss") + " ProcessDetectFace: " + ex.Message + "\n\r"); } this.isReadQueue = false; CoreUtil.FreeMemory(); }
private async Task ProcessingWriteQueue4() { while (isProcessingWriteQueue) { await this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async() => { if (!isWriteQueue4 && RealtimeFixModel.ListFrame4.Count > 0) { LogWriter.GetInstance().Write(DateTime.Now.ToString("HH:mm:ss") + " Count ListFrame4: " + RealtimeFixModel.ListFrame4.Count + "\n\r"); isWriteQueue4 = true; try { CurrentFrameModel currentFrameModel; lock (RealtimeFixModel.ListFrame4) { currentFrameModel = RealtimeFixModel.ListFrame4.Dequeue(); } ImageAnalyzer imageAnalyzer4 = await this.cameraControl4.CaptureFrameAsync(currentFrameModel); if (imageAnalyzer4 != null) { RealtimeFixModel.ListImageDetect4.Enqueue(imageAnalyzer4); } currentFrameModel = null; imageAnalyzer4 = null; CoreUtil.FreeMemory(); isWriteQueue4 = false; } catch (Exception ex) { isWriteQueue4 = false; LogWriter.GetInstance().Write(DateTime.Now.ToString("HH:mm:ss") + " ProcessingWriteQueue4: " + ex.Message + "\n\r"); } } }); await Task.Delay(TimeWrite); } }
private async Task DetectFaceAsync1(ImageAnalyzer e) { if (e == null) { return; } try { //Detect face await e.DetectFacesAsync(detectFaceAttributes : true); //Hiển thị thông tin detect lên giao diện //this.ViewPersonsCurrent(e); } catch (Exception ex) { LogWriter.GetInstance().Write(DateTime.Now.ToString("HH:mm:ss") + " DetectFaceAsync1: " + ex.Message + ex.Message + "\n\r"); } isReadQueue1 = false; CoreUtil.FreeMemory(); }
public async Task <ImageAnalyzer> CaptureFrameAsync(CurrentFrameModel currentFrame) { try { using (Stream stream = currentFrame.DataCurrent.AsBuffer().AsStream()) { stream.Position = 0; var decoder = await BitmapDecoder.CreateAsync(stream.AsRandomAccessStream()); var softwareBitmap = await decoder.GetSoftwareBitmapAsync(); var detector = await FaceDetector.CreateAsync(); using (SoftwareBitmap convertedBitmap = SoftwareBitmap.Convert(softwareBitmap, BitmapPixelFormat.Gray8)) { faces = await detector.DetectFacesAsync(convertedBitmap, SearchArea); convertedBitmap.Dispose(); } this.NumFacesOnLastFrame = faces.Count(); var previewFrameSize = new Windows.Foundation.Size(softwareBitmap.PixelWidth, softwareBitmap.PixelHeight); this.ShowFaceTrackingVisualization(previewFrameSize, faces); softwareBitmap.Dispose(); stream.Dispose(); } //Không có face thì không phân tích if (this.NumFacesOnLastFrame == 0) { faces = null; CoreUtil.FreeMemory(); return(null); } //Hai khung hình có số lượng khung mật giống nhau quá nửa thì không phân tích nữa if (this.AreFacesStill(this.detectedFacesFromPreviousFrame, faces)) { faces = null; CoreUtil.FreeMemory(); return(null); } this.detectedFacesFromPreviousFrame = faces; imageWithFace = new ImageAnalyzer(currentFrame.DataCurrent); imageWithFace.CameraIPAdres = CameraIPAdres; imageWithFace.imageWidth = InfoSettingFix.FixImageWidth; imageWithFace.imageHeight = InfoSettingFix.FixImageHeight; imageWithFace.CaptureTime = currentFrame.CaptureTime; imageWithFace.ListDetectedFaceJson = JsonConvert.SerializeObject(faces.Select(r => r.FaceBox).ToList()); faces = null; CoreUtil.FreeMemory(); return(imageWithFace); } catch (Exception ex) { CoreUtil.FreeMemory(); return(null); } }
private async void ProcessingReadQueue2() { while (this.isProcessingReadQueue) { await this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async() => { try { if (!this.isReadQueue2 && RealtimeFixModel.ListImageDetect2.Count > 0) { LogWriter.GetInstance().Write(DateTime.Now.ToString("HH:mm:ss") + " Count ListImageDetect2: " + RealtimeFixModel.ListImageDetect2.Count + "\n\r"); this.isReadQueue2 = true; ImageAnalyzer imageAnalyzer; lock (RealtimeFixModel.ListImageDetect2) { imageAnalyzer = RealtimeFixModel.ListImageDetect2.Dequeue(); } await this.DetectFaceAsync2(imageAnalyzer); imageAnalyzer = null; } else if (!this.isReadQueue2) { if (RealtimeFixModel.ListFrame2.Count > 0) { this.isReadQueue2 = true; CurrentFrameModel currentFrameModel; lock (RealtimeFixModel.ListFrame2) { currentFrameModel = RealtimeFixModel.ListFrame2.Dequeue(); } ImageAnalyzer imageAnalyzer2 = await this.cameraControl2.CaptureFrameAsync(currentFrameModel); if (imageAnalyzer2 != null) { RealtimeFixModel.ListImageDetect2.Enqueue(imageAnalyzer2); } currentFrameModel = null; imageAnalyzer2 = null; this.isReadQueue2 = false; } else if (RealtimeFixModel.ListFrame3.Count > 0) { this.isReadQueue2 = true; CurrentFrameModel currentFrameModel; lock (RealtimeFixModel.ListFrame3) { currentFrameModel = RealtimeFixModel.ListFrame3.Dequeue(); } ImageAnalyzer imageAnalyzer3 = await this.cameraControl3.CaptureFrameAsync(currentFrameModel); if (imageAnalyzer3 != null) { RealtimeFixModel.ListImageDetect3.Enqueue(imageAnalyzer3); } currentFrameModel = null; imageAnalyzer3 = null; this.isReadQueue2 = false; } else if (RealtimeFixModel.ListFrame4.Count > 0) { this.isReadQueue2 = true; CurrentFrameModel currentFrameModel; lock (RealtimeFixModel.ListFrame4) { currentFrameModel = RealtimeFixModel.ListFrame4.Dequeue(); } ImageAnalyzer imageAnalyzer4 = await this.cameraControl4.CaptureFrameAsync(currentFrameModel); if (imageAnalyzer4 != null) { RealtimeFixModel.ListImageDetect4.Enqueue(imageAnalyzer4); } currentFrameModel = null; imageAnalyzer4 = null; this.isReadQueue2 = false; } else if (RealtimeFixModel.ListFrame1.Count > 0) { this.isReadQueue2 = true; CurrentFrameModel currentFrameModel; lock (RealtimeFixModel.ListFrame1) { currentFrameModel = RealtimeFixModel.ListFrame1.Dequeue(); } ImageAnalyzer imageAnalyzer1 = await this.cameraControl1.CaptureFrameAsync(currentFrameModel); if (imageAnalyzer1 != null) { RealtimeFixModel.ListImageDetect1.Enqueue(imageAnalyzer1); } currentFrameModel = null; imageAnalyzer1 = null; this.isReadQueue2 = false; } CoreUtil.FreeMemory(); } } catch (Exception ex) { this.isReadQueue2 = false; LogWriter.GetInstance().Write(DateTime.Now.ToString("HH:mm:ss") + " ProcessingReadQueue2: " + ex.Message + ex.Message + "\n\r"); } }); await Task.Delay(TimeRead); } }