Home » Source Code » PowerPoint Controler » MotionDetector1.cs

MotionDetector1.cs ( File view )

Description:A s...
  • By vaselly 2014-09-16
  • View(s):40
  • Download(s):0
  • Point(s): 1
			// Motion Detector
//
// Copyright  Andrew Kirillov, 2005-2006
// andrew.kirillov@gmail.com
//
namespace motion
{

	using System;
	using System.Drawing;
	using System.Drawing.Imaging;
    using System.Collections;
    using System.Runtime.InteropServices;
    using System.Reflection;
    using Tiger.Video.VFW;
    using System.Windows.Forms;
	using AForge.Imaging;
	using AForge.Imaging.Filters;

	/// 
	/// MotionDetector1
	/// 
    public class MotionDetector1 : IMotionDetector
    {

        private IFilter grayscaleFilter = new GrayscaleBT709();
        private Difference differenceFilter = new Difference();
        private Threshold thresholdFilter = new Threshold(15);
        private IFilter erosionFilter = new Erosion();
        private Merge mergeFilter = new Merge();

        private IFilter extrachChannel = new ExtractChannel(RGB.R);
        private ReplaceChannel replaceChannel = new ReplaceChannel(RGB.R, null);

        private Bitmap backgroundFrame;
        private BitmapData bitmapData;

        private FiltersSequence processingFilter = new FiltersSequence();

        private MainForm _mForm=new MainForm();
        private ArrayList points = new ArrayList();

        private int blankFrameCount = 0; // Blank frame count

        private Bitmap leftArrow, rightArrow, upArrow, downArrow, d1aArrow, d1bArrow, d2aArrow, d2bArrow, question;
        private Bitmap lastGesture;

        private bool drawGesture = false;


        public string slideName;

        private bool calculateMotionLevel = false;
        private int width;	// image width
        private int height;	// image height
        private int pixelsChanged;

        // Get a handle to an application window.
        [DllImport("USER32.DLL")]
        private static extern IntPtr FindWindow(string lpClassName,
            string lpWindowName);

        // Activate an application window.
        [DllImport("USER32.DLL")]
        private static extern bool SetForegroundWindow(IntPtr hWnd);


        private class Beeper
        {

            [DllImport("Kernel32.dll")]
            public static extern bool Beep(UInt32 frequency, UInt32 duration);

            public static void RecognizedBeep()
            {

                Beep(2000, 50);
                System.Threading.Thread.Sleep(50);
                Beep(3000, 50);
            
}

            public static void UnrecognizedBeep()
            {

                Beep(256, 200);
            
}
        
}

        // Motion level calculation - calculate or not motion level
        public bool MotionLevelCalculation
        {

            get {
 return calculateMotionLevel; 
}
            set {
 calculateMotionLevel = value; 
}
        
}

        public void SlideName(string slidename)
        {

            slideName=slidename;
        
}

        // Motion level - amount of changes in percents
        public double MotionLevel
        {

            get {
 return (double)pixelsChanged / (width * height); 
}
        
}


        // Constructor
        public MotionDetector1()
        {

        
}

        // Reset detector to initial state
        public void Reset()
        {

            if (backgroundFrame != null)
            {

                backgroundFrame.Dispose();
                backgroundFrame = null;
            
}
        
}

        // Process new frame
        public void ProcessFrame(ref Bitmap image)
        {

            
          
            Utility.UnsafeBitmap uBitmap = new Utility.UnsafeBitmap(image);
           
            bool brightnessFound = false;

            float brightest = 0;

            int xPos = 0, yPos = 0;

            uBitmap.LockBitmap();

            for (int y = 0; y < uBitmap.Bitmap.Height; y += 5)
            {

                for (int x = 0; x < uBitmap.Bitmap.Width; x += 5)
                {

                    byte red, green, blue;
                    red = uBitmap.GetPixel(x, y).red;
                    green = uBitmap.GetPixel(x, y).green;
                    blue = uBitmap.GetPixel(x, y).blue;

                    float brightness = (299 * red + 587 * green + 114 * blue) / 1000;

                    if (brightness > _mForm.threshold)
                    {

                        if (brightness > brightest)
                        {

                            brightest = brightness;
                            xPos = x;
                            yPos = y;
                            brightnessFound = true;
                        
}
                    
} // (brightness > _mForm.threshold)
                
} // x loop
            
} // y loop


            if (brightnessFound == true)
                points.Add(new Point(xPos, yPos));
            else
                blankFrameCount++;

            if (blankFrameCount < 5 && drawGesture == true)
            {

                Graphics dc = Graphics.FromImage((System.Drawing.Image)image);
                dc.DrawImage((System.Drawing.Image)lastGesture, 0, image.Height - 68);
                dc.Dispose();
            
}
            else if (blankFrameCount > 5 && drawGesture == true)
            {

                drawGesture = false;
            
}


            if (blankFrameCount > 5)
            {

                if (points.Count >= 2)
                {

                    Point[] pnts = (Point[])points.ToArray(typeof(Point));
                    string gesture = RecognizeMovement(pnts);
                   
                    drawGesture = true;


                    if ((gesture != "?") && (_mForm.pptControl == true))
                        ControlPowerPoint(gesture);

                
}

                points.Clear();

                blankFrameCount = 0;
            
}

            uBitmap.UnlockBitmap();
            uBitmap.Dispose();
        
}


        // Code for controlling PowerPoint SlideShow
        private void ControlPowerPoint(string gesture)
        {

            IntPtr powerPointHandle = FindWindow(null, "PowerPoint Slide Show - ["+slideName+"]");
            
            // Verify that PPS is a running process.
            if (powerPointHandle == IntPtr.Zero)
            {

                System.Windows.Forms.MessageBox.Show("Slide Show not running");
                return;
            
}

            switch (gesture)
            {

                case "LEFT":
                    SetForegroundWindow(powerPointHandle);
                    SendKeys.SendWait("p");
                    Beeper.RecognizedBeep();
                    break;

                case "RIGHT":
                    SetForegroundWindow(powerPointHandle);
                    SendKeys.SendWait("n");
                    Beeper.RecognizedBeep();
                    break;

                case "DIAGONAL2B":
                    SetForegroundWindow(powerPointHandle);
                    SendKeys.SendWait("n");
                    Beeper.RecognizedBeep();
                    break;

                case "DIAGONAL1A":
                    SetForegroundWindow(powerPointHandle);
                    SendKeys.SendWait("n");
                    Beeper.RecognizedBeep();
                    break;

                case "DIAGONAL1B":
                    SetForegroundWindow(powerPointHandle);
                    SendKeys.SendWait("P");
                    Beeper.RecognizedBeep();
                    break;

                case "DIAGONAL2A":
                    SetForegroundWindow(powerPointHandle);
                    SendKeys.SendWait("P");
                    Beeper.RecognizedBeep();
                    break;

                case "UP":
                    SetForegroundWindow(powerPointHandle);
                    SendKeys.SendWait("n");
                    Beeper.RecognizedBeep();
                    break;

                case "DOWN":
                    SetForegroundWindow(powerPointHandle);
                    SendKeys.SendWait("p");
                    Beeper.RecognizedBeep();
                    break;
            
}
        
}


        // Laser movement recognition code
        private string RecognizeMovement(Point[] pnts)
        {

            int x1, y1, x2, y2;
            int length = pnts.Length;

            x1 = pnts[0].X;
            y1 = pnts[0].Y;

            x2 = pnts[length - 1].X;
            y2 = pnts[length - 1].Y;

            int dx = Math.Abs(x2 - x1);
            int dy = Math.Abs(y2 - y1);
            bool diagonal = false;

            if (dx > dy)
            {

                if ((dy == 0) || ((dx / dy) >= 3))
                {

                    if ((x2 - x1) > 0)
                        return ("RIGHT");
                    else
                        return ("LEFT");
                
}
                else
                    diagonal = true;
            
}
            else if (dy > dx)
            {

                if ((dx == 0) || ((dy / dx) >= 3))
                {

                    if ((y2 - y1) > 0)
                        return ("DOWN");
                    else
                        return ("UP");
                
}
                else
                    diagonal = true;

            
}
            else
                diagonal = true;


            if (diagonal == true)
            {

                // Recognize diagonal type
                if ((x2 > x1) && (y2 > y1))
                {

                    return ("DIAGONAL1A");
                
}
                else if ((x2 < x1) && (y2 < y1))
                {

                    return ("DIAGONAL1B");
                
}
                else if ((x2 < x1) && (y2 > y1))
                {

                    return ("DIAGONAL2A");
                
}
                else if ((x2 > x1) && (y2 < y1))
                {

                    return ("DIAGONAL2B");
                
}
            
}

            // If nothing else returned a value...
            return "?";
        
}
    
}

}
			
...
Expand> <Close

Want complete source code? Download it here

Point(s): 1

Download
0 lines left, continue to read
Sponsored links

File list

Tips: You can preview the content of files by clicking file names^_^
Name Size Date
01.96 kB
01.96 kB
AssemblyInfo.cs2.37 kB2006-04-11 11:57
01.96 kB
01.96 kB
dshow.dll32.00 kB2007-06-13 21:51
dshow.pdb25.50 kB2007-06-13 21:51
01.96 kB
dshow.dll32.00 kB2007-06-07 20:26
01.96 kB
1.txt45.00 B2006-04-11 11:57
IBaseFilter.cs2.14 kB2006-04-11 11:57
IBasicVideo.cs4.70 kB2006-04-11 11:57
ICreateDevEnum.cs592.00 B2006-04-11 11:57
IEnumPins.cs831.00 B2006-04-11 11:57
IFileSourceFilter.cs861.00 B2006-04-11 11:57
IFilterGraph.cs1.58 kB2006-04-11 11:57
IGraphBuilder.cs2.84 kB2006-04-11 11:57
IMediaControl.cs1.49 kB2006-04-11 11:57
IMediaEvent.cs3.06 kB2006-04-11 11:57
IMediaPosition.cs1.88 kB2006-04-11 11:57
IMediaSeeking.cs2.79 kB2006-04-11 11:57
IPin.cs2.36 kB2006-04-11 11:57
IPropertyBag.cs853.00 B2006-04-11 11:57
ISampleGrabber.cs2.21 kB2006-04-11 11:57
IVideoFrameStep.cs747.00 B2006-04-11 11:57
IVideoWindow.cs5.90 kB2006-04-11 11:57
Structures.cs4.37 kB2006-04-11 11:57
Uuids.cs4.87 kB2006-04-11 11:57
Win32.cs919.00 B2006-04-11 11:57
dshow.csproj5.38 kB2007-03-16 20:38
Filter.cs2.57 kB2006-04-11 11:57
FilterCollection.cs2.14 kB2006-04-11 11:57
01.96 kB
01.96 kB
dshow.dll32.00 kB2007-06-13 21:51
dshow.pdb25.50 kB2007-06-13 21:51
01.96 kB
dshow.csproj.FileList.txt216.00 B2007-06-15 15:17
01.96 kB
dshow.dll32.00 kB2007-06-07 20:26
01.96 kB
dshow.dll28.00 kB2007-06-07 18:09
01.96 kB
Tools.cs1.11 kB2006-04-11 11:57
motion.sln1.79 kB2007-03-16 20:38
motion.suo35.00 kB2007-06-15 15:08
01.96 kB
AboutForm.cs11.91 kB2007-06-15 15:17
AboutForm.resx9.77 kB2007-06-15 15:17
App.ico26.07 kB2006-04-11 11:57
AssemblyInfo.cs2.47 kB2007-03-20 08:40
01.96 kB
01.96 kB
AForge.dll20.00 kB2007-03-16 19:54
AForge.Imaging.dll108.00 kB2007-03-19 18:42
AForge.Math.dll28.00 kB2007-03-16 19:54
App.ico26.07 kB2006-04-11 11:57
dshow.dll32.00 kB2007-06-13 21:51
dshow.pdb25.50 kB2007-06-13 21:51
motion.exe132.00 kB2007-06-15 15:17
motion.exe.config147.00 B2007-03-19 09:20
motion.pdb181.50 kB2007-06-15 15:17
motion.vshost.exe5.50 kB2005-09-23 07:56
motion.vshost.exe.config147.00 B2007-03-19 09:20
Tiger.Video.VFW.dll24.00 kB2007-06-13 21:51
Tiger.Video.VFW.pdb27.50 kB2007-06-13 21:51
01.96 kB
AForge.dll20.00 kB2007-03-16 19:54
AForge.Imaging.dll108.00 kB2007-03-19 18:42
AForge.Math.dll28.00 kB2007-03-16 19:54
dshow.dll32.00 kB2007-06-07 20:26
motion.exe124.00 kB2007-06-07 20:40
motion.exe.config147.00 B2007-03-19 09:20
motion.vshost.exe5.50 kB2005-09-23 07:56
motion.vshost.exe.config147.00 B2007-03-19 09:20
Tiger.Video.VFW.dll24.00 kB2007-06-07 20:26
Camera.cs3.47 kB2006-04-11 11:57
CameraWindow.cs5.17 kB2006-04-11 11:57
CameraWindow.resx5.55 kB2006-04-11 11:57
CaptureDeviceForm.cs4.49 kB2007-06-15 15:17
CaptureDeviceForm.resx5.37 kB2006-04-11 11:57
ClassDiagram1.cd1.00 B2007-06-07 18:39
Copyright.txt913.00 B2007-06-15 15:17
IMotionDetector.cs785.00 B2007-06-07 20:36
MainForm.cs21.34 kB2007-06-13 21:54
MainForm.resx45.81 kB2007-06-13 21:51
motion.csproj7.33 kB2007-06-07 18:45
MotionDetector1.cs9.95 kB2007-06-07 20:37
MotionDetector2.cs4.44 kB2007-06-07 20:38
MotionDetector3.cs5.06 kB2007-06-07 20:38
MotionDetector3Optimized.cs6.57 kB2007-06-07 20:38
MotionDetector4.cs4.89 kB2007-06-07 20:38
01.96 kB
01.96 kB
motion.AboutForm.resources3.00 kB2007-06-15 15:17
motion.CameraWindow.resources581.00 B2007-06-13 21:51
motion.CaptureDeviceForm.resources279.00 B2007-06-13 21:51
motion.csproj.GenerateResource.Cache1.00 kB2007-06-15 15:17
motion.exe132.00 kB2007-06-15 15:17
motion.MainForm.resources26.62 kB2007-06-13 21:51
motion.pdb181.50 kB2007-06-15 15:17
motion.Resources.1.gif828.00 B2006-04-11 11:57
motion.Resources.2.gif822.00 B2006-04-11 11:57
motion.Resources.3.gif830.00 B2006-04-11 11:57
motion.Resources.4.gif822.00 B2006-04-11 11:57
motion.Resources.5.gif822.00 B2006-04-11 11:57
motion.Resources.6.gif830.00 B2006-04-11 11:57
motion.Resources.7.gif821.00 B2006-04-11 11:57
motion.Resources.8.gif822.00 B2006-04-11 11:57
motion.Resources.9.gif822.00 B2006-04-11 11:57
motion.URLForm.resources269.00 B2007-06-13 21:51
ResolveAssemblyReference.cache13.42 kB2007-06-15 14:58
01.96 kB
motion.csproj.FileList.txt1.64 kB2007-06-15 15:17
01.96 kB
motion.AboutForm.resources3.00 kB2007-06-07 20:26
motion.CameraWindow.resources581.00 B2007-06-07 20:26
motion.CaptureDeviceForm.resources279.00 B2007-06-07 20:26
motion.csproj.GenerateResource.Cache1.00 kB2007-06-07 20:27
motion.exe124.00 kB2007-06-07 20:40
motion.MainForm.resources26.62 kB2007-06-07 20:27
motion.Resources.1.gif828.00 B2006-04-11 11:57
motion.Resources.2.gif822.00 B2006-04-11 11:57
motion.Resources.3.gif830.00 B2006-04-11 11:57
motion.Resources.4.gif822.00 B2006-04-11 11:57
motion.Resources.5.gif822.00 B2006-04-11 11:57
motion.Resources.6.gif830.00 B2006-04-11 11:57
motion.Resources.7.gif821.00 B2006-04-11 11:57
motion.Resources.8.gif822.00 B2006-04-11 11:57
motion.Resources.9.gif822.00 B2006-04-11 11:57
motion.URLForm.resources269.00 B2007-06-07 20:26
01.96 kB
ResolveAssemblyReference.cache10.44 kB2007-06-07 20:26
01.96 kB
01.96 kB
1.gif828.00 B2006-04-11 11:57
2.gif822.00 B2006-04-11 11:57
3.gif830.00 B2006-04-11 11:57
4.gif822.00 B2006-04-11 11:57
5.gif822.00 B2006-04-11 11:57
6.gif830.00 B2006-04-11 11:57
7.gif821.00 B2006-04-11 11:57
8.gif822.00 B2006-04-11 11:57
9.gif822.00 B2006-04-11 11:57
UnsafeBitmap.cs2.76 kB2007-06-15 14:58
URLForm.cs3.98 kB2006-04-11 11:57
URLForm.resx5.36 kB2006-04-11 11:57
01.96 kB
ByteArrayUtils.cs1.25 kB2006-04-11 11:57
CameraEvents.cs626.00 B2006-04-11 11:57
CaptureDevice.cs8.15 kB2006-04-11 11:57
IVideoSource.cs1.57 kB2006-04-11 11:57
JPEGStream.cs6.89 kB2006-04-11 11:57
MJPEGStream.cs9.12 kB2006-04-11 11:57
VideoFileSource.cs3.45 kB2006-04-11 11:57
VideoStream.cs8.47 kB2006-04-11 11:57
01.96 kB
AForge.dll20.00 kB2007-03-16 19:54
AForge.Imaging.dll108.00 kB2007-03-19 18:42
AForge.Math.dll28.00 kB2007-03-16 19:54
01.96 kB
AssemblyInfo.cs2.37 kB2006-04-11 11:57
AVIReader.cs5.29 kB2006-04-11 11:57
AVIWriter.cs5.59 kB2006-04-11 11:57
01.96 kB
01.96 kB
Tiger.Video.VFW.dll24.00 kB2007-06-13 21:51
Tiger.Video.VFW.pdb27.50 kB2007-06-13 21:51
01.96 kB
Tiger.Video.VFW.dll24.00 kB2007-06-07 20:26
01.96 kB
01.96 kB
01.96 kB
Tiger.Video.VFW.dll24.00 kB2007-06-13 21:51
Tiger.Video.VFW.pdb27.50 kB2007-06-13 21:51
01.96 kB
01.96 kB
Tiger.Video.VFW.dll20.00 kB2007-06-07 18:09
01.96 kB
Tiger.Video.VFW.dll24.00 kB2007-06-07 20:26
vfw.csproj.FileList.txt276.00 B2007-06-15 15:17
vfw.csproj3.55 kB2007-03-16 20:38
Win32.cs9.81 kB2006-04-11 11:57
...
Sponsored links

MotionDetector1.cs (805.82 kB)

Need 1 point
Your Point(s)

Your Point isn't enough.

Get point immediately by PayPal

More(Debit card / Credit card / PayPal Credit / Online Banking)

Submit your source codes. Get more point

LOGIN

Don't have an account? Register now
Need any help?
Mail to: support@codeforge.com

切换到中文版?

CodeForge Chinese Version
CodeForge English Version

Where are you going?

^_^"Oops ...

Sorry!This guy is mysterious, its blog hasn't been opened, try another, please!
OK

Warm tip!

CodeForge to FavoriteFavorite by Ctrl+D