Paste Search Dynamic
Recent pastes
Motion Detection code c#
  1. using system;
  2. using system.Windows;
  3. using system.Windows.Controls;
  4. using system.Windows.Forms;
  5. using AForge.Video.FFMPEG;
  6. using system.Drawing;
  7. using system.Windows.Media;
  8. using system.Windows.Media.Imaging;
  9. using system.Collections.Concurrent;
  10. using system.Threading;
  11.  
  12.  
  13. namespace MotionDetection
  14. {
  15.     /// <summary>
  16.     /// Interaction logic for MainWindow.xaml
  17.     /// </summary>
  18.     public partial class MainWindow : Window
  19.     {
  20.         string path;
  21.  
  22.         VideoProcessor processor;
  23.         VideoFileReader videoReader;
  24.  
  25.         Thread processMovieThread;
  26.  
  27.         public MainWindow()
  28.         {
  29.             InitializeComponent();
  30.             path = null;
  31.             setInitialBitmaps();
  32.         }
  33.  
  34.         private void setInitialBitmaps()
  35.         {
  36.             Bitmap initial = new Bitmap(320, 240);
  37.  
  38.             for (int x = 0; x < initial.Width; x++)
  39.             {
  40.                 for (int y = 0; y < initial.Height; y++)
  41.                 {
  42.                     system.Drawing.Color pixelColor = initial.GetPixel(x, y);
  43.                     system.Drawing.Color newColor = system.Drawing.Color.FromArgb(pixelColor.R, 0, 0);
  44.                     initial.SetPixel(x, y, newColor);
  45.                 }
  46.             }
  47.  
  48.             preprocessedImage.Source = VideoProcessor.convertBitmap(initial);
  49.             differenceImage.Source = VideoProcessor.convertBitmap(initial);
  50.             finalImage.Source = VideoProcessor.convertBitmap(initial);
  51.  
  52.             initial.Dispose();
  53.         }
  54.  
  55.         private void processMovie()
  56.         {
  57.             if (videoReader.IsOpen)
  58.             {
  59.                 Bitmap videoFrame;
  60.  
  61.                 processor.Background = videoReader.ReadVideoFrame();
  62.  
  63.                 int i = 0;
  64.  
  65.                 while ((videoFrame = videoReader.ReadVideoFrame()) != null)
  66.                 {
  67.                     Bitmap preprocess = processor.preprocessImage(videoFrame);
  68.                     this.Dispatcher.Invoke(new Action(() => frameCountLabel.Content = Properties.Resources.FPS_LABEL_BEGIN + (int)(++i / videoReader.FrameRate) + "s"));
  69.                     this.Dispatcher.Invoke(new Action(() => preprocessedImage.Source = VideoProcessor.convertBitmap(preprocess)));
  70.  
  71.                     Bitmap diff = processor.findDifference(preprocess);
  72.                     preprocess.Dispose();
  73.  
  74.                     this.Dispatcher.Invoke(new Action(() => differenceImage.Source = VideoProcessor.convertBitmap(diff)));
  75.  
  76.                     Bitmap final = processor.showMotion(videoFrame, diff);
  77.                     diff.Dispose();
  78.  
  79.                     this.Dispatcher.Invoke(new Action(() => finalImage.Source = VideoProcessor.convertBitmap(final)));
  80.                     final.Dispose();
  81.                     videoFrame.Dispose();
  82.                 }
  83.                 i = 0;
  84.                 videoReader.Dispose();
  85.                 videoReader.Close();
  86.                 restart();
  87.             }
  88.         }
  89.  
  90.         private void openFile_Click(object sender, RoutedEventArgs e)
  91.         {
  92.  
  93.             OpenFileDialog dialog = new OpenFileDialog();
  94.  
  95.             if (dialog.ShowDialog() == system.Windows.Forms.DialogResult.OK)
  96.             {
  97.                 this.path = dialog.FileName;
  98.                 prepareForPlay(this.path);
  99.  
  100.                 pathLabel.Content = Properties.Resources.PATH_LABEL_BEGIN + path;
  101.                 botomStatusBarlabel.Content = Properties.Resources.LOADED_STATUS;
  102.  
  103.                 startButton.IsEnabled = true;
  104.                 openFileButton.IsEnabled = false;
  105.                 abortButton.IsEnabled = true;
  106.  
  107.                
  108.             }
  109.             else { botomStatusBarlabel.Content = Properties.Resources.WAIT_STATUS; }
  110.         }
  111.  
  112.         private void prepareForPlay(string path)
  113.         {
  114.             if ((path != null) || (path.Length != 0))
  115.             {
  116.                 processMovieThread = new Thread(new ThreadStart(processMovie));
  117.                 processMovieThread.Name = Properties.Resources.PROCESS_MOVIE_THREAD_TITLE;
  118.  
  119.                 processor = new VideoProcessor();
  120.                 videoReader = new VideoFileReader();
  121.  
  122.                 videoReader.Open(path);
  123.             }
  124.         }
  125.  
  126.         private void startButton_Click(object sender, RoutedEventArgs e)
  127.         {
  128.             if (startButton.Content.ToString() == Properties.Resources.START_BUTTON_TEXT)
  129.             {
  130.                 start();
  131.             }
  132.             else
  133.             {
  134.                 pause();
  135.             }
  136.         }
  137.  
  138.         private void start()
  139.         {
  140.  
  141.             startButton.Content = Properties.Resources.PAUSE_BUTTON_TEXT;
  142.             botomStatusBarlabel.Content = Properties.Resources.PLAY_STATUS;
  143.  
  144.             if (processMovieThread.ThreadState == ThreadState.Suspended)
  145.             {
  146.                 processMovieThread.Resume();
  147.             }
  148.             else
  149.             {
  150.                 processMovieThread.Start();
  151.  
  152.             }
  153.         }
  154.  
  155.         private void pause()
  156.         {
  157.             startButton.Content = Properties.Resources.START_BUTTON_TEXT;
  158.             botomStatusBarlabel.Content = Properties.Resources.PAUSED_STATUS;
  159.  
  160.             processMovieThread.Suspend();
  161.         }
  162.  
  163.         private void abortButton_Click(object sender, RoutedEventArgs e)
  164.         {
  165.             if (processMovieThread.ThreadState == ThreadState.Suspended)
  166.             {
  167.                 processMovieThread.Resume();
  168.             }
  169.             processMovieThread.Abort();
  170.  
  171.             processMovieThread = null;
  172.  
  173.             videoReader.Close();
  174.             videoReader.Dispose();
  175.             videoReader = null;
  176.  
  177.             processor = null;
  178.  
  179.             openFileButton.IsEnabled = true;
  180.             abortButton.IsEnabled = false;
  181.             startButton.Content = Properties.Resources.START_BUTTON_TEXT;
  182.             startButton.IsEnabled = false;
  183.             pathLabel.Content = Properties.Resources.DEFAULT_PATH_LABEL;
  184.             botomStatusBarlabel.Content = Properties.Resources.WAIT_STATUS;
  185.             frameCountLabel.Content = Properties.Resources.DEFAULT_FPS_LABEL;
  186.  
  187.             setInitialBitmaps();
  188.         }
  189.  
  190.         private void restart()
  191.         {
  192.             prepareForPlay(this.path);
  193.  
  194.             this.Dispatcher.Invoke(new Action(() => pathLabel.Content = Properties.Resources.PATH_LABEL_BEGIN + path));
  195.             this.Dispatcher.Invoke(new Action(() => botomStatusBarlabel.Content = Properties.Resources.LOADED_STATUS));
  196.  
  197.             this.Dispatcher.Invoke(new Action(() => startButton.Content = Properties.Resources.START_BUTTON_TEXT));
  198.  
  199.             this.Dispatcher.Invoke(new Action(() => startButton.IsEnabled = true));
  200.             this.Dispatcher.Invoke(new Action(() => openFileButton.IsEnabled = false));
  201.             this.Dispatcher.Invoke(new Action(() => abortButton.IsEnabled = true));
  202.         }
  203.  
  204.         private void Window_Closing(object sender, system.ComponentModel.CancelEventArgs e)
  205.         {
  206.             if (processMovieThread != null)
  207.             {
  208.                 if (processMovieThread.ThreadState == ThreadState.Suspended)
  209.                 {
  210.                     processMovieThread.Resume();
  211.                 }
  212.                 processMovieThread.Abort();
  213.             }
  214.         }
  215.     }
  216. }
Parsed in 0.131 seconds