Я сделал простую программу, которая отображает видео с веб-камеры и может определять движение по каналу, но у меня возникают проблемы с пониманием того, как я выполняю запись с веб-камеры при обнаружении движения.Я искал на сайте Aforge.Net, но мне трудно понять, что мне нужно делать.Когда обнаруживается движение, я хочу начать запись в заранее определенный пункт назначения, а когда движение не обнаружено, я хочу продолжить запись в течение заданного периода времени, а затем остановиться.Это часть моей программы, которую я имею до сих пор ...
Пожалуйста, вы можете помочь мне объяснить это и сообщить мне, если мне нужно предоставить дополнительную информацию или код.Спасибо
$ // Открытый источник видео
private void OpenVideoSource(IVideoSource source)
{
// set busy cursor
//this.Cursor = Cursors.WaitCursor;
// close previous video source
CloseVideoSource();
//motionDetectionType = 1;
//SetMotionDetectionAlgorithm(new TwoFramesDifferenceDetector());
//motionProcessingType = 1;
//SetMotionProcessingAlgorithm(new MotionAreaHighlighting());
// start new video source
videoSourcePlayer.VideoSource = new AsyncVideoSource(source);
videoSourcePlayer.NewFrame +=new VideoSourcePlayer.NewFrameHandler(videoSourcePlayer_NewFrame);
//videoSourcePlayer.DesiredFrameRate = 30;
//webcam's default frame rate will be used instead of above code that has an error
// create new video file
writer.Open("test.avi", width, height, 25, VideoCodec.MPEG4);
// create a bitmap to save into the video file
Bitmap image = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
// write 1000 video frames
for (int i = 0; i < 1000; i++)
{
image.SetPixel(i % width, i % height, System.Drawing.Color.Red);
writer.WriteVideoFrame(image);
}
writer.Close();
try
{
videoSourcePlayer.Start();
//motionAlarmLevel = sldMotionSensitivity.Value / 100;
}
catch (Exception x)
{
System.Windows.MessageBox.Show(x.ToString());
}
//videoSource.DesiredFrameSize = new System.Drawing.Size(800,600);
videoSourcePlayer.BorderColor = System.Drawing.Color.Blue;
// reset statistics
statIndex = statReady = 0;
// start timers
clock.Start();
//alarm.Start();
videoSource = source;
//this.Cursor = Cursors.Default;
}
// Close current video source
private void CloseVideoSource()
{
// set busy cursor
//this.Cursor = Cursors.WaitCursor;
// stop current video source
videoSourcePlayer.SignalToStop();
// wait 2 seconds until camera stops
for (int i = 0; (i < 50) && (videoSourcePlayer.IsRunning); i++)
{
Thread.Sleep(100);
}
if (videoSourcePlayer.IsRunning)
videoSourcePlayer.Stop();
// stop timers
clock.Stop();
//alarm.Stop();
motionHistory.Clear();
// reset motion detector
if (detector != null)
detector.Reset();
//videoSourcePlayer.BorderColor = System.Drawing.Color.Red;
//this.Cursor = Cursors.Default;
}
// New frame received by the player
void videoSourcePlayer_NewFrame(object sender, ref Bitmap image)
{
lock (this)
{
if (detector != null)
{
//motion detected
if (detector.ProcessFrame(image) > motionAlarmLevel)
{
//float motionLevel = detector.ProcessFrame(image);
videoSourcePlayer.BorderColor = System.Drawing.Color.Red;
Dispatcher.BeginInvoke(new ThreadStart(delegate { lblMotionDetected.Content = "Motion Detected"; }));
//lblMotionDetected.Content = "Motion Detected";
//flash = (int)(2 * (1000 / alarm.Interval));
}
// no motion detected
if (detector.ProcessFrame(image) < motionAlarmLevel)
{
videoSourcePlayer.BorderColor = System.Drawing.Color.Black;
Dispatcher.BeginInvoke(new ThreadStart(delegate { lblMotionDetected.Content = "No Motion Detected"; }));
}
// if (motionLevel > motionAlarmLevel)
// {
// // flash for 2 seconds
// timer.Start();
// }
}
}
}