Beispiel #1
0
        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();
        }
Beispiel #2
0
        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);
            }
        }
Beispiel #3
0
        /// <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();
        }
Beispiel #4
0
        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);
            }
        }
Beispiel #5
0
        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();
        }
Beispiel #6
0
        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);
            }
        }
Beispiel #7
0
        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);
            }
        }