Exemple #1
0
    public void Init(Mat img, int corners = 500)
    {
        if (!IsInitialize)
        {
            Cv2.PyrDown(img, prev_img);
            prev_rect    = NMS(hog.Detect(prev_img));
            DetectedRect = new Rect(prev_rect.X - (prev_rect.Width / 2), prev_rect.Y - (prev_rect.Height / 2), prev_rect.Width, prev_rect.Height);
            var mask = new Mat(prev_img.Size(), MatType.CV_8UC1);

            for (int y = DetectedRect.Y; y < DetectedRect.Y + DetectedRect.Height; y++)
            {
                for (int x = DetectedRect.X; x < DetectedRect.X + DetectedRect.Width; x++)
                {
                    mask.Set <byte>(y, x, 1);
                }
            }

            FeaturePoints = Cv2.GoodFeaturesToTrack(prev_img, corners, 0.01, 15, mask, 3, false, 0.04);
            IsInitialize  = true;
        }
    }
        private static async Task ProcessFrame()
        {
            Mat mat = null;

            try
            {
                lock (frameLoker)
                {
                    mat = latestFrame.Clone();
                }

                if (mat.Empty())
                {
                    LogUtil.Log("Empty Mat !!!", LogLevel.Warning);
                    mat.Dispose();
                    return;
                }

                var filename = String.Format("{1}-orignal-{0}.png", DateTime.UtcNow.ToString("yyyyMMddHHmmssfff"), moduleId);

                LogUtil.Log(filename, LogLevel.Info);


                var result = _hog.Detect(mat);
                if (result.Length > 0)
                {
                    LogUtil.Log("Persons Detected", LogLevel.Info);

                    //TODO for debug only
                    // mat.SaveImage(filename);

                    var hatRresult = await FaceUtil.DetectHat(mat.ToBytes());

                    LogUtil.Log("hat Result: " + hatRresult, LogLevel.Info);

                    if (!hatRresult)
                    {
                        var imageName      = String.Format("{1}-alert-{0}.png", DateTime.UtcNow.ToString("yyyyMMddHHmmssfff"), moduleId);
                        var imageNamelocal = BuildLocalFilePath(imageName);
                        mat.SaveImage(imageNamelocal);

                        var videoname      = String.Format("{1}-record-{0}.avi", DateTime.UtcNow.ToString("yyyyMMddHHmmssfff"), moduleId);
                        var videonamelocal = BuildLocalFilePath(videoname);


                        await UploadFile(imageName, imageNamelocal);

                        await SendEvent(String.Format(STORAGEURI, imageName), String.Format(STORAGEURI, videoname));


                        await RecordVideo(videonamelocal, 2);

                        await UploadFile(videoname, videonamelocal);

                        if (File.Exists(imageNamelocal))
                        {
                            File.Delete(imageNamelocal);
                        }
                        if (File.Exists(videonamelocal))
                        {
                            File.Delete(videonamelocal);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                LogUtil.LogException(e);
            }
            finally
            {
                if (mat != null)
                {
                    mat.Dispose();
                }
            }
        }