/// <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()); }
/// <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; } }
/// <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))); } }); }