コード例 #1
0
 /// <summary>
 /// Вызывает нажатие кнопок Stop и Start
 /// </summary>
 /// <param name="f">CameraSelectWindow который надо закрыть</param>
 void Restart(CameraSelectWindow f = null)
 {
     f?.Close();
     Stop_Click(new object(), new RoutedEventArgs());
     Thread.Sleep(1000);
     Start_Click(new object(), new RoutedEventArgs());
 }
コード例 #2
0
        /// <summary>
        /// Открывает выбор камер
        /// </summary>
        private void CameraChanger_Click(object sender, RoutedEventArgs e)
        {
            if (Start.IsEnabled == false)
            {
                Stop_Click(new object(), new RoutedEventArgs());
            }

            if (cameraMode == StreamSrc.Video)
            {
                var f = new CameraSelectWindow().GetCam();
                if (f == "")
                {
                    return;
                }

                try
                {
                    OpenCvSharp.VideoCapture v;
                    if (f == "USB")
                    {
                        cameraMode = StreamSrc.USB_cam;
                        v          = OpenCvSharp.VideoCapture.FromCamera(OpenCvSharp.CaptureDevice.Any);
                        filePath   = "0";
                        camM       = true;
                    }
                    else
                    {
                        cameraMode = StreamSrc.IP_cam;
                        filePath   = f;
                        v          = OpenCvSharp.VideoCapture.FromFile(filePath);
                        camM       = true;
                    }

                    var r = new OpenCvSharp.Mat();
                    v.Read(r);
                    myImage.Source = OpenCvSharp.Extensions.WriteableBitmapConverter.ToWriteableBitmap(r);
                    r.Dispose();
                    v.Dispose();

                    CameraChanger.Content    = "Режим камеры активирован";
                    CameraChanger.Background = Brushes.Green;

                    labelCurState.Content = "Получение потока с камеры";
                }
                catch
                {
                    MessageBox.Show("Камера недоступна");
                    cameraMode = StreamSrc.Video;
                }
            }
            else
            {
                labelCurState.Content    = "Чтение видео-файла";
                CameraChanger.Content    = "Выбор камеры";
                CameraChanger.Background = Brushes.LightGray;
                cameraMode = StreamSrc.Video;
            }
        }
コード例 #3
0
        /// <summary>
        ///     Переподключение (к USB). При неудаче Выбор камеры (CameraChanger_Click)
        /// </summary>
        public void MakeReconnect()
        {
            var f = new CameraSelectWindow();

            f.ShowBusyBox();
            var ff = f.imShown;

            Task.Run(() =>
            {
                var success = false;
                while (ff)
                {
                    VideoCapture v;
                    if (cameraMode == StreamSrc.USB_cam)
                    {
                        v = VideoCapture.FromCamera(CaptureDevice.Any);
                    }
                    else
                    {
                        v = VideoCapture.FromFile(filePath);
                    }

                    var r = new Mat();
                    v.Read(r);

                    if (r.Empty())
                    {
                        Thread.Sleep(1000);
                    }
                    else
                    {
                        Application.Current.Dispatcher.BeginInvoke(new Action(() => Restart(f)));
                        success = true;
                        r.Dispose();
                        break;
                    }

                    r.Dispose();
                    Application.Current.Dispatcher.BeginInvoke(new Action(() => ff = f.imShown));
                }

                if (!success)
                {
                    Application.Current.Dispatcher.BeginInvoke(new Action(() => PerformAct(CameraChanger_Click)));
                }
            });
        }