Exemplo n.º 1
0
        public void OnPreviewFrame(IntPtr data, Camera camera)
        {
            using (var fastArray = new FastJavaByteArray(data))
            {
                OnPreviewFrameReady?.Invoke(this, fastArray);

                camera.AddCallbackBuffer(fastArray);
            }
        }
 public void OnPreviewFrame(byte[] data, Camera camera)
 {
     OnPreviewFrameReady?.Invoke(this, data);
 }
        public void OnSurfaceTextureUpdated(SurfaceTexture surface)
        {
            if (OnPreviewFrameReady == null)
            {
                return;
            }

            CameraAnalyzer.cameraFPSCounter.Report();

            var dfps = 1;

            switch (MainActivity.SavedDataStore.DetectionFPS)
            {
            case Classes.SaveData.DetectorFPS.FPS1:
                dfps = 1;
                break;

            case Classes.SaveData.DetectorFPS.FPS5:
                dfps = 5;
                break;

            case Classes.SaveData.DetectorFPS.FPS10:
                dfps = 10;
                break;

            case Classes.SaveData.DetectorFPS.FPS15:
                dfps = 15;
                break;

            case Classes.SaveData.DetectorFPS.FPS30:
                dfps = 30;
                break;

            case Classes.SaveData.DetectorFPS.FPS60:
                dfps = 60;
                break;
            }

            TimeSpan pace = new TimeSpan(0, 0, 0, 0, 1000 / dfps); // in milliseconds, classification will not repeat faster than this value

            var currentDate = DateTime.Now;
            var interval    = currentDate - lastAnalysis;

            // control the pace of the machine vision to protect battery life

            if (interval >= pace)
            {
                lastAnalysis = currentDate;
            }
            else
            {
                return; // don't run the classifier more often than we need
            }

            if (CameraAnalyzer.canAnalyze)
            {
                _ = Task.Factory.StartNew(() =>
                {
                    using (var frame = Bitmap.CreateBitmap(owner.mTextureView.Width,
                                                           owner.mTextureView.Height,
                                                           Bitmap.Config.Argb8888))
                    {
                        owner.mTextureView.GetBitmap(frame);
                        using (var bmpframe = frame.ToSKBitmap())
                        {
                            var info = new SKImageInfo((int)(bmpframe.Width * 0.5), (int)(bmpframe.Height * 0.5));
                            using (var resized = bmpframe.Resize(info, SKFilterQuality.Low))
                            {
                                OnPreviewFrameReady.Invoke(resized.GetPixels(), info.Width, info.Height);
                            }
                        }
                    }
                });
            }
        }