예제 #1
0
        public Image drawFacialFlandmarks(long[] IDs, int tracker, Image frameImage)
        {
            Graphics gr  = Graphics.FromImage(frameImage);
            Pen      pen = new Pen(Brushes.Red);

            pen.Width    = 5.0F;
            pen.LineJoin = System.Drawing.Drawing2D.LineJoin.Bevel;
            for (int i = 0; i < IDs.Length; ++i)
            {
                FSDK.TFacePosition facePosition = new FSDK.TFacePosition();
                FSDK.GetTrackerFacePosition(tracker, 0, IDs[i], ref facePosition);
                FSDK.TPoint[] facialFeatures;
                FSDK.GetTrackerFacialFeatures(tracker, 0, IDs[i], out facialFeatures);
                int          left   = facePosition.xc - (int)(facePosition.w * 0.6);
                int          top    = facePosition.yc - (int)(facePosition.w * 0.5);
                StringFormat format = new StringFormat();

                for (int x = 0; x < facialFeatures.Length; x++)
                {
                    FSDK.TPoint point = facialFeatures[x];
                    gr.FillEllipse(Brushes.DarkBlue, point.x, point.y, 4, 4);

                    GuesGenderAndAge(IDs, i, tracker);
                    personRecognize(IDs, facePosition, left, top, facePosition.w, i, tracker, frameImage);
                }
            }
            return(frameImage);
        }
예제 #2
0
 public Face(byte[] face_template, FSDK.TFacePosition face_pos, FSDK.TPoint[] facial_features, FSDK.CImage face_image)
 {
     this.face_template   = face_template;
     this.face_position   = FacePosition.FromFSDK(face_pos);
     this.facial_features = facial_features;
     this.image           = face_image;
     this.face_image      = face_image;
 }
    public void Update(FSDK.CImage image, Image frameImage, bool recogniseFacialFeatures)
    {
        FSDK.FeedFrame(tracker, 0, image.ImageHandle, ref faceCount, out IDs, sizeof(long) * 256);
        Array.Resize(ref IDs, (int)faceCount);

        Graphics graphics = Graphics.FromImage(frameImage);

        for (int i = 0; i < IDs.Length; ++i)
        {
            if (recogniseFacialFeatures == true)
            {
                FSDK.TPoint[] facialFeatures;
                FSDK.GetTrackerFacialFeatures(tracker, 0, IDs[i], out facialFeatures);
                foreach (FSDK.TPoint point in facialFeatures)
                {
                    graphics.FillEllipse(Brushes.Blue, point.x, point.y, 5, 5);
                }
            }
            else
            {
                FSDK.TFacePosition facePosition = new FSDK.TFacePosition();
                FSDK.GetTrackerFacePosition(tracker, 0, IDs[i], ref facePosition);

                int x = facePosition.xc - (int)(facePosition.w * 0.6);
                int y = facePosition.yc - (int)(facePosition.w * 0.6);
                int w = (int)(facePosition.w * 1.2);

                Pen pen = new Pen(Color.FromArgb(115, 115, 115, 115), 3);

                RectInfo currentRectInfo = new RectInfo(x, y, w);

                currentRectInfo = ProccessRectInfo(currentRectInfo, IDs[i]);

                /*String name;
                 * int res = FSDK.GetAllNames(tracker, IDs[i], out name, 65536);
                 *
                 * if (FSDK.FSDKE_OK == res && name.Length > 0)
                 * {
                 *  StringFormat format = new StringFormat();
                 *  format.Alignment = StringAlignment.Center;
                 *
                 *  graphics.DrawString(name, new System.Drawing.Font("Arial", 16),
                 *  new System.Drawing.SolidBrush(System.Drawing.Color.LightGreen),
                 *  currentRectInfo.x + currentRectInfo.w / 2, currentRectInfo.y + currentRectInfo.w + 5, format);
                 * }*/
                pen = new Pen(Color.FromArgb(115, 115, 115, 115), 3);

                if (!CheckIfOpen())
                {
                    MouseOnRect(currentRectInfo, ref pen, i);
                }

                graphics.DrawRectangle(pen, currentRectInfo.x, currentRectInfo.y, currentRectInfo.w, currentRectInfo.w);
            }
        }
    }
예제 #4
0
        private void Form1_Shown(object sender, EventArgs e)
        {
            int tracker = 0;

            FSDK.CreateTracker(ref tracker);

            int err = 0; // set realtime face detection parameters

            FSDK.SetTrackerMultipleParameters(tracker, "RecognizeFaces=false; HandleArbitraryRotations=false; DetermineFaceRotationAngle=false; InternalResizeWidth=100; FaceDetectionThreshold=5;", ref err);

            while (!needClose)
            {
                if (CameraOpened)
                {
                    Int32 imageHandle = 0;
                    if (FSDK.FSDKE_OK != FSDKCam.GrabFrame(cameraHandle, ref imageHandle)) // grab the current frame from the camera
                    {
                        MessageBox.Show("Error in FSDK_GrabFrame", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        Application.DoEvents();
                        continue;
                    }
                    FSDK.CImage image = new FSDK.CImage(imageHandle);

                    long[] IDs;
                    long   faceCount = 0;
                    FSDK.FeedFrame(tracker, 0, image.ImageHandle, ref faceCount, out IDs, sizeof(long) * 256); // maximum of 256 faces detected
                    Array.Resize(ref IDs, (int)faceCount);

                    Image    frameImage = image.ToCLRImage();
                    Graphics gr         = Graphics.FromImage(frameImage);

                    for (int i = 0; i < IDs.Length; ++i)
                    {
                        FSDK.TFacePosition facePosition = new FSDK.TFacePosition();
                        FSDK.GetTrackerFacePosition(tracker, 0, IDs[i], ref facePosition);

                        int left = facePosition.xc - (int)(facePosition.w * 0.6);
                        int top  = facePosition.yc - (int)(facePosition.w * 0.5);
                        gr.DrawRectangle(Pens.LightGreen, left, top, (int)(facePosition.w * 1.2), (int)(facePosition.w * 1.2));
                    }

                    // display current frame
                    pictureBox1.Image = frameImage;
                }
                GC.Collect(); // collect the garbage after the deletion

                // make UI controls accessible
                Application.DoEvents();
            }

            if (CameraOpened)
            {
                FSDKCam.CloseVideoCamera(cameraHandle);
            }
        }
예제 #5
0
 private void draw(FSDK.TFacePosition FacePosition)
 {
     if (FacePosition.w != 0)
     {
         gr.DrawRectangle(Pens.LightPink,
                          FacePosition.xc - FacePosition.w / 2,
                          FacePosition.yc - FacePosition.w / 2,
                          FacePosition.w,
                          FacePosition.w);//标示人脸
     }
 }
예제 #6
0
        public void personRecognize(long[] IDs, FSDK.TFacePosition facePosition, int left, int top, int w, int i, int tracker, Image frameImage)
        {
            String   name;
            Graphics gr  = Graphics.FromImage(frameImage);
            int      res = FSDK.GetAllNames(tracker, IDs[i], out name, 65536); // maximum of 65536 characters

            if (FSDK.FSDKE_OK == res && name.Length > 0)
            { // draw name
                StringFormat format = new StringFormat();
                format.Alignment = StringAlignment.Center;

                gr.DrawString(name, new Font("Arial", 16),
                              new SolidBrush(Color.LightGreen),
                              facePosition.xc, top + w + 5, format);
            }
            Pen pen = Pens.LightGreen;

            if (mouseX >= left && mouseX <= left + w && mouseY >= top && mouseY <= top + w)
            {
                pen = Pens.Blue;

                if (ProgramState.psRemember == programState)
                {
                    if (FSDK.FSDKE_OK == FSDK.LockID(tracker, IDs[i]))
                    {
                        Console.WriteLine(mouseY + "Mouse Move2" + mouseX);
                        // get the user name
                        InputName inputName = new InputName();
                        if (DialogResult.OK == inputName.ShowDialog())
                        {
                            Console.WriteLine(mouseY + "Mouse Move3" + mouseX);
                            userName = inputName.userName;
                            if (userName == null || userName.Length <= 0)
                            {
                                String s = "";
                                FSDK.SetName(tracker, IDs[i], "");
                                FSDK.PurgeID(tracker, IDs[i]);
                            }
                            else
                            {
                                FSDK.SetName(tracker, IDs[i], userName);
                            }
                            FSDK.UnlockID(tracker, IDs[i]);
                        }
                    }
                }
                gr.DrawRectangle(pen, left, top, w, w);
            }
            programState      = ProgramState.psRecognize;
            pictureBox1.Image = frameImage;
        }
예제 #7
0
        private void btnOpenPhoto_Click(object sender, EventArgs e)
        {
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    FSDK.CImage image = new FSDK.CImage(openFileDialog1.FileName);

                    // resize image to fit the window width
                    double ratio = System.Math.Min((pictureBox1.Width + 0.4) / image.Width,
                                                   (pictureBox1.Height + 0.4) / image.Height);
                    image = image.Resize(ratio);

                    Image    frameImage = image.ToCLRImage();
                    Graphics gr         = Graphics.FromImage(frameImage);

                    FSDK.TFacePosition facePosition = image.DetectFace();
                    if (0 == facePosition.w)
                    {
                        MessageBox.Show("No faces detected", "Face Detection");
                    }
                    else
                    {
                        int left = facePosition.xc - (int)(facePosition.w * 0.6f);
                        int top  = facePosition.yc - (int)(facePosition.w * 0.5f);
                        gr.DrawRectangle(Pens.LightGreen, left, top, (int)(facePosition.w * 1.2), (int)(facePosition.w * 1.2));

                        FSDK.TPoint[] facialFeatures = image.DetectFacialFeaturesInRegion(ref facePosition);
                        int           i = 0;
                        foreach (FSDK.TPoint point in facialFeatures)
                        {
                            gr.DrawEllipse((++i > 2) ? Pens.LightGreen : Pens.Blue, point.x, point.y, 3, 3);
                        }

                        gr.Flush();
                    }

                    // display image
                    pictureBox1.Image = frameImage;
                    pictureBox1.Refresh();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "Exception");
                }
            }
        }
예제 #8
0
 void drawEyes(object objc)
 {
     try
     {
         object[]           obj          = (object[])objc;
         int                imageHandle  = (int)obj[0];
         FSDK.TFacePosition facePosition = (FSDK.TFacePosition)obj[1];
         Graphics           gr           = (Graphics)obj[2];
         FSDK.TPoint[]      eye          = new FSDK.CImage(imageHandle).DetectEyesInRegion(ref facePosition);
         byte[]             eyes         = new byte[0];
         FSDK.GetFaceTemplateUsingEyes(imageHandle, ref eye, out eyes);
         gr.DrawRectangle(Pens.Pink, eye[0].x, eye[0].y, 20f, 10f);
         gr.DrawRectangle(Pens.Pink, eye[1].x, eye[1].y, 20f, 10f);
     }
     catch (Exception)
     {
         //who sai
     }
 }
        public static Face FacePreparation(String picDir, String _name, String _folderName, int _index, Face twarz, int _folderIndex)
        {
            int Image = 0;

            if (FSDK.LoadImageFromFile(ref Image, picDir) != FSDK.FSDKE_OK)
            {
                Console.WriteLine("addSingleFace error ! ###############################################");
            }
            FSDK.TFacePosition FacePosition = new FSDK.TFacePosition();

            if (FSDK.DetectFace(Image, ref FacePosition) != FSDK.FSDKE_OK)
            {
                Console.WriteLine("addSingleFace error ! ###############################################");
            }

            FSDK.TPoint[] FacialFeatures;

            if (FSDK.DetectFacialFeatures(Image, out FacialFeatures) == FSDK.FSDKE_OK)
            {
                twarz.name       = _name;
                twarz.folderName = _folderName;
                Console.WriteLine(twarz.name);
                twarz.index        = _index;
                twarz.networkIndex = _folderIndex;
                List <float> faceFeatures = FeatureConverter.GetFeatures(FacialFeatures);
                twarz.features = faceFeatures;

                if (twarz.ValidateFace() == 1)
                {
                    Console.WriteLine("Wygenerowano dane twarzy");
                }
                else
                {
                    Console.WriteLine("Blad twarzy " + twarz.name + " ###############################################");
                }
            }
            else
            {
                Console.WriteLine("addSingleFace error ! ###############################################");
            }
            return(twarz);
        }
예제 #10
0
        private bool EnrollFace(Face a_face)
        {
            //ASSUMING THAT FACES ARE VERTICAL (HANDLEARBITRARYROTATIONS IS FALSE) TO SPEED UP FACE DETECTION
            FSDK.SetFaceDetectionParameters(false, true, 384);
            FSDK.SetFaceDetectionThreshold((int)FaceDetectionThreshold);



            //GET POSITION OF FACE IN IMAGE
            a_face.face_position = FacePosition.FromFSDK(a_face.Clone().image.DetectFace());
            a_face.face_image    = a_face.Clone().image.CopyRect((int)(a_face.face_position.xc - Math.Round(a_face.face_position.w * 0.5)), (int)(a_face.face_position.yc - Math.Round(a_face.face_position.w * 0.5)), (int)(a_face.face_position.xc + Math.Round(a_face.face_position.w * 0.5)), (int)(a_face.face_position.yc + Math.Round(a_face.face_position.w * 0.5)));

            //GET THE FACIAL FEATURES OF THE FACE
            FSDK.TFacePosition face_pos = a_face.face_position;
            a_face.facial_features = a_face.Clone().image.DetectEyesInRegion(ref face_pos);

            //GET A TEMPLATE OF THE FACE TO BE USED FOR LATER COMPARISON
            a_face.face_template = a_face.Clone().image.GetFaceTemplateInRegion(ref face_pos);
            known_faces_list.Add(a_face);

            return(true);
        }
예제 #11
0
        private void button1_Click(object sender, EventArgs e)
        {
            this.button1.Hide();
            this.panel2.Show();
            this.pictureBox1.Show();
            this.webBrowser1.Show();



            int cameraHandle = 0;

            int r = FSDKCam.OpenVideoCamera(ref cameraName, ref cameraHandle);

            if (r != FSDK.FSDKE_OK)
            {
                MessageBox.Show("Error opening the first camera", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                Application.Exit();
            }

            int tracker = 0;                                                                     // creating a Tracker

            if (FSDK.FSDKE_OK != FSDK.LoadTrackerMemoryFromFile(ref tracker, TrackerMemoryFile)) // try to load saved tracker state
            {
                FSDK.CreateTracker(ref tracker);                                                 // if could not be loaded, create a new tracker
            }
            int err = 0;                                                                         // set realtime face detection parameters

            FSDK.SetTrackerMultipleParameters(tracker, "HandleArbitraryRotations=false; DetermineFaceRotationAngle=false; InternalResizeWidth=100; FaceDetectionThreshold=5;", ref err);

            while (!needClose)
            {
                Int32 imageHandle = 0;
                if (FSDK.FSDKE_OK != FSDKCam.GrabFrame(cameraHandle, ref imageHandle)) // grab the current frame from the camera
                {
                    Application.DoEvents();
                    continue;
                }
                FSDK.CImage image = new FSDK.CImage(imageHandle);

                long[] IDs;
                long   faceCount = 0;
                FSDK.FeedFrame(tracker, 0, image.ImageHandle, ref faceCount, out IDs, sizeof(long) * 256); // maximum of 256 faces detected
                Array.Resize(ref IDs, (int)faceCount);

                // make UI controls accessible (to find if the user clicked on a face)
                Application.DoEvents();

                Image    frameImage = image.ToCLRImage();
                Graphics gr         = Graphics.FromImage(frameImage);

                for (int i = 0; i < IDs.Length; ++i)
                {
                    FSDK.TFacePosition facePosition = new FSDK.TFacePosition();
                    FSDK.GetTrackerFacePosition(tracker, 0, IDs[i], ref facePosition);

                    int left = facePosition.xc - (int)(facePosition.w * 0.6);
                    int top  = facePosition.yc - (int)(facePosition.w * 0.5);
                    int w    = (int)(facePosition.w * 1.2);

                    String name    = null;
                    String address = "sunrinwiki.layer7.kr/index.php/";
                    String new_address;

                    int res = FSDK.GetAllNames(tracker, IDs[i], out name, 65536); // maximum of 65536 characters

                    if (FSDK.FSDKE_OK == res && name.Length > 0)
                    { // draw name
                        StringFormat format = new StringFormat();
                        format.Alignment = StringAlignment.Center;

                        gr.DrawString(name, new System.Drawing.Font("Arial", 16),

                                      new System.Drawing.SolidBrush(System.Drawing.Color.LightGreen),
                                      facePosition.xc, top + w + 5, format);

                        if ((saved_name != name) && (name != null))
                        {
                            new_address = address + name;
                            webBrowser1.Navigate(new_address);
                            saved_name = name;
                        }
                    }

                    Pen pen = Pens.LightGreen;
                    if (mouseX >= left && mouseX <= left + w && mouseY >= top && mouseY <= top + w)
                    {
                        pen = Pens.Blue;
                        if (ProgramState.psRemember == programState)
                        {
                            if (FSDK.FSDKE_OK == FSDK.LockID(tracker, IDs[i]))
                            {
                                // get the user name
                                InputName inputName = new InputName();
                                if (DialogResult.OK == inputName.ShowDialog())
                                {
                                    userName = inputName.userName;
                                    if (userName == null || userName.Length <= 0)
                                    {
                                        String s = "";
                                        FSDK.SetName(tracker, IDs[i], "");
                                        FSDK.PurgeID(tracker, IDs[i]);
                                    }
                                    else
                                    {
                                        FSDK.SetName(tracker, IDs[i], userName);
                                    }
                                    FSDK.UnlockID(tracker, IDs[i]);
                                }
                            }
                        }
                    }
                    gr.DrawRectangle(pen, left, top, w, w);
                }
                programState = ProgramState.psRecognize;

                // display current frame
                pictureBox1.Image = frameImage;
                GC.Collect(); // collect the garbage after the deletion
            }
            FSDK.SaveTrackerMemoryToFile(tracker, TrackerMemoryFile);
            FSDK.FreeTracker(tracker);

            FSDKCam.CloseVideoCamera(cameraHandle);
            FSDKCam.FinalizeCapturing();
        }
예제 #12
0
        /// <summary>
        /// Image capture and face detection
        /// Using Luxand Face SDK
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            // activate face sdk before using it...
            FSDK.ActivateLibrary("ANj63QzeUGKbORKF7KmC+s5J0f8hF7moXNMr1QrCeFStmCw3DTYD55rPZOERChnfpSbr3TguoGSPOPdrTwOodvoDuCeE3Jp/18G1GSeyvZT/uqK6q9MtvgSHtNFpna2sHVTdb1Az2rXxy8mHOOBgZ/PT5olt1Tsu0Gv8Go+3rdU=");
            //initialize sdk to enable capture
            FSDK.InitializeLibrary();
            FSDKCam.InitializeCapturing();
            String[] cameralist = new String[] { };
            int      count;

            //get clist of connected cameras and select the first one
            FSDKCam.GetCameraList(out cameralist, out count);
            if (count == 0)
            {
                MessageBox.Show("Please attach a camera", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                Close();
            }
            FSDKCam.VideoFormatInfo[] formatList;
            FSDKCam.GetVideoFormatList(ref cameralist[0], out formatList, out count);
            String cameraName;

            cameraName = cameralist[0];
            if (FSDKCam.OpenVideoCamera(ref cameraName, ref cameraHandle) != FSDK.FSDKE_OK)
            {
                MessageBox.Show("Error opening the first camera", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                Close();
            }
            //a camera is opened, so disable controls unitl a face is detected
            button1.Enabled = false;
            needClose       = false;
            int tracker = 0;

            if (FSDK.FSDKE_OK != FSDK.LoadTrackerMemoryFromFile(ref tracker, TrackerMemoryFile))
            {
                FSDK.CreateTracker(ref tracker);
            }
            int err = 0;

            FSDK.SetTrackerMultipleParameters(tracker, "HandleArbitraryRotations=false; DetermineFaceRotationAngle=false; InternalResizeWidth=100; FaceDetectionThreshold=5;", ref err);

            FSDK.CImage image;
            Image       frameImage;

            while (!needClose)
            {
                int ImageHandle = new int();
                if (FSDKCam.GrabFrame(cameraHandle, ref ImageHandle) != FSDK.FSDKE_OK)
                {
                    Application.DoEvents();
                    continue;
                }
                image = new FSDK.CImage(ImageHandle);
                long[] IDs        = new long[256];
                long   faceCount  = new long();
                long   sizeOfLong = 8;
                FSDK.FeedFrame(tracker, 0, image.ImageHandle, ref faceCount, out IDs, sizeOfLong * 256);
                Array.Resize(ref IDs, (int)faceCount);
                frameImage = image.ToCLRImage();
                Graphics gr;
                gr = Graphics.FromImage(frameImage);
                int i;
                for (i = 0; i <= IDs.Length - 1;)
                {
                    if (pictureBox1.Image != null)
                    {
                        // a face has been detected, grab it and close our preview source
                        needClose       = true;
                        button1.Enabled = true;
                        String user;
                        user = f.get_staffname();
                        try
                        {
                            if (System.IO.Directory.Exists(Application.StartupPath + "\\images"))
                            {
                                pictureBox1.Image.Save(Application.StartupPath + "\\images\\" + user + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
                            }
                            else
                            {
                                System.IO.Directory.CreateDirectory(Application.StartupPath + "\\images");
                                pictureBox1.Image.Save(Application.StartupPath + "\\images\\" + user + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
                            }
                        }
                        catch (Exception Ex)
                        {
                            Console.WriteLine(Ex.Message);
                        }
                        GC.Collect();
                        Application.DoEvents();
                        break;
                    }
                    //highlight face position in image
                    FSDK.TFacePosition facePosition = new FSDK.TFacePosition();
                    FSDK.GetTrackerFacePosition(tracker, 0, IDs[i], ref facePosition);
                    int left, top, w;
                    left = facePosition.xc = (int)(facePosition.w * 0.6);
                    top  = facePosition.yc - (int)(facePosition.w * 0.5);
                    w    = facePosition.w * (int)1.2;
                    string name;
                    int    res;
                    res = FSDK.GetAllNames(tracker, IDs[i], out name, 65536);
                    if (FSDK.FSDKE_OK == res && name.Length > 0)
                    {
                        StringFormat format = new StringFormat();
                        format.Alignment = StringAlignment.Center;
                        gr.DrawString(name, new System.Drawing.Font("Arial", 16), new System.Drawing.SolidBrush(System.Drawing.Color.LightGreen), facePosition.xc, top + w + 5, format);
                    }
                    Pen pen = Pens.LightGreen;
                    //this block assigns a name to the image and saves it in our tracker file, but we don't need it since we are storing to our DB Server
                    if (mouseX >= left && mouseX <= left + w && mouseY >= top && mouseY <= top + w)
                    {
                        pen = Pens.Blue;
                        if (programstate == ProgramStates.psRemember)
                        {
                            if (FSDK.FSDKE_OK == FSDK.LockID(tracker, IDs[i]))
                            {
                                //ibe == testdata
                                userName = "******";
                                if (userName == null)
                                {
                                    FSDK.SetName(tracker, IDs[i], "");
                                }
                                else
                                {
                                    FSDK.SetName(tracker, IDs[i], userName);
                                }
                                FSDK.UnlockID(tracker, IDs[i]);
                            }
                        }
                    }
                    gr.DrawRectangle(pen, left, top, w, w);
                }
                programstate      = ProgramStates.psRecognize;
                pictureBox1.Image = frameImage;
                //free captured resources to speed up program execution
                GC.Collect();
                Application.DoEvents();
            }
            //after capturing a valid face, tell the user and free resources
            FSDK.SaveTrackerMemoryToFile(tracker, TrackerMemoryFile);
            FSDK.FreeTracker(tracker);
            FSDKCam.CloseVideoCamera(cameraHandle);
            FSDKCam.FinalizeCapturing();
            MessageBox.Show("Face Image Successfully Captured!!!");
        }
        private void button1_Click(object sender, EventArgs e)
        {
            this.button1.Enabled = false;
            int cameraHandle = 0;

            int r = FSDKCam.OpenVideoCamera(ref cameraName, ref cameraHandle);

            if (r != FSDK.FSDKE_OK)
            {
                MessageBox.Show("Error opening the first camera", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                Application.Exit();
            }

            int tracker = 0;

            FSDK.CreateTracker(ref tracker);

            int err = 0; // set realtime face detection parameters

            FSDK.SetTrackerMultipleParameters(tracker, "RecognizeFaces=false; DetectGender=true; HandleArbitraryRotations=false; DetermineFaceRotationAngle=false; InternalResizeWidth=100; FaceDetectionThreshold=5;", ref err);

            while (!needClose)
            {
                Int32 imageHandle = 0;
                if (FSDK.FSDKE_OK != FSDKCam.GrabFrame(cameraHandle, ref imageHandle)) // grab the current frame from the camera
                {
                    Application.DoEvents();
                    continue;
                }
                FSDK.CImage image = new FSDK.CImage(imageHandle);

                long [] IDs;
                long    faceCount = 0;
                FSDK.FeedFrame(tracker, 0, image.ImageHandle, ref faceCount, out IDs, sizeof(long) * 256); // maximum 256 faces detected
                Array.Resize(ref IDs, (int)faceCount);

                Image    frameImage = image.ToCLRImage();
                Graphics gr         = Graphics.FromImage(frameImage);

                for (int i = 0; i < IDs.Length; ++i)
                {
                    FSDK.TFacePosition facePosition = new FSDK.TFacePosition();
                    FSDK.GetTrackerFacePosition(tracker, 0, IDs[i], ref facePosition);

                    int left = facePosition.xc - (int)(facePosition.w * 0.6);
                    int top  = facePosition.yc - (int)(facePosition.w * 0.5);
                    int w    = (int)(facePosition.w * 1.2);
                    gr.DrawRectangle(Pens.LightGreen, left, top, w, w);

                    String AttributeValues;
                    if (0 == FSDK.GetTrackerFacialAttribute(tracker, 0, IDs[i], "Gender", out AttributeValues, 1024))
                    {
                        float ConfidenceMale   = 0.0f;
                        float ConfidenceFemale = 0.0f;
                        FSDK.GetValueConfidence(AttributeValues, "Male", ref ConfidenceMale);
                        FSDK.GetValueConfidence(AttributeValues, "Female", ref ConfidenceFemale);

                        String str = (ConfidenceMale > ConfidenceFemale ? "Male" : "Female") + ", " +
                                     (ConfidenceMale > ConfidenceFemale ? (int)(ConfidenceMale * 100) : (int)(ConfidenceFemale * 100)).ToString() + "%";

                        StringFormat format = new StringFormat();
                        format.Alignment = StringAlignment.Center;

                        gr.DrawString(str, new System.Drawing.Font("Arial", 16),
                                      new System.Drawing.SolidBrush(System.Drawing.Color.LightGreen),
                                      facePosition.xc, top + w + 5, format);
                    }
                }

                // display current frame
                pictureBox1.Image = frameImage;

                GC.Collect(); // collect the garbage

                // make UI controls accessible
                Application.DoEvents();
            }
            FSDK.FreeTracker(tracker);

            FSDKCam.CloseVideoCamera(cameraHandle);
            FSDKCam.FinalizeCapturing();
        }
예제 #14
0
        //处理三个摄像头图像
        private void Bg1_DoWork(object sender, DoWorkEventArgs e)
        {
            string        ConnString = Tool.connstr;//连接字符串
            SqlConnection conn       = new SqlConnection(ConnString);

            int[]    countID1   = new int[CountingSize];
            byte[][] templates1 = new byte[CountingSize][];
            int[]    countID2   = new int[CountingSize];
            byte[][] templates2 = new byte[CountingSize][];

            //存储所有已经出现的id
            List <long> allIDs1 = new List <long>();

            //新建1个Tracker
            int tracker1 = 0;

            FSDK.CreateTracker(ref tracker1);
            int tracker2 = 0;

            FSDK.CreateTracker(ref tracker2);

            //设置Tracker参数
            int err1 = 0;

            FSDK.SetTrackerMultipleParameters(tracker1,
                                              "RecognizeFaces=" + RecognizeFaces.ToString().ToLower() +
                                              "; HandleArbitraryRotations=" + HandleArbitraryRotations.ToString().ToLower() +
                                              "; DetermineFaceRotationAngle=" + HandleArbitraryRotations.ToString().ToLower() +
                                              "; InternalResizeWidth=" + InternalResizeWidth.ToString().ToLower() +
                                              "; FaceDetectionThreshold=" + FaceDetectionThreshold.ToString().ToLower() + ";",
                                              ref err1);
            int err2 = 0;

            FSDK.SetTrackerMultipleParameters(tracker2,
                                              "RecognizeFaces=" + RecognizeFaces.ToString().ToLower() +
                                              "; HandleArbitraryRotations=" + HandleArbitraryRotations.ToString().ToLower() +
                                              "; DetermineFaceRotationAngle=" + HandleArbitraryRotations.ToString().ToLower() +
                                              "; InternalResizeWidth=" + InternalResizeWidth.ToString().ToLower() +
                                              "; FaceDetectionThreshold=" + FaceDetectionThreshold.ToString().ToLower() + ";",
                                              ref err2);

            DateTime t1 = DateTime.Now;
            DateTime t2 = DateTime.Now;

            //记录总帧数
            int loops = 0;

            while (!needClose)
            {
                //声明定义三个图片句柄,来源于三个摄像头句柄
                Int32 imageHandle1 = 0;
                Int32 imageHandle2 = 0;
                if (FSDK.FSDKE_OK != FSDKCam.GrabFrame(cameraHandle1, ref imageHandle1))
                {
                    continue;
                }
                if (FSDK.FSDKE_OK != FSDKCam.GrabFrame(cameraHandle2, ref imageHandle2))
                {
                    continue;
                }

                FSDK.CImage image1      = new FSDK.CImage(imageHandle1);
                Image       frameImage1 = image1.ToCLRImage();
                FSDK.CImage image2      = new FSDK.CImage(imageHandle2);
                Image       frameImage2 = image2.ToCLRImage();

                long[] IDs1;
                long[] IDs2;
                long   faceCount1 = 0;
                long   faceCount2 = 0;
                FSDK.FeedFrame(tracker1, 0, image1.ImageHandle, ref faceCount1, out IDs1, sizeof(long) * 256); // maximum 256 faces detected
                FSDK.FeedFrame(tracker2, 0, image2.ImageHandle, ref faceCount2, out IDs2, sizeof(long) * 256); // maximum 256 faces detected
                Array.Resize(ref IDs1, (int)faceCount1);
                Array.Resize(ref IDs2, (int)faceCount2);
                Graphics g1 = Graphics.FromImage(frameImage1);
                Graphics g2 = Graphics.FromImage(frameImage2);

                conn.Open();

                Application.DoEvents(); //使控件可用

                //处理1号相机当前帧
                for (int i = 0; i < IDs1.Length; ++i)
                {
                    try
                    {
                        //计算人脸特征模板
                        FSDK.TFacePosition facePosition1 = new FSDK.TFacePosition();
                        FSDK.GetTrackerFacePosition(tracker1, 0, IDs1[i], ref facePosition1);

                        //绘制人脸矩形框
                        int left = facePosition1.xc - (int)(facePosition1.w * 0.5);
                        int top  = facePosition1.yc - (int)(facePosition1.w * 0.5);
                        g1.DrawRectangle(Pens.LightGreen, left, top, (int)(facePosition1.w * 1.0), (int)(facePosition1.w * 1.0));

                        //计算当前ID对应人脸特征串
                        byte[] temp1 = image1.GetFaceTemplateInRegion(ref facePosition1);

                        //记录当前ID
                        if (allIDs1.Count == 0)//如果是第一个ID则直接加入
                        {
                            //记录当前ID出现次数
                            countID1[IDs1[i]] = countID1[IDs1[i]] >= 100 ? 100 : countID1[IDs1[i]] + 1;

                            //更新当前ID的特征串
                            templates1[IDs1[i]] = temp1;

                            //无重复添加新的ID
                            AddIDIntoAllIDList(allIDs1, IDs1[i]);
                        }
                        else if (allIDs1.Exists(x => x == IDs1[i]))//如果已存在当前ID,则只更新特征串数据
                        {
                            //更新当前ID的特征串
                            templates1[IDs1[i]] = temp1;

                            //记录当前ID出现次数
                            countID1[IDs1[i]] = countID1[IDs1[i]] >= 100 ? 100 : countID1[IDs1[i]] + 1;
                        }
                        else//如果是新的ID,则与原来的每个ID对应的模板进行比对,看相似度
                        {
                            float simlarity = 0;
                            //foreach (long id in allIDs1)
                            //{
                            //    int r = FSDK.MatchFaces(ref templates1[id], ref temp1, ref simlarity);
                            //    if (simlarity > 0.8f)//发现相似
                            //    {
                            //        //FSDK.PurgeID(tracker1, IDs[i]);
                            //        countID1[id] = countID1[id] >= 100 ? 100 : countID1[id] + 1;
                            //        break;
                            //    }
                            //    else//没有相似
                            //    {
                            //        //记录当前ID出现次数
                            //        countID1[IDs1[i]] = countID1[IDs1[i]] >= 100 ? 100 : countID1[IDs1[i]] + 1;

                            //        //更新当前ID的特征串
                            //        templates1[IDs1[i]] = temp1;

                            //        //无重复添加新的ID
                            //        AddIDIntoAllIDList(allIDs1, IDs1[i]);
                            //    }
                            //}

                            int sim1_count = 0;
                            foreach (long id in allIDs1)
                            {
                                int r = FSDK.MatchFaces(ref templates1[id], ref temp1, ref simlarity);
                                if (simlarity > 0.8f)//发现相似
                                {
                                    countID1[id] = countID1[id] >= 100 ? 100 : countID1[id] + 1;
                                    sim1_count   = sim1_count + 1;
                                    break;
                                }
                            }

                            if (sim1_count == 0)
                            {
                                //记录当前ID出现次数
                                countID1[IDs1[i]] = countID1[IDs1[i]] >= 100 ? 100 : countID1[IDs1[i]] + 1;

                                //更新当前ID的特征串
                                templates1[IDs1[i]] = temp1;

                                //无重复添加新的ID
                                AddIDIntoAllIDList(allIDs1, IDs1[i]);
                            }
                        }
                    }
                    catch { }
                }

                //处理2号相机当前帧
                for (int i = 0; i < IDs2.Length; ++i)
                {
                    try
                    {
                        //计算人脸特征模板
                        FSDK.TFacePosition facePosition2 = new FSDK.TFacePosition();
                        FSDK.GetTrackerFacePosition(tracker2, 0, IDs2[i], ref facePosition2);

                        //绘制人脸矩形框
                        int left = facePosition2.xc - (int)(facePosition2.w * 0.5);
                        int top  = facePosition2.yc - (int)(facePosition2.w * 0.5);
                        g2.DrawRectangle(Pens.LightGreen, left, top, (int)(facePosition2.w * 1.0), (int)(facePosition2.w * 1.0));

                        //计算当前ID对应人脸特征串
                        byte[] temp2 = image2.GetFaceTemplateInRegion(ref facePosition2);

                        //如果是新的ID,则与原来的每个ID对应的模板进行比对,看相似度
                        float simlarity = 0;
                        foreach (long id in allIDs1)
                        {
                            int r = FSDK.MatchFaces(ref templates1[id], ref temp2, ref simlarity);
                            if (simlarity > 0.8f)//发现相似
                            {
                                countID1[id] = 0;

                                int        a             = Convert.ToInt32(id);
                                DateTime   XiaCheShiJian = DateTime.Now.ToLocalTime();
                                SqlCommand sqlCmd        = new SqlCommand("UPDATE [SafeSystem].[dbo].[FaceRecognition] SET [XiaCheShiJian] = @XiaCheShiJian WHERE Template = " + a + "and XiaCheShiJian is null", conn);
                                sqlCmd.Parameters.Add("@XiaCheShiJian", System.Data.SqlDbType.DateTime);
                                sqlCmd.Parameters["@XiaCheShiJian"].Value = XiaCheShiJian;
                                sqlCmd.ExecuteNonQuery();
                                RemoveIDFromAllIDList(allIDs1, IDs1[i]);
                                break;
                            }
                        }
                    }
                    catch { }
                }

                //组织当前全部ID列表字符串
                string strAll1 = "";
                int    index1  = 0;
                foreach (int id in allIDs1)
                {
                    if (index1 == 0)
                    {
                        strAll1 += "(" + id + ":" + countID1[id] + ")";
                    }
                    else
                    {
                        strAll1 += ",(" + id + ":" + countID1[id] + ")";
                    }
                    index1++;
                }

                //显示当前实时数据到当前帧
                t2 = DateTime.Now;
                TimeSpan ts = t2 - t1;
                t1 = t2;
                g1.DrawString("Frames Count:" + loops, new Font("微软雅黑", 20f), Brushes.Red, 10, 0);
                g1.DrawString("All Person:" + allIDs1.Count + "[" + strAll1 + "]", new Font("微软雅黑", 20f), Brushes.Red, 10, 50);

                g1.DrawString("Frame Time:" + ts.TotalMilliseconds.ToString("####.#") + "ms", new Font("微软雅黑", 20f), Brushes.Red, 10, 100);
                g1.DrawString("Frame Rate:" + (1000.0 / ts.TotalMilliseconds).ToString("####.#") + "fps", new Font("微软雅黑", 20f), Brushes.Red, 10, 150);
                g1.Dispose();
                g1 = null;
                Helper.SetImage(box1, frameImage1);
                Thread.Sleep(SleepTime);
                g2.Dispose();
                g2 = null;
                Helper.SetImage(box2, frameImage2);
                Thread.Sleep(SleepTime);

                //每处理100帧图像就清理一次出现次数很少的ID,减少计数错误
                if (loops == 100)
                {
                    List <long> bak1 = new List <long>();
                    foreach (long id in allIDs1)
                    {
                        if (countID1[id] > MiniAppear)
                        {
                            bak1.Add(id);
                            int        a = Convert.ToInt32(id);
                            DateTime   ShangCheShiJian = DateTime.Now.ToLocalTime();
                            SqlCommand sqlCmd          = new SqlCommand("if not exists (SELECT [Template] FROM [SafeSystem].[dbo].[FaceRecognition] Where Template = '" + a + "' and XiaCheShiJian is null) INSERT INTO [SafeSystem].[dbo].[FaceRecognition] ([Template],[ShangCheShiJian]) " + " values(@Template, @ShangCheShiJian)", conn);
                            sqlCmd.Parameters.Add("@Template", System.Data.SqlDbType.Int);
                            sqlCmd.Parameters.Add("@ShangCheShiJian", System.Data.SqlDbType.DateTime);
                            sqlCmd.Parameters["@Template"].Value        = a;
                            sqlCmd.Parameters["@ShangCheShiJian"].Value = ShangCheShiJian;
                            sqlCmd.ExecuteNonQuery();
                        }
                        else
                        {
                            countID1[id] = 0;
                        }
                    }
                    allIDs1 = bak1;
                    loops   = 0;
                }
                loops++;

                GC.Collect(); // collect the garbage after the deletion
                conn.Close();
            }
            FSDK.SaveTrackerMemoryToFile(tracker1, TrackerMemoryFile);
            FSDK.FreeTracker(tracker1);
            FSDK.FreeTracker(tracker2);

            FSDKCam.CloseVideoCamera(cameraHandle1);
            FSDKCam.CloseVideoCamera(cameraHandle2);
            FSDKCam.FinalizeCapturing();
        }
예제 #15
0
        private void button1_Click(object sender, EventArgs e)
        {
            this.button1.Enabled = false;
            int cameraHandle = 0;

            int r = FSDKCam.OpenVideoCamera(ref cameraName, ref cameraHandle);

            if (r != FSDK.FSDKE_OK)
            {
                MessageBox.Show("Error opening the first camera", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                Application.Exit();
            }

            int tracker = 0;                                                                     // creating a Tracker

            if (FSDK.FSDKE_OK != FSDK.LoadTrackerMemoryFromFile(ref tracker, TrackerMemoryFile)) // try to load saved tracker state
            {
                FSDK.CreateTracker(ref tracker);                                                 // if could not be loaded, create a new tracker
            }
            int err = 0;                                                                         // set realtime face detection parameters

            FSDK.SetTrackerMultipleParameters(tracker, "HandleArbitraryRotations=false; DetermineFaceRotationAngle=false; InternalResizeWidth=100; FaceDetectionThreshold=5;", ref err);

            while (!needClose)
            {
                Int32 imageHandle = 0;
                if (FSDK.FSDKE_OK != FSDKCam.GrabFrame(cameraHandle, ref imageHandle)) // grab the current frame from the camera
                {
                    Application.DoEvents();
                    continue;
                }
                FSDK.CImage image = new FSDK.CImage(imageHandle);

                long[] IDs;
                long   faceCount = 0;
                FSDK.FeedFrame(tracker, 0, image.ImageHandle, ref faceCount, out IDs, sizeof(long) * 256); // maximum of 256 faces detected
                Array.Resize(ref IDs, (int)faceCount);

                // make UI controls accessible (to find if the user clicked on a face)
                Application.DoEvents();

                Image    frameImage = image.ToCLRImage();
                Graphics gr         = Graphics.FromImage(frameImage);

                for (int i = 0; i < IDs.Length; ++i)
                {
                    FSDK.TFacePosition facePosition = new FSDK.TFacePosition();
                    FSDK.GetTrackerFacePosition(tracker, 0, IDs[i], ref facePosition);

                    int left = facePosition.xc - (int)(facePosition.w * 0.6);
                    int top  = facePosition.yc - (int)(facePosition.w * 0.5);
                    int w    = (int)(facePosition.w * 1.2);

                    String name;
                    int    res = FSDK.GetAllNames(tracker, IDs[i], out name, 65536);          // maximum of 65536 characters

                    if (FSDK.FSDKE_OK == res && name.Length > 0)
                    { // draw name
                        StringFormat format = new StringFormat();
                        format.Alignment = StringAlignment.Center;

                        gr.DrawString("", new System.Drawing.Font("Arial", 16),
                                      new System.Drawing.SolidBrush(System.Drawing.Color.LightGreen),
                                      facePosition.xc, top + w + 5, format);
                        label3.Text = name;
                    }
                    else
                    {
                        label3.Text = "UnKnow FACE";
                    }



                    Pen pen = Pens.LightGreen;
                    if (mouseX >= left && mouseX <= left + w && mouseY >= top && mouseY <= top + w)
                    {
                        pen = Pens.Blue;
                        if (ProgramState.psRemember == programState)
                        {
                            if (FSDK.FSDKE_OK == FSDK.LockID(tracker, IDs[i]))
                            {
                                // get the user name
                                InputName inputName = new InputName();
                                inputName.bmp = new Bitmap(pictureBox1.Image);


                                if (DialogResult.OK == inputName.ShowDialog())
                                {
                                    userName = inputName.userName;
                                    if (userName == null || userName.Length <= 0)
                                    {
                                        String s = "";
                                        FSDK.SetName(tracker, IDs[i], "");
                                        FSDK.PurgeID(tracker, IDs[i]);
                                    }
                                    else
                                    {
                                        FSDK.SetName(tracker, IDs[i], userName);
                                    }
                                    FSDK.UnlockID(tracker, IDs[i]);
                                }
                            }
                        }
                    }
                    gr.DrawRectangle(pen, left, top, w, w);
                }
                programState = ProgramState.psRecognize;

                // display current frame
                pictureBox1.Image = frameImage;
                GC.Collect(); // collect the garbage after the deletion
                FSDK.SaveTrackerMemoryToFile(tracker, TrackerMemoryFile);
            }
            FSDK.SaveTrackerMemoryToFile(tracker, TrackerMemoryFile);

            if (label3.Text == label4.Text)
            {
                //con.Open();
                //cmd = new SqlCommand("select * from facetb where NAme='" + label3.Text + "'", con);
                //SqlDataReader dr = cmd.ExecuteReader();
                //if (dr.Read())
                //{
                //}
                //else
                //{
                //    dr.Close();


                //    FileStream fs = new FileStream(TrackerMemoryFile, FileMode.Open, FileAccess.Read);
                //    BinaryReader br = new BinaryReader(fs);
                //    Byte[] bytes = br.ReadBytes((Int32)fs.Length);
                //    br.Close();
                //    fs.Close();

                //    cmd = new SqlCommand("insert into facetb values('" + label3.Text + "',@Image)", con);
                //    conv_photo();
                //    cmd.Parameters.AddWithValue("@Image", bytes);
                //    // con.Open();
                //    cmd.ExecuteNonQuery();
                //    ///con.Close();
                //}
                //con.Close();
            }


            FSDK.FreeTracker(tracker);

            FSDKCam.CloseVideoCamera(cameraHandle);
            FSDKCam.FinalizeCapturing();
        }
예제 #16
0
        public void nhanDien()
        {
            int CamXuLy = 0;
            int r       = FSDKCam.OpenVideoCamera(ref TenCamera, ref CamXuLy);

            if (r != FSDK.FSDKE_OK)
            {
                MessageBox.Show("Error opening the first camera", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                Application.Exit();
            }
            int tracker = 0;                                                                     //tạo tracker

            if (FSDK.FSDKE_OK != FSDK.LoadTrackerMemoryFromFile(ref tracker, TrackerMemoryFile)) // try to load saved tracker state
            {
                FSDK.CreateTracker(ref tracker);                                                 // if could not be loaded, create a new tracker
            }
            int err = 0;                                                                         // set realtime face detection parameters

            FSDK.SetTrackerMultipleParameters(tracker,
                                              "HandleArbitraryRotations=false; DetermineFaceRotationAngle=false; InternalResizeWidth=100; FaceDetectionThreshold=3;",
                                              ref err);

            while (!needClose)
            {
                Int32 xuLyAnh = 0;
                if (FSDK.FSDKE_OK != FSDKCam.GrabFrame(CamXuLy, ref xuLyAnh)) // grab the current frame from the camera
                {
                    Application.DoEvents();
                    continue;
                }

                FSDK.CImage image = new FSDK.CImage(xuLyAnh); //new FSDK.CImage(imageHandle);
                //Image img = Image.FromFile("E:\\10257275_557036397739997_2637418459313670467_o.jpg");
                //Bitmap b = new Bitmap(pictureBox1.Width, pictureBox1.Height);
                //Graphics g = Graphics.FromImage((Image)b);

                //g.DrawImage(img, 0, 0, pictureBox1.Width, pictureBox1.Height);
                //g.Dispose();

                ///FSDK.CImage image = new FSDK.CImage(b);
                //FSDK.CImage image = new FSDK.CImage("E:\\10257275_557036397739997_2637418459313670467_o.jpg");

                long[] IDs;
                long   faceCount = 0;
                FSDK.FeedFrame(tracker, 0, image.ImageHandle, ref faceCount, out IDs, sizeof(long) * 256); // maximum of 256 faces detected
                Console.Write(IDs[0]);
                Array.Resize(ref IDs, (int)faceCount);

                // make UI controls accessible (to find if the user clicked on a face)
                Application.DoEvents();
                //Image.
                Image    frameImage = image.ToCLRImage();
                Graphics gr         = Graphics.FromImage(frameImage);

                for (int i = 0; i < IDs.Length; ++i)
                {
                    FSDK.TFacePosition facePosition = new FSDK.TFacePosition();
                    FSDK.GetTrackerFacePosition(tracker, 0, IDs[i], ref facePosition);
                    Console.Write(IDs.Length.ToString());
                    int left = facePosition.xc - (int)(facePosition.w * 0.6);
                    int top  = facePosition.yc - (int)(facePosition.w * 0.5);
                    int w    = (int)(facePosition.w * 1.2);

                    String name;
                    int    res = FSDK.GetAllNames(tracker, IDs[i], out name, 65536); // maximum of 65536 characters

                    if (FSDK.FSDKE_OK == res && name.Length > 0)
                    { // draw name
                        StringFormat format = new StringFormat();
                        format.Alignment = StringAlignment.Center;

                        gr.DrawString(name, new System.Drawing.Font("Arial", 16),
                                      new System.Drawing.SolidBrush(System.Drawing.Color.LightGreen),
                                      facePosition.xc, top + w + 5, format);
                    }

                    Pen pen = Pens.LightGreen;
                    if (mouseX >= left && mouseX <= left + w && mouseY >= top && mouseY <= top + w)
                    {
                        pen = Pens.Blue;
                        if (ProgramState.psRemember == programState)
                        {
                            if (FSDK.FSDKE_OK == FSDK.LockID(tracker, IDs[i]))
                            {
                                // get the user name
                                NhapTen inputName = new NhapTen();
                                if (DialogResult.OK == inputName.ShowDialog())
                                {
                                    Ten = inputName.Ten;
                                    //if (Ten == null || Ten.Length == 0)
                                    //{
                                    //    String s = "";
                                    //    FSDK.SetName(tracker, IDs[i], "");
                                    //    FSDK.PurgeID(tracker, IDs[i]);
                                    //}

                                    FSDK.SetName(tracker, IDs[i], Ten);
                                    FSDK.UnlockID(tracker, IDs[i]);
                                }
                            }
                        }
                    }
                    gr.DrawRectangle(pen, left, top, w, w);
                }
                programState = ProgramState.psRecognize;

                // display current frame
                pictureBox1.Image = frameImage;
                GC.Collect(); // collect the garbage after the deletion
            }
            FSDK.SaveTrackerMemoryToFile(tracker, TrackerMemoryFile);
            FSDK.FreeTracker(tracker);
            FSDKCam.CloseVideoCamera(CamXuLy);
            FSDKCam.FinalizeCapturing();
        }
예제 #17
0
        /*    void getStreams()
         *  {
         *
         *      try
         *      {
         *          HttpWebRequest cam = (HttpWebRequest)WebRequest.Create(new Home().location);
         *          WebResponse resp = cam.GetResponse();
         *          Stream resps = resp.GetResponseStream();
         *
         *         // AsyncCallback ds = new AsyncCallback(callb);
         *          int read = 0, total = 0;
         *          byte[] buff = new byte[7000000];
         *          //object state = new char[32];
         *          //IAsyncResult bmpdl = resps.BeginRead(buff,0,3000,ds,state);
         *          while ((read = resps.Read(buff, total, 1000)) != 0)
         *          {
         *              total += read;
         *          }
         *          Bitmap bmp = (Bitmap)Bitmap.FromStream(new MemoryStream(buff, 0, total, false));
         *          //(Bitmap)(Bitmap.FromStream(resps));
         *          //(Bitmap)Bitmap.FromStream(new MemoryStream(buff, 0, total, false));
         *          //new MemoryStream(buff, 0, total));
         *          resps.Flush();
         *          recFace(bmp);
         *          resp.Close();
         *          bmp.Dispose();
         *          resps.Close();
         *          resps.Dispose();
         *      }
         *      catch (HttpListenerException ht)
         *      {
         *          held = true;
         *          MessageBox.Show(ht.Message + " listener exception");
         *          Application.Exit();
         *          _no_error = true;
         *      }
         *      catch (ArgumentException ar)
         *      {
         *          held = true;
         *          MessageBox.Show(ar.TargetSite.ToString() + " arg except");
         *          _no_error = true;
         *      }
         *      catch (IOException ioe)
         *      {
         *          held = true;
         *          MessageBox.Show(ioe.Message + "ioexception");
         *          _no_error = true;
         *      }
         *      catch (WebException webex)
         *      {
         *          held = true;
         *          MessageBox.Show(webex.Message + "web exception");
         *          _no_error = true;
         *      }
         *      if (_no_error)
         *      {
         *          canClose = true;
         *          Application.Exit();
         *          Application.Restart();
         *      }
         *  }*/
        public void recFace(Bitmap ppp)
        {
            try
            {
                // IntPtr ff = IntPtr.Zero;//ppp.GetHbitmap();
                // FSDK.SaveImageToHBitmap(cimg, ref ff);
                //FSDK.LoadImageFromHBitmap(ref cimg, ff);
                //FSDK.SetFaceDetectionParameters(false, false, 500);
                //FSDK.SetFaceDetectionThreshold(2);

                FSDK.TFacePosition facePosition = new FSDK.TFacePosition();

                IntPtr hbitmapHandle = IntPtr.Zero;

                FSDK.SaveImageToHBitmap(cimg, ref hbitmapHandle);
                Image    ccimg = Image.FromHbitmap(hbitmapHandle);
                Graphics gr    = Graphics.FromImage(ccimg);
                fileName = (DateTime.Now.ToLongTimeString() + "__" + DateTime.Now.ToShortDateString()).Replace("/", "-").Replace(" ", "_").Replace(":", "-") + (new Random().Next(new Random().Next(100), new Random().Next(100, 1000))).ToString() + "__";
                if (FSDK.FSDKE_OK == FSDK.DetectFace(cimg, ref facePosition))
                {
                    gr.DrawRectangle(Pens.LightBlue, facePosition.xc - facePosition.w / 2, facePosition.yc - facePosition.w / 2,
                                     facePosition.w, facePosition.w);
                    byte[] tempd = new byte[FSDK.TemplateSize];
                    FSDK.GetFaceTemplateInRegion(cimg, ref facePosition, out tempd);
                    temp = System.Text.Encoding.ASCII.GetString(tempd);
                    if (check_reg(tempd))
                    {
                        StringFormat format = new StringFormat();
                        format.Alignment = StringAlignment.Center;
                        gr.DrawString(_name + " | " + _email, new System.Drawing.Font("Candara", 18),
                                      new System.Drawing.SolidBrush(System.Drawing.Color.LightBlue),
                                      facePosition.xc, facePosition.yc + facePosition.w * 0.55f, format);
                        fileName += _name;
                    }

                    //gp = ppp;
                    //                    timer3.Enabled = true;
                    //res(ppp);
                    _first_tick++;
                }
                else
                {
                    if (_first_tick < 20 && _first_tick != 0)
                    {
                        _first_tick++;
                        if (_first_tick == 19)
                        {
                            _first_tick = 0;
                        }
                        res(ppp);
                    }
                }
                if (!held)
                {
                    //  pictureBox1.Height = ccimg.Height;
                    //   pictureBox1.Width = ccimg.Width;
                    pictureBox1.Image = ccimg;
                }

                FSDK.FreeImage(cimg);
                DeleteObject(hbitmapHandle);
                GC.Collect();
                Application.DoEvents();
                //  new System.Threading.Thread(new System.Threading.ThreadStart(getStreams)).Start();
            }
            catch (NullReferenceException nulr)
            {
                MessageBox.Show(nulr.Message);
                canClose = true;
                Application.Exit();
                Application.Restart();
            }
            catch (ExternalException exp)
            {
            }
            catch (AccessViolationException acs)
            {
            }
        }
예제 #18
0
        private void button1_Click(object sender, EventArgs e)
        {
            this.button1.Enabled = false;
            int cameraHandle = 0;

            int r = FSDKCam.OpenVideoCamera(ref cameraName, ref cameraHandle);

            if (r != FSDK.FSDKE_OK)
            {
                MessageBox.Show("Error opening the first camera", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                Application.Exit();
            }

            int tracker = 0;

            FSDK.CreateTracker(ref tracker);

            int err = 0; // set realtime face detection parameters

            FSDK.SetTrackerMultipleParameters(tracker, "RecognizeFaces=false; DetectFacialFeatures=true; HandleArbitraryRotations=false; DetermineFaceRotationAngle=false; InternalResizeWidth=100; FaceDetectionThreshold=5;", ref err);

            this.button1.Hide();

            while (!needClose)
            {
                Int32 imageHandle = 0;
                if (FSDK.FSDKE_OK != FSDKCam.GrabFrame(cameraHandle, ref imageHandle)) // grab the current frame from the camera
                {
                    Application.DoEvents();
                    continue;
                }
                FSDK.CImage image = new FSDK.CImage(imageHandle);

                long[] IDs;
                long   faceCount = 0;
                FSDK.FeedFrame(tracker, 0, image.ImageHandle, ref faceCount, out IDs, sizeof(long) * 256); // maximum of 256 faces detected
                Array.Resize(ref IDs, (int)faceCount);

                Image    frameImage = image.ToCLRImage();
                Graphics gr         = Graphics.FromImage(frameImage);

                for (int i = 0; i < IDs.Length; ++i)
                {
                    FSDK.TFacePosition facePosition = new FSDK.TFacePosition();
                    FSDK.GetTrackerFacePosition(tracker, 0, IDs[i], ref facePosition);

                    FSDK.TPoint[] facialFeatures;
                    FSDK.GetTrackerFacialFeatures(tracker, 0, IDs[i], out facialFeatures);

                    int left = facePosition.xc - (int)(facePosition.w * 0.6);
                    int top  = facePosition.yc - (int)(facePosition.w * 0.5);
                    gr.DrawRectangle(Pens.LightGreen, left, top, (int)(facePosition.w * 1.2), (int)(facePosition.w * 1.2));

                    foreach (FSDK.TPoint point in facialFeatures)
                    {
                        gr.FillEllipse(Brushes.DarkBlue, point.x, point.y, 5, 5);
                    }
                }

                // display current frame
                pictureBox1.Image = frameImage;

                GC.Collect(); // collect the garbage after the deletion

                // make UI controls accessible
                Application.DoEvents();
            }
            FSDK.FreeTracker(tracker);

            FSDKCam.CloseVideoCamera(cameraHandle);
            FSDKCam.FinalizeCapturing();
        }
예제 #19
0
        private void btnStart_Click(object sender, EventArgs e)
        {
            this.btnStart.Enabled = false;

            //int FSDK.SetHTTPProxy("192.168.43.1:8080", 8080, "", "");
            //int r = FSDKCam.OpenIPVideoCamera(FSDKCam.FSDK_VIDEOCOMPRESSIONTYPE.FSDK_MJPEG, "192.168.43.1", "", "", 60, ref cameraHandle);
            int r = FSDKCam.OpenVideoCamera(ref cameraName, ref cameraHandle);

            if (r != FSDK.FSDKE_OK)
            {
                MessageBox.Show("Error opening the first camera", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                Application.Exit();
            }

            try
            {
                int tracker = 0;                                                                     // creating a Tracker
                if (FSDK.FSDKE_OK != FSDK.LoadTrackerMemoryFromFile(ref tracker, TrackerMemoryFile)) // try to load saved tracker state
                {
                    FSDK.CreateTracker(ref tracker);                                                 // if could not be loaded, create a new tracker
                }
                int err = 0;                                                                         // set realtime face detection parameters
                FSDK.SetTrackerMultipleParameters(tracker, "HandleArbitraryRotations=false; DetermineFaceRotationAngle=true; InternalResizeWidth=100; FaceDetectionThreshold=1;", ref err);
                FSDK.SetFaceDetectionParameters(false, true, 384);

                while (!needClose)
                {
                    Int32 imageHandle = 0;
                    if (FSDK.FSDKE_OK != FSDKCam.GrabFrame(cameraHandle, ref imageHandle)) // grab the current frame from the camera
                    {
                        Application.DoEvents();
                        continue;
                    }

                    FSDK.CImage image = new FSDK.CImage(imageHandle);

                    long[] IDs;
                    long   faceCount = 0;
                    FSDK.FeedFrame(tracker, cameraHandle, image.ImageHandle, ref faceCount, out IDs, sizeof(long) * 256); // maximum of 256 faces detected
                    Array.Resize(ref IDs, (int)faceCount);


                    // make UI controls accessible (to find if the user clicked on a face)
                    Application.DoEvents();

                    Image    frameImage = image.ToCLRImage();
                    Graphics gr         = Graphics.FromImage(frameImage);

                    for (int i = 0; i < IDs.Length; ++i)
                    {
                        FSDK.TFacePosition facePosition = new FSDK.TFacePosition();
                        FSDK.GetTrackerFacePosition(tracker, cameraHandle, IDs[i], ref facePosition);

                        int left = facePosition.xc - (int)(facePosition.w * 0.6);
                        int top  = facePosition.yc - (int)(facePosition.w * 0.5);
                        int w    = (int)(facePosition.w * 1.2);

                        string name;

                        TFaceRecord fIn = new TFaceRecord();

                        fIn.FacePosition   = new FSDK.TFacePosition();
                        fIn.FacialFeatures = new FSDK.TPoint[2];
                        fIn.Template       = new byte[FSDK.TemplateSize];

                        FSDK.CImage img = new FSDK.CImage(image.ImageHandle);
                        img = image.CopyRect((int)(facePosition.xc - Math.Round(facePosition.w * 0.5)), (int)(facePosition.yc - Math.Round(facePosition.w * 0.5)), (int)(facePosition.xc + Math.Round(facePosition.w * 0.5)), (int)(facePosition.yc + Math.Round(facePosition.w * 0.5)));

                        fIn.image        = img;
                        fIn.FacePosition = fIn.image.DetectFace();

                        fIn.faceImage      = fIn.image.CopyRect((int)(fIn.FacePosition.xc - Math.Round(fIn.FacePosition.w * 0.5)), (int)(fIn.FacePosition.yc - Math.Round(fIn.FacePosition.w * 0.5)), (int)(fIn.FacePosition.xc + Math.Round(fIn.FacePosition.w * 0.5)), (int)(fIn.FacePosition.yc + Math.Round(fIn.FacePosition.w * 0.5)));
                        fIn.FacialFeatures = fIn.image.DetectEyesInRegion(ref fIn.FacePosition);
                        fIn.Template       = fIn.image.GetFaceTemplateInRegion(ref fIn.FacePosition); // get template with higher precision


                        TFaceRecord fOut = new TFaceRecord();
                        //if (Fx.GetPerson(fIn, out fOut))
                        //{
                        //name = fOut.Fullname;

                        // draw name
                        //StringFormat format = new StringFormat();
                        //format.Alignment = StringAlignment.Center;

                        //lblPersons.Text = name;
                        // gr.DrawString(name, new Font("Arial", 16), new SolidBrush(Color.LightGreen), facePosition.xc, top + w + 5, format);

                        //}
                        //else
                        //{
                        //lblPersons.Text = "";

                        if (0 != fIn.FacePosition.w)
                        {
                            //img = new FSDK.CImage(image.ImageHandle);
                            //img = fIn.image.CopyRect((int)(facePosition.xc - Math.Round(facePosition.w * 0.5)), (int)(facePosition.yc - Math.Round(facePosition.w * 0.5)), (int)(facePosition.xc + Math.Round(facePosition.w * 0.5)), (int)(facePosition.yc + Math.Round(facePosition.w * 0.5)));
                            if (Global.AutomaticTaining)
                            {
                                InputName inputName = new InputName(fIn);
                                inputName.AutoSave();
                                userName = inputName.userName;
                            }
                            else
                            {
                                InputName inputName = new InputName(fIn);
                                if (DialogResult.OK == inputName.ShowDialog(this))
                                {
                                    userName = inputName.userName;
                                    if (userName == null || userName.Length <= 0)
                                    {
                                        String s = "";
                                    }
                                    else
                                    {
                                    }
                                }
                            }
                            //}
                        }

                        //int res = FSDK.GetAllNames(tracker, IDs[i], out name, 65536); // maximum of 65536 characters

                        /*/if (FSDK.FSDKE_OK == res && name.Length > 0)
                         * if (name.Length > 0)
                         * {
                         *  // draw name
                         *  //name = "Prince Daniel";
                         *  StringFormat format = new StringFormat();
                         *  format.Alignment = StringAlignment.Center;
                         *
                         *  gr.DrawString(name, new Font("Arial", 16), new SolidBrush(Color.LightGreen), facePosition.xc, top + w + 5, format);
                         * }
                         *
                         */

                        Pen pen = Pens.LightGreen;
                        if (mouseX >= left && mouseX <= left + w && mouseY >= top && mouseY <= top + w)
                        {
                            pen = Pens.Blue;
                            //programState = ProgramState.psRemember;
                            if (ProgramState.psRemember == programState)
                            {
                                //FSDK.CImage img = new FSDK.CImage(image.ImageHandle);
                                img = new FSDK.CImage(image.ImageHandle);
                                img = image.CopyRect((int)(facePosition.xc - Math.Round(facePosition.w * 0.5)), (int)(facePosition.yc - Math.Round(facePosition.w * 0.5)), (int)(facePosition.xc + Math.Round(facePosition.w * 0.5)), (int)(facePosition.yc + Math.Round(facePosition.w * 0.5)));

                                if (Global.AutomaticTaining)
                                {
                                    InputName inputName = new InputName(img);
                                    inputName.AutoSave();
                                    userName = inputName.userName;
                                }
                                else
                                {
                                    InputName inputName = new InputName(img);
                                    if (DialogResult.OK == inputName.ShowDialog(this))
                                    {
                                        userName = inputName.userName;
                                        if (userName == null || userName.Length <= 0)
                                        {
                                            String s = "";
                                        }
                                        else
                                        {
                                        }
                                    }
                                }
                            }
                        }


                        gr.DrawRectangle(pen, left, top, w, w);
                    }

                    programState = ProgramState.psRecognize;

                    // display current frame
                    imageBox.Image = frameImage;
                    GC.Collect(); // collect the garbage after the deletion
                }

                FSDKCam.CloseVideoCamera(cameraHandle);
                FSDKCam.FinalizeCapturing();
            }
            catch (Exception n)
            {
                Application.DoEvents();
            }
        }
예제 #20
0
        public FaceRecognitionResult MatchFace(Image <Bgr, byte> a_face)
        {
            try
            {
                if (a_face == null)
                {
                    throw new ArgumentNullException();
                }

                //CREATE A FACE OBJECT
                Face unknown_face = new Face();
                unknown_face.face_position   = new FacePosition();
                unknown_face.facial_features = new FSDK.TPoint[FSDK.FSDK_FACIAL_FEATURE_COUNT];
                unknown_face.face_template   = new byte[FSDK.TemplateSize];
                unknown_face.image           = new FSDK.CImage(a_face.ToBitmap());

                //GET THE POSITION OF THE FACE IN THE IAGE
                unknown_face.face_position = FacePosition.FromFSDK(unknown_face.image.DetectFace());
                unknown_face.face_image    = unknown_face.Clone().image;

                FSDK.TFacePosition face_pos = unknown_face.face_position.Clone();


                //CHECK IF A FACE HAS BEEN DETECTED
                if (0 == face_pos.w)
                {
                    face_pos = null;
                    Debug.WriteLine("No Face Found");
                    return(face_recog_results);
                }

                try
                {
                    FSDK.TFacePosition face_pos_1 = unknown_face.face_position.Clone();

                    //GET THE FACIAL FEATURES OF THE FACE LIKE EYES NOSE ETC
                    unknown_face.facial_features = unknown_face.Clone().image.DetectEyesInRegion(ref face_pos_1);

                    face_pos_1 = null;
                }
                catch (Exception) { }

                try
                {
                    FSDK.TFacePosition face_pos_2 = unknown_face.face_position.Clone();

                    //GET A TEMPLATE OF THE FACE TO BE USED FOR COMPARISON
                    unknown_face.face_template = unknown_face.Clone().image.GetFaceTemplateInRegion(ref face_pos_2);

                    face_pos_2 = null;
                }
                catch (Exception) { }

                //THRESHOLD INDICATING HOW SIMILAR THE TWO FACS MUST BE TO BE CONSIDERED SAME
                float similarity_threshold = 0.0f;

                //TO DETERMINE IF THE MATCHED TEMPLATES BELONG TO THE SAME PERSON (WITH A SPECIFIED ERROR POSSIBILITY),
                //YOU CAN COMPARE THE FACIAL SIMILARITY VALUE WITH A THRESHOLD CALCULATED BY
                FSDK.GetMatchingThresholdAtFAR(FARValue / 100, ref similarity_threshold);

                //NUMBER OF MATCHES FOUND
                int matches_count = 0;

                //COUNT OF ALL FACES ENROLLED
                int faces_count = known_faces_list.Count;

                //HOLDS A FLOAT INDICATING HOW SIMILAR GIVEN FACE IS TO THAT IN THE SAME INDEX IN THE FACE_LIST
                float[] similarities = new float[faces_count];
                int[]   numbers      = new int[faces_count];

                List <KeyValuePair <Face, float> > face_to_similarity_map = new List <KeyValuePair <Face, float> >();

                //LOOP THRU THE KNOWN FACES COMPARING EACH FACE WITH THE UNKNOWN FACE
                for (int i = 0; i < known_faces_list.Count; i++)
                {
                    //VALUE INDICATING HOW SIMILAR THE 2 FACES ARE
                    float similarity = 0.0f;

                    //GET THE NEXT FACE IN THE FACE_LIST
                    Face next_face = known_faces_list[i];

                    //GET TEMPLATES FOR BOTH THE UNKNOWN FACE AND NEXT FACE
                    Byte[] unknown_face_template = unknown_face.face_template;
                    Byte[] known_face_template   = next_face.face_template;

                    //COMPARE THE 2 FACES FOR SIMILARITY BETWEEN THEM
                    FSDK.MatchFaces(ref unknown_face_template, ref known_face_template, ref similarity);

                    unknown_face_template = null;
                    known_face_template   = null;

                    if (similarity >= similarity_threshold)
                    {
                        similarities[matches_count] = similarity;
                        numbers[matches_count]      = i;
                        face_to_similarity_map.Add(new KeyValuePair <Face, float>(next_face, similarity));
                        ++matches_count;
                    }
                }

                //Dispose of Face

                //SORT THE SIMILARITIES IN DESCENDING ORDER INORDERTO FIND THE MOST SIMILAR FACE
                FloatsDescendingOrder floats_descending_order = new FloatsDescendingOrder();
                Array.Sort(similarities, numbers, 0, matches_count, (IComparer <float>)floats_descending_order);

                //GET THE PERPETRATOR ASSOCIATED WITH THE FACE
                face_recog_results = new FaceRecognitionResult();
                face_recog_results = GetOfMostSimilarFace(similarities, face_to_similarity_map);
                face_recog_results.original_detected_face = a_face;
                face_to_similarity_map = null;

                //RETURN RESULTS OF FACE RECOGNITION OPERATION
                return(face_recog_results);
            }
            catch (Exception e)
            {
                Debug.WriteLine(e.Message);
            }
            return(face_recog_results);
        }
예제 #21
0
파일: Form1.cs 프로젝트: fadly016/FER
        public void proses()
        {
            Pen            p1   = new Pen(Color.LightGreen, 2);
            OpenFileDialog open = new OpenFileDialog();

            open.Filter = "Image Files(*.jpg; *bmp; *.png; *.tiff; *.gif)| *.jpg; *.bmp; *.png; *.tiff; *.gif";
            if (open.ShowDialog() == DialogResult.OK)
            {
            }

            FSDK.CImage image = new FSDK.CImage(open.FileName);
            double      ratio = System.Math.Min((pictureBox.Width + 0.4) / image.Width, pictureBox.Height + 0.4 / image.Height);

            image = image.Resize(ratio);
            Image    frameImage       = image.ToCLRImage();
            Graphics graphicFromImage = Graphics.FromImage(frameImage);

            pictureBox.Image = new Bitmap(frameImage);


            FSDK.TFacePosition facePosition   = image.DetectFace();
            FSDK.TPoint[]      facialFeatures = image.DetectFacialFeaturesInRegion(ref facePosition);

            if (0 == facePosition.w)
            {
                MessageBox.Show("No Face detected", "Face Detected");
            }
            else
            {
                left   = facePosition.xc - facePosition.w / 2;
                top    = facePosition.yc - facePosition.w / 2;
                width  = facePosition.w;
                height = facePosition.w + 50;

                graphicFromImage.DrawRectangle(p1, left, top, width, height);

                int i = 0;
                foreach (FSDK.TPoint point in facialFeatures)
                {
                    {
                        graphicFromImage.DrawEllipse((++i > 3) ? Pens.Yellow : Pens.Blue, point.x, point.y, 3, 3);
                    }
                    // richTextBoxForPicture.Text += i.ToString() + "." + point.x.ToString() + ", " + point.y.ToString() + Environment.NewLine;
                }
                graphicFromImage.Flush();
                pictureBox.Image = frameImage;
                pictureBox.Refresh();



                /// ==========================================================================================
                ///

                /*
                 * FSDK.CImage croppedImage = image.CopyRect(left, top, left + width - 1, top + height - 1);
                 * pictureBoxCropped.Image = croppedImage.ToCLRImage();
                 * pictureBoxCropped.SizeMode = PictureBoxSizeMode.Zoom;
                 * pictureBoxCropped.Refresh();
                 *
                 * int a = 30;
                 *
                 * FSDK.CImage eyeImage = image.CopyRect(facialFeatures[0].x-a, facialFeatures[0].y - a, facialFeatures[0].x + a, facialFeatures[0].y + a);
                 * pictureBox1.Image = eyeImage.ToCLRImage();
                 * pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;
                 * pictureBox1.Refresh();
                 *
                 * FSDK.CImage eyeRImage = image.CopyRect(facialFeatures[1].x - a, facialFeatures[1].y - a, facialFeatures[1].x + a, facialFeatures[1].y + a);
                 * pictureBox2.Image = eyeRImage.ToCLRImage();
                 * pictureBox2.SizeMode = PictureBoxSizeMode.Zoom;
                 * pictureBox2.Refresh();
                 *
                 * FSDK.CImage noseImage = image.CopyRect(facialFeatures[2].x - a, facialFeatures[2].y - a, facialFeatures[2].x + a, facialFeatures[2].y + a);
                 * pictureBox3.Image = noseImage.ToCLRImage();
                 * pictureBox3.SizeMode = PictureBoxSizeMode.Zoom;
                 * pictureBox3.Refresh();
                 *
                 * FSDK.CImage uppermouthImage = image.CopyRect(facialFeatures[64].x - a, facialFeatures[64].y - a, facialFeatures[64].x + a, facialFeatures[64].y);
                 * pictureBox6.Image = uppermouthImage.ToCLRImage();
                 * pictureBox6.SizeMode = PictureBoxSizeMode.Zoom;
                 * pictureBox6.Refresh();
                 *
                 * FSDK.CImage lowmouthImage = image.CopyRect(facialFeatures[64].x - a, facialFeatures[64].y , facialFeatures[64].x + a, facialFeatures[64].y + a);
                 * pictureBox4.Image = lowmouthImage.ToCLRImage();
                 * pictureBox4.SizeMode = PictureBoxSizeMode.Zoom;
                 * pictureBox4.Refresh();
                 *
                 * FSDK.CImage dagu = image.CopyRect(facialFeatures[11].x - (a+20), facialFeatures[11].y - a, facialFeatures[11].x + a + 20, facialFeatures[11].y + a);
                 * pictureBox5.Image = dagu.ToCLRImage();
                 * pictureBox5.SizeMode = PictureBoxSizeMode.Zoom;
                 * pictureBox5.Refresh();
                 *
                 * FSDK.CImage nasolabialright = image.CopyRect(facialFeatures[53].x , facialFeatures[53].y - a, facialFeatures[53].x + a, facialFeatures[53].y + a);
                 * pictureBox7.Image = nasolabialright.ToCLRImage();
                 * pictureBox7.SizeMode = PictureBoxSizeMode.Zoom;
                 * pictureBox7.Refresh();
                 *
                 * FSDK.CImage nasolabialleft = image.CopyRect(facialFeatures[52].x - (a), facialFeatures[52].y - a, facialFeatures[52].x, facialFeatures[52].y + a);
                 * pictureBox8.Image = nasolabialleft.ToCLRImage();
                 * pictureBox8.SizeMode = PictureBoxSizeMode.Zoom;
                 * pictureBox8.Refresh();
                 *
                 * FSDK.CImage eyebrowleft = image.CopyRect(facialFeatures[19].x - a, facialFeatures[19].y - a, facialFeatures[19].x + a, facialFeatures[19].y+10);
                 * pictureBox9.Image = eyebrowleft.ToCLRImage();
                 * pictureBox9.SizeMode = PictureBoxSizeMode.Zoom;
                 * pictureBox9.Refresh();
                 *
                 * FSDK.CImage eyebrowright = image.CopyRect(facialFeatures[20].x - a, facialFeatures[20].y - a, facialFeatures[20].x + a, facialFeatures[20].y+10);
                 * pictureBox10.Image = eyebrowright.ToCLRImage();
                 * pictureBox10.SizeMode = PictureBoxSizeMode.Zoom;
                 * pictureBox10.Refresh();
                 */
            }
            pictureBox.SizeMode  = PictureBoxSizeMode.Normal;
            pictureBox1.SizeMode = PictureBoxSizeMode.Normal;


            /// Gambar 2
            /// =========================================================================================



            if (open.ShowDialog() == DialogResult.OK)
            {
                FSDK.CImage img = new FSDK.CImage(open.FileName);

                double rat = System.Math.Min((pictureBox1.Width + 0.4) / img.Width, pictureBox1.Height + 0.4 / img.Height);
                img = img.Resize(rat);


                Image    frameI  = img.ToCLRImage();
                Graphics graphic = Graphics.FromImage(frameI);
                pictureBox1.Image = new Bitmap(frameI);
                FSDK.TFacePosition facePos = img.DetectFace();
                FSDK.TPoint[]      facialF = img.DetectFacialFeaturesInRegion(ref facePos);

                if (0 == facePos.w)
                {
                    MessageBox.Show("No Face detected", "Face Detected");
                }
                else
                {
                    left   = facePos.xc - facePos.w / 2;
                    top    = facePos.yc - facePos.w / 2;
                    width  = facePos.w;
                    height = facePos.w + 50;

                    graphic.DrawRectangle(p1, left, top, width, height);

                    int      i    = 0;
                    double[] temp = new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
                    foreach (FSDK.TPoint point in facialF)
                    {
                        {
                            graphic.DrawEllipse((++i > 3) ? Pens.Yellow : Pens.Blue, point.x, point.y, 3, 3);
                        }
                        if (i == 12 || i == 18 || i == 16 || i == 19 || i == 13)// Left eyebrow
                        {
                            int x = point.x - facialFeatures[i - 1].x;
                            int y = point.y - facialFeatures[i - 1].y;
                            temp[0] += Math.Sqrt((x * x) + (y * y));
                        }
                        else if (i == 14 || i == 20 || i == 17 || i == 21 || i == 15)// Right eyebrow
                        {
                            int x = point.x - facialFeatures[i - 1].x;
                            int y = point.y - facialFeatures[i - 1].y;
                            temp[1] += Math.Sqrt((x * x) + (y * y));
                        }
                        else if (i == 23 || i == 35 || i == 28 || i == 36 || i == 24 || i == 38 || i == 27 || i == 37)// Left eye
                        {
                            int x = point.x - facialFeatures[i - 1].x;
                            int y = point.y - facialFeatures[i - 1].y;
                            temp[2] += Math.Sqrt((x * x) + (y * y));
                        }
                        else if (i == 30 || i == 32 || i == 40 || i == 26 || i == 42 || i == 31 || i == 41 || i == 25)// Right eye
                        {
                            int x = point.x - facialFeatures[i - 1].x;
                            int y = point.y - facialFeatures[i - 1].y;
                            temp[3] += Math.Sqrt((x * x) + (y * y));
                        }
                        else if (i == 22 || i == 43 || i == 45 || i == 47 || i == 49 || i == 48 || i == 46 || i == 44)// Nose
                        {
                            int x = point.x - facialFeatures[i - 1].x;
                            int y = point.y - facialFeatures[i - 1].y;
                            temp[4] += Math.Sqrt((x * x) + (y * y));
                        }
                        else if (i == 50 || i == 52) //Left Cheek
                        {
                            int x = point.x - facialFeatures[i - 1].x;
                            int y = point.y - facialFeatures[i - 1].y;
                            temp[5] += Math.Sqrt((x * x) + (y * y));
                        }
                        else if (i == 51 || i == 53)//Right Cheek
                        {
                            int x = point.x - facialFeatures[i - 1].x;
                            int y = point.y - facialFeatures[i - 1].y;
                            temp[9] += Math.Sqrt((x * x) + (y * y));
                        }
                        else if (i == 56 || i == 54 || i == 57 || i == 61 || i == 60 || i == 62)// upper mouth 61 60 62
                        {
                            int x = point.x - facialFeatures[i - 1].x;
                            int y = point.y - facialFeatures[i - 1].y;
                            temp[6] += Math.Sqrt((x * x) + (y * y));
                        }
                        else if (i == 58 || i == 55 || i == 59 || i == 64 || i == 63 || i == 65)// lower mouth  64   63 65
                        {
                            int x = point.x - facialFeatures[i - 1].x;
                            int y = point.y - facialFeatures[i - 1].y;
                            temp[7] += Math.Sqrt((x * x) + (y * y));
                        }
                        else if (i == 3 || i == 4)// mouth
                        {
                            int x = point.x - facialFeatures[i - 1].x;
                            int y = point.y - facialFeatures[i - 1].y;
                            temp[6] += Math.Sqrt((x * x) + (y * y));
                            temp[7] += Math.Sqrt((x * x) + (y * y));
                        }
                        else if (i == 5 || i == 7 || i == 9 || i == 11 || i == 10 || i == 8 || i == 6)// chin
                        {
                            int x = point.x - facialFeatures[i - 1].x;
                            int y = point.y - facialFeatures[i - 1].y;
                            temp[8] += Math.Sqrt((x * x) + (y * y));
                        }
                        // richTextBoxForPicture.Text += i.ToString() + "." + point.x.ToString() + ", " + point.y.ToString() + Environment.NewLine;
                    }
                    graphic.Flush();
                    eucLEyeB.Text  = temp[0].ToString();
                    eucREyeB.Text  = temp[1].ToString();
                    eucLEye.Text   = temp[2].ToString();
                    eucREye.Text   = temp[3].ToString();
                    eucnose.Text   = temp[4].ToString();
                    eucpipi.Text   = temp[5].ToString();
                    eucUmouth.Text = temp[6].ToString();
                    eucLmouth.Text = temp[7].ToString();
                    eucchin.Text   = temp[8].ToString();
                    Rcheck.Text    = temp[9].ToString();

                    double avg = 0;
                    avg         = (temp[0] + temp[1] + temp[2] + temp[3] + temp[4] + temp[5] + temp[6] + temp[7] + temp[8] + temp[9]) / 10;
                    avgbox.Text = avg.ToString();
                }
                pictureBox1.Image = frameI;
                pictureBox1.Refresh();
            }
        }
예제 #22
0
        private void button1_Click(object sender, EventArgs e)
        {
            this.button1.Enabled = false;
            int cameraHandle = 0;

            int r = FSDKCam.OpenVideoCamera(ref cameraName, ref cameraHandle);

            if (r != FSDK.FSDKE_OK)
            {
                MessageBox.Show("Error opening the first camera", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                Application.Exit();
            }


            // set realtime face detection parameters
            FSDK.SetFaceDetectionParameters(false, false, 100);
            FSDK.SetFaceDetectionThreshold(3);

            // list where we store face templates
            // faceTemplates = new List();
            faceTemplates = new List <FaceTemplate>();


            while (!needClose)
            {
                // faceTemplates.Clear();

                Int32 imageHandle = 0;
                if (FSDK.FSDKE_OK != FSDKCam.GrabFrame(cameraHandle, ref imageHandle)) // grab the current frame from the camera
                {
                    Application.DoEvents();
                    continue;
                }

                FSDK.CImage image = new FSDK.CImage(imageHandle);

                Image    frameImage = image.ToCLRImage();
                Graphics gr         = Graphics.FromImage(frameImage);

                FSDK.TFacePosition facePosition = image.DetectFace();
                // if a face is detected, we can recognize it
                if (facePosition.w != 0)
                {
                    gr.DrawRectangle(Pens.LightGreen, facePosition.xc - facePosition.w / 2, facePosition.yc - facePosition.w / 2,
                                     facePosition.w, facePosition.w);

                    // create a new face template
                    FaceTemplate template = new FaceTemplate();

                    template.templateData = new byte[FSDK.TemplateSize];
                    FaceTemplate template1 = new FaceTemplate();
                    if (programState == ProgramState.psRemember || programState == ProgramState.psRecognize)
                    {
                        template.templateData = image.GetFaceTemplateInRegion(ref facePosition);
                    }


                    switch (programState)
                    {
                    case ProgramState.psNormal:     // normal state - do nothing
                        break;

                    case ProgramState.psRemember:     // Remember Me state - store facial templates

                        label1.Text = "Templates stored: " + faceTemplates.Count.ToString();
                        faceTemplates.Add(template);
                        if (faceTemplates.Count > 9)
                        {
                            // get the user name
                            InputName inputName = new InputName();
                            inputName.ShowDialog();
                            userName = inputName.userName;



                            cmd = new SqlCommand("insert into facetb values(@Name,@face)", con);
                            cmd.Parameters.AddWithValue("@Name", userName);

                            cmd.Parameters.AddWithValue("@face", template.templateData);

                            con.Open();
                            cmd.ExecuteNonQuery();
                            con.Close();
                            MessageBox.Show("Record Save!");

                            programState = ProgramState.psRecognize;
                        }
                        break;

                    case ProgramState.psRecognize:     // recognize the user
                        bool match = false;


                        con.Open();
                        cmd = new SqlCommand("select * from facetb ORDER BY id ASC ", con);
                        SqlDataReader dr = cmd.ExecuteReader();
                        while (dr.Read())
                        {
                            template1.templateData = (byte[])dr["face"];
                            faceTemplates.Add(template1);


                            strList.Add(dr["Name"].ToString());
                        }
                        con.Close();



                        int ii = 0;

                        foreach (FaceTemplate t in faceTemplates)
                        {
                            float        similarity = 0.0f;
                            FaceTemplate t1         = t;
                            FSDK.MatchFaces(ref template.templateData, ref t1.templateData, ref similarity);
                            float threshold = 0.0f;
                            FSDK.GetMatchingThresholdAtFAR(0.01f, ref threshold);     // set FAR to 1%
                            if (similarity > threshold)
                            {
                                userName = strList[ii].ToString();

                                label3.Text = strList[ii].ToString();
                                match       = true;
                                break;
                            }

                            ii++;
                        }

                        con.Close();



                        if (match)
                        {
                            StringFormat format = new StringFormat();
                            format.Alignment = StringAlignment.Center;

                            gr.DrawString(userName, new System.Drawing.Font("Arial", 16),
                                          new System.Drawing.SolidBrush(System.Drawing.Color.LightGreen),
                                          facePosition.xc, facePosition.yc + facePosition.w * 0.55f, format);
                            // abc = 0;
                            send();
                        }

                        else
                        {
                            abc         = 0;
                            label3.Text = "UnKnow FACE";
                        }
                        break;
                    }
                }

                // display current frame
                pictureBox1.Image = frameImage;

                GC.Collect(); // collect the garbage after the deletion

                // make UI controls accessible
                Application.DoEvents();
            }

            FSDKCam.CloseVideoCamera(cameraHandle);
            FSDKCam.FinalizeCapturing();
        }
예제 #23
0
        public static Rectangle ToRectangle(this FSDK.TFacePosition tfp)
        {
            int halfWidth = tfp.w / 2;

            return(new Rectangle(tfp.xc - halfWidth, tfp.yc - halfWidth, tfp.w, tfp.w));
        }
예제 #24
0
        private void picImg_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Do You Want To Change This Pciture?", "Ïntrusion Detection", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes)
            {
                return;
            }

            try
            {
                openFileDialog.InitialDirectory = @"C:\";
                openFileDialog.RestoreDirectory = false;
                openFileDialog.Title            = "Select Passport Photo";
                openFileDialog.Filter           = "Images Files (*.BMP;*.JPG;*.GIF,*.PNG,*.TIFF)|*.BMP;*.JPG;*.GIF;*.PNG;*.TIFF";

                openFileDialog.CheckFileExists = true;
                openFileDialog.CheckPathExists = true;


//                openFileDialog.ShowDialog();

                if (openFileDialog.ShowDialog() == DialogResult.OK)
                {
                    try
                    {
                        FSDK.CImage image = new FSDK.CImage(openFileDialog.FileName);

                        // resize image to fit the window width
                        double ratio = System.Math.Min((picImg.Width + 0.4) / image.Width,
                                                       (picImg.Height + 0.4) / image.Height);
                        image = image.Resize(ratio);

                        Image    frameImage = image.ToCLRImage();
                        Graphics gr         = Graphics.FromImage(frameImage);

                        FSDK.TFacePosition facePosition = image.DetectFace();
                        if (0 == facePosition.w)
                        {
                            MessageBox.Show("No faces detected", "Face Detection");
                        }
                        else
                        {
                            int left = facePosition.xc - (int)(facePosition.w * 0.6f);
                            int top  = facePosition.yc - (int)(facePosition.w * 0.5f);
                            gr.DrawRectangle(Pens.LightGreen, left, top, (int)(facePosition.w * 1.2), (int)(facePosition.w * 1.2));


                            faceTemplate = new byte[FSDK.TemplateSize];
                            FSDK.GetFaceTemplateInRegion(image.ImageHandle, ref facePosition, out faceTemplate);
                            //GetFaceTemplate(image, out templateData);


                            FSDK.TPoint[] facialFeatures = image.DetectFacialFeaturesInRegion(ref facePosition);
                            int           i = 0;
                            foreach (FSDK.TPoint point in facialFeatures)
                            {
                                gr.DrawEllipse((++i > 2) ? Pens.LightGreen : Pens.Blue, point.x, point.y, 3, 3);
                            }

                            gr.Flush();
                        }

                        // display image
                        picImg.Image = frameImage;
                        picImg.Refresh();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message, "Exception");
                    }
                }

                //picImg.Image = Image.FromFile(openFileDialog.FileName);
            }
            catch (Exception q)
            {
            }
        }
예제 #25
0
        private void Capturar()
        {
            this.button1.Enabled = false;
            int cameraHandle = 0;

            int r = FSDKCam.OpenVideoCamera(ref cameraName, ref cameraHandle);

            Debug.WriteLine("cameraName: " + cameraName);
            Debug.WriteLine("cameraHandle: " + cameraHandle);
            Debug.WriteLine("r: " + r);


            if (r != FSDK.FSDKE_OK)
            {
                MessageBox.Show("Error opening the first camera", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                Application.Exit();
            }

            int tracker = 0;

            // creating a Tracker
            if (FSDK.FSDKE_OK != FSDK.LoadTrackerMemoryFromFile(ref tracker, TrackerMemoryFile)) // try to load saved tracker state
            {
                FSDK.CreateTracker(ref tracker);                                                 // if could not be loaded, create a new tracker
            }
            int err = 0;                                                                         // set realtime face detection parameters

            FSDK.SetTrackerMultipleParameters(tracker, "HandleArbitraryRotations=false; DetermineFaceRotationAngle=false; InternalResizeWidth=100; FaceDetectionThreshold=5;", ref err);

            while (!needClose)
            {
                Int32 imageHandle = 0;
                if (FSDK.FSDKE_OK != FSDKCam.GrabFrame(cameraHandle, ref imageHandle)) // grab the current frame from the camera
                {
                    Application.DoEvents();
                    continue;
                }

                FSDK.CImage image = new FSDK.CImage(imageHandle);


                long[] IDs;
                long   faceCount = 0;
                FSDK.FeedFrame(tracker, 0, image.ImageHandle, ref faceCount, out IDs, sizeof(long) * 256); // maximum of 256 faces detected
                Array.Resize(ref IDs, (int)faceCount);

                // make UI controls accessible (to find if the user clicked on a face)
                Application.DoEvents();

                Image    frameImage = image.ToCLRImage();
                Graphics gr         = Graphics.FromImage(frameImage);
                //pictureBox2.Image = frameImage;

                if (IDs.Length == 0)
                {
                    LimpiarCampos();
                }

                for (int i = 0; i < IDs.Length; ++i)
                {
                    //Debug.WriteLine("Cant: " + IDs.Length);
                    FSDK.TFacePosition facePosition = new FSDK.TFacePosition();
                    FSDK.GetTrackerFacePosition(tracker, 0, IDs[i], ref facePosition);

                    int left = facePosition.xc - (int)(facePosition.w * 0.6);
                    int top  = facePosition.yc - (int)(facePosition.w * 0.5);
                    int w    = (int)(facePosition.w * 1.2);

                    String name;
                    int    res = FSDK.GetAllNames(tracker, IDs[i], out name, 65536); // maximum of 65536 characters

                    //DETECCION

                    if (FSDK.FSDKE_OK == res)
                    { // draw name
                        if (name.Length <= 0)
                        {
                            name    = "Desconocido";
                            usuario = new Usuario();
                            LimpiarCampos();
                        }
                        else
                        {
                            usuario = BuscarUsuario(name);
                            CarcarCampos(usuario);
                            name = usuario.Nombre + " " + usuario.Apellido;
                            if (textBoxP.Text == "")
                            {
                                return;
                            }
                            BuscarTiporId();
                        }

                        StringFormat format = new StringFormat();
                        format.Alignment = StringAlignment.Center;

                        gr.DrawString(name, new Font("Century Gothic", 16, FontStyle.Bold),
                                      new SolidBrush(Color.LightGreen),
                                      facePosition.xc, top + w + 5, format);
                    }


                    //REGISTRO
                    Pen pen = Pens.DarkGreen;
                    //if (mouseX >= left && mouseX <= left + w && mouseY >= top && mouseY <= top + w)
                    //{
                    //    pen = Pens.DarkBlue;
                    //    if (ProgramState.psRemember == programState)
                    //    {
                    //        if (FSDK.FSDKE_OK == FSDK.LockID(tracker, IDs[i]))
                    //        {
                    //            // get the user name
                    //            ////CamposBloqueados(false);
                    //            //Debug.WriteLine("desbloqueo campos");
                    //            //Debug.WriteLine("estaGuar: " + estaGuardado);

                    //            inputDatos inputDatos = new inputDatos();
                    //            bool nuevoUsuario = false;

                    //            if (usuario.Id <= 0)
                    //            {
                    //                Debug.WriteLine("Nuevo usuario");
                    //                nuevoUsuario = true;
                    //            }
                    //            else
                    //            {
                    //                Debug.WriteLine("Nombre: " + usuario.Nombre + "\tCedula: " + usuario.Cedula);
                    //                inputDatos.setDatos(usuario);
                    //                nuevoUsuario = false;
                    //            }



                    //            if (DialogResult.OK == inputDatos.ShowDialog())
                    //            //if (estaGuardado)
                    //            {
                    //                Debug.WriteLine("entró if");
                    //                //userName = textBox_cedula.Text;
                    //                usuario = inputDatos.usuario;

                    //                //userName = inputName.userName;
                    //                userName = usuario.Cedula;

                    //                if (userName == null || userName.Length <= 0)
                    //                {
                    //                    String s = "";
                    //                    FSDK.SetName(tracker, IDs[i], "");
                    //                    FSDK.PurgeID(tracker, IDs[i]);
                    //                }
                    //                else
                    //                {
                    //                    FSDK.SetName(tracker, IDs[i], userName);
                    //                }
                    //                FSDK.UnlockID(tracker, IDs[i]);

                    //                usuario.Imagen = frameImage;

                    //                if (nuevoUsuario)
                    //                {
                    //                    usuario = Usuario_Datos.insertUsuario(usuario);
                    //                    MessageBox.Show("Registro guardado correctamente");
                    //                }
                    //                else
                    //                {
                    //                    Debug.WriteLine("id: " + usuario.Id);
                    //                    Debug.WriteLine("ced: " + usuario.Cedula);
                    //                    usuario = Usuario_Datos.updateUsuario(usuario);
                    //                    MessageBox.Show("Registro actualizado correctamente");
                    //                }

                    //                CargarUsuarioDB();

                    //                //CamposBloqueados(true);
                    //            }
                    //            estaGuardado = false;
                    //        }
                    //    }
                    //}

                    gr.DrawRectangle(pen, left, top, w, w);
                }
                programState = ProgramState.psRecognize;

                // display current frame
                pictureBox1.Image = frameImage;
                GC.Collect(); // collect the garbage after the deletion
            }

            FSDK.SaveTrackerMemoryToFile(tracker, TrackerMemoryFile);
            FSDK.FreeTracker(tracker);


            FSDKCam.CloseVideoCamera(cameraHandle);
            FSDKCam.FinalizeCapturing();
            // BuscarTiporId();
        }
예제 #26
0
        private void visorCamaraLuxand_Shown(object sender, EventArgs e)
        {
            #region liveRecognition
            int cameraHandle = 0;
            int r            = FSDKCam.OpenVideoCamera(ref cameraName, ref cameraHandle);
            if (r != FSDK.FSDKE_OK)
            {
                MessageBox.Show("Error opening the first camera", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                Application.Exit();
            }
            int tracker = 0;                                                                     // creating a Tracker
            if (FSDK.FSDKE_OK != FSDK.LoadTrackerMemoryFromFile(ref tracker, TrackerMemoryFile)) // try to load saved tracker state
            {
                FSDK.CreateTracker(ref tracker);                                                 // if could not be loaded, create a new tracker
            }
            int err = 0;                                                                         // set realtime face detection parameters
            FSDK.SetTrackerMultipleParameters(tracker, "HandleArbitraryRotations=false; DetermineFaceRotationAngle=false; InternalResizeWidth=100; FaceDetectionThreshold=5;", ref err);
            while (!needClose)
            {
                Int32 imageHandle = 0;
                if (FSDK.FSDKE_OK != FSDKCam.GrabFrame(cameraHandle, ref imageHandle)) // grab the current frame from the camera
                {
                    Application.DoEvents();
                    continue;
                }
                FSDK.CImage image = new FSDK.CImage(imageHandle);
                long[]      IDs;
                long        faceCount = 0;
                FSDK.FeedFrame(tracker, 0, image.ImageHandle, ref faceCount, out IDs, sizeof(long) * 256); // maximum of 256 faces detected
                Array.Resize(ref IDs, (int)faceCount);
                // make UI controls accessible (to find if the user clicked on a face)
                Application.DoEvents();
                Image    frameImage = image.ToCLRImage();
                Graphics gr         = Graphics.FromImage(frameImage);
                for (int i = 0; i < IDs.Length; ++i)
                {
                    FSDK.TFacePosition facePosition = new FSDK.TFacePosition();
                    FSDK.GetTrackerFacePosition(tracker, 0, IDs[i], ref facePosition);
                    int    left = facePosition.xc - (int)(facePosition.w * 0.6);
                    int    top  = facePosition.yc - (int)(facePosition.w * 0.5);
                    int    w    = (int)(facePosition.w * 1.2);
                    String name = this.nombre + " Edad: " + this.edad + " Puesto: " + this.puesto;
                    //String name;
                    //String nombre;
                    int res = FSDK.GetAllNames(tracker, IDs[i], out nombre, 65536); // maximum of 65536 characters
                    if (FSDK.FSDKE_OK == res && name.Length > 0)
                    {                                                               // draw name
                        StringFormat format = new StringFormat();
                        format.Alignment = StringAlignment.Center;
                        gr.DrawString(name, new System.Drawing.Font("Arial", 16),
                                      new System.Drawing.SolidBrush(System.Drawing.Color.LightGreen),
                                      facePosition.xc, top + w + 5, format);
                    }
                    Pen pen = Pens.LightGreen;
                    if (mouseX >= left && mouseX <= left + w && mouseY >= top && mouseY <= top + w)
                    {
                        pen = Pens.Blue;
                        if (ProgramState.psRemember == programState)
                        {
                            if (FSDK.FSDKE_OK == FSDK.LockID(tracker, IDs[i]))
                            {
                                // get the user name
                                InputName inputName = new InputName();
                                if (DialogResult.OK == inputName.ShowDialog())
                                {
                                    userName = inputName.userName;

                                    /**********************************
                                    *  extraemos data del form input name
                                    **********************************/
                                    string nombre    = inputName.userName;
                                    string a_paterno = inputName.userPaterno;
                                    string a_materno = inputName.userMaterno;
                                    string genero    = inputName.userGenero;
                                    string edad      = inputName.userEdad;
                                    string rol       = inputName.userRol;
                                    string puesto    = inputName.userPuesto;
                                    string correo    = inputName.userCorreo;

                                    /*******************************************
                                    *  guardamos los datos en la tabla de usuarios
                                    *******************************************/
                                    fnRegistraUsuarioBD(nombre, a_paterno, a_materno, genero, edad, rol, puesto, correo);
                                    if (userName == null || userName.Length <= 0)
                                    {
                                        String s = "";
                                        FSDK.SetName(tracker, IDs[i], "");
                                        FSDK.PurgeID(tracker, IDs[i]);
                                    }
                                    else
                                    {
                                        FSDK.SetName(tracker, IDs[i], userName);
                                    }
                                    FSDK.UnlockID(tracker, IDs[i]);
                                }
                            }
                        }
                    }
                    gr.DrawRectangle(pen, left, top, w, w);
                }
                programState = ProgramState.psRecognize;
                // display current frame
                pictureBox1.Image = frameImage;
                GC.Collect(); // collect the garbage after the de
            }
            FSDK.SaveTrackerMemoryToFile(tracker, TrackerMemoryFile);
            FSDK.FreeTracker(tracker);
            FSDKCam.CloseVideoCamera(cameraHandle);
            FSDKCam.FinalizeCapturing();
            #endregion
        }
예제 #27
0
        void webCam()
        {
            if (pictureBox1.InvokeRequired)
            {
                pictureBox1.Invoke(new MethodInvoker(webCam));//new ThreadStart(webCam));
                return;
            }
            pictureBox1.Width  = Fitems.CamX;
            pictureBox1.Height = Fitems.CamY;
            int cameraHandle = Fitems.cameraN;

            FSDK.TFacePosition facePosition = new FSDK.TFacePosition();
            while (!needClose)
            {
                Int32 imageHandle = 0;
                if (FSDK.FSDKE_OK != FSDKCam.GrabFrame(cameraHandle, ref imageHandle)) // grab the current frame from the camera
                {
                    Application.DoEvents();
                    continue;
                }
                IntPtr hbitmapHandle = IntPtr.Zero; // to store the HBITMAP handle
                FSDK.SaveImageToHBitmap(imageHandle, ref hbitmapHandle);

                Image    frameImage = Image.FromHbitmap(hbitmapHandle);
                Graphics gr         = Graphics.FromImage(frameImage);

                fileName = (DateTime.Now.ToLongTimeString() + "__" + DateTime.Now.ToShortDateString()).Replace("/", "-").Replace(" ", "_").Replace(":", "-") + (new Random().Next(new Random().Next(100), new Random().Next(100, 1000))).ToString();
                if (FSDK.FSDKE_OK == FSDK.DetectFace(imageHandle, ref facePosition))
                {
                    gr.DrawRectangle(Pens.Purple, facePosition.xc - facePosition.w / 2, facePosition.yc - facePosition.w / 2,
                                     facePosition.w, facePosition.w);
                    byte[] tempd = new byte[FSDK.TemplateSize];
                    FSDK.GetFaceTemplateInRegion(imageHandle, ref facePosition, out tempd);

                    //     temp = System.Text.Encoding.ASCII.GetString(tempd);
                    timer1.Enabled = true;

                    Fitems.intruder_img = frameImage;
                    if (check_reg(tempd))
                    {
                        timer1.Enabled = false;
                        timer2.Enabled = false;
                        sp.Stop();
                        //     if (Fitems.intruder_img != null) Fitems.intruder_img.Dispose();
                        alarm_int = 0;
                        StringFormat format = new StringFormat();
                        format.Alignment = StringAlignment.Center;
                        gr.DrawString(_name + " | " + _email, new System.Drawing.Font("Candara", 18),
                                      new System.Drawing.SolidBrush(System.Drawing.Color.Purple),
                                      facePosition.xc, facePosition.yc + facePosition.w * 0.55f, format);
                        fileName        += _name;
                        Fitems.user_name = _name;
                        Fitems.user_id   = _userid;
                        res((Bitmap)frameImage);
                        Fitems.uimg = frameImage;


                        Form sForm = new successForm();
                        needClose = true;
                        this.AddOwnedForm(sForm);
                        sForm.Show();
                        this.Enabled = false;

                        sp.Stop();
                        this.Hide();
                        //return;
                    }

                    //gp = ppp;
                    //                    timer3.Enabled = true;
                    //Bitmap ppp = (Bitmap)frameImage;
                    //this.Invoke(new System.Threading.ParameterizedThreadStart(res), new object[] { ppp });
                    //new System.Threading.Thread(new System.Threading.ParameterizedThreadStart());
                    //res(ppp);
                    //System.Threading.Thread tr = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(res(ppp)),1);
                    //      _first_tick++;
                }
                else
                {
                    timer1.Enabled = false;
                    alarm_int      = 0;
                    timer2.Enabled = false;
                    sp.Stop();
                }

                try
                {
                    pictureBox1.Image = frameImage;
                }
                catch (ArgumentException argex)
                {
                    //  MessageBox.Show(argex.Message + "\n" + argex.StackTrace);
                }
                FSDK.FreeImage(imageHandle); // delete the FSDK image handle
                DeleteObject(hbitmapHandle); // delete the HBITMAP object
                GC.Collect();                // collect the garbage after the deletion

                // make UI controls accessible
                Application.DoEvents();
            }
            // FSDKCam.CloseVideoCamera(cameraHandle);
            // FSDKCam.FinalizeCapturing();
        }
예제 #28
0
        void webCam()
        {
            try
            {
                if (pictureBox1.InvokeRequired)
                {
                    pictureBox1.Invoke(new ThreadStart(webCam));
                    return;
                }
            }
            catch (Exception)
            {
                //      webCam();
            }

            try
            {
                pictureBox1.Width  = Fitems.CamX;
                pictureBox1.Height = Fitems.CamY;
                int cameraHandle = Fitems.cameraN;
                FSDK.TFacePosition facePosition = new FSDK.TFacePosition();
                while (!needClose)
                {
                    Int32 imageHandle = 0;
                    if (FSDK.FSDKE_OK != FSDKCam.GrabFrame(cameraHandle, ref imageHandle)) // grab the current frame from the camera
                    {
                        Application.DoEvents();
                        continue;
                    }
                    IntPtr hbitmapHandle = IntPtr.Zero; // to store the HBITMAP handle
                    FSDK.SaveImageToHBitmap(imageHandle, ref hbitmapHandle);

                    Image    frameImage = Image.FromHbitmap(hbitmapHandle);
                    Graphics gr         = Graphics.FromImage(frameImage);


                    fileName = (DateTime.Now.ToLongTimeString() + "__" + DateTime.Now.ToShortDateString()).Replace("/", "-").Replace(" ", "_").Replace(":", "-") + (new Random().Next(new Random().Next(100), new Random().Next(100, 1000))).ToString();
                    if (FSDK.FSDKE_OK == FSDK.DetectFace(imageHandle, ref facePosition))
                    {
                        gr.DrawRectangle(Pens.Orange, facePosition.xc - facePosition.w / 2, facePosition.yc - facePosition.w / 2,
                                         facePosition.w, facePosition.w);
                        byte[] tempd = new byte[FSDK.TemplateSize];
                        FSDK.GetFaceTemplateInRegion(imageHandle, ref facePosition, out tempd);
                        drawEyes(new object[] { imageHandle, facePosition, gr });
                        tempFace = tempd;

                        isFace = true;
                        if (reg)
                        {
                            try
                            {
                                button2.Enabled = true;
                            }
                            catch (InvalidOperationException inv)
                            {
                            }
                            if (check_reg(tempd))
                            {
                                StringFormat format = new StringFormat();
                                format.Alignment = StringAlignment.Center;
                                gr.DrawString(_name + " | " + _email, new System.Drawing.Font("Candara", 18),
                                              new System.Drawing.SolidBrush(System.Drawing.Color.Orange),
                                              facePosition.xc, facePosition.yc + facePosition.w * 0.55f, format);
                                fileName += _name;
                            }
                        }
                    }
                    else
                    {
                        isFace = false;
                        try
                        {
                            button2.Enabled = false;
                        }
                        catch (InvalidOperationException inv)
                        {
                        }
                    }

                    //recFace(ppp);
                    pictureBox1.Image = frameImage;

                    FSDK.FreeImage(imageHandle); // delete the FSDK image handle
                    DeleteObject(hbitmapHandle); // delete the HBITMAP object
                    GC.Collect();                // collect the garbage after the deletion

                    // make UI controls accessible
                    Application.DoEvents();
                }
            }
            catch (Exception)
            {
            }
        }
예제 #29
0
        private void StartStreamingAndDetecting()
        {
            int r = FSDKCam.OpenVideoCamera(ref cameraName, ref cameraHandle);

            if (r != FSDK.FSDKE_OK)
            {
                MessageBox.Show("Error opening the first camera", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                Application.Exit();
            }

            try
            {
                int tracker = 0;                                                                     // creating a Tracker
                if (FSDK.FSDKE_OK != FSDK.LoadTrackerMemoryFromFile(ref tracker, TrackerMemoryFile)) // try to load saved tracker state
                {
                    FSDK.CreateTracker(ref tracker);                                                 // if could not be loaded, create a new tracker
                }
                int err = 0;                                                                         // set realtime face detection parameters
                FSDK.SetTrackerMultipleParameters(tracker, "HandleArbitraryRotations=false; DetermineFaceRotationAngle=true; InternalResizeWidth=100; FaceDetectionThreshold=1;", ref err);
                FSDK.SetFaceDetectionParameters(false, true, 384);

                int FrameCounter = 0;
                Pen P            = new Pen(Color.AliceBlue);
                int L            = 0;
                int T            = 0;
                int W            = 0;

                string[] Names = new string[10];

                while (!needClose)
                {
                    Int32 imageHandle = 0;

                    if (FSDK.FSDKE_OK != FSDKCam.GrabFrame(cameraHandle, ref imageHandle)) // grab the current frame from the camera
                    {
                        Application.DoEvents();
                        continue;
                    }

                    FSDK.CImage image = new FSDK.CImage(imageHandle);

                    long[] IDs;
                    long   faceCount = 0;
                    FSDK.FeedFrame(tracker, cameraHandle, image.ImageHandle, ref faceCount, out IDs, sizeof(long) * 256); // maximum of 256 faces detected
                    Array.Resize(ref IDs, (int)faceCount);


                    // make UI controls accessible (to find if the user clicked on a face)
                    Application.DoEvents();

                    Image    frameImage = image.ToCLRImage();
                    Graphics gr         = Graphics.FromImage(frameImage);


                    for (int i = 0; i < IDs.Length; ++i)
                    {
                        string FaceFullName = "Unknown Face";
//                        Name = "";
                        if (FaceFullName == "Unknown Face")
                        {
                            FSDK.TFacePosition facePosition = new FSDK.TFacePosition();
                            FSDK.GetTrackerFacePosition(tracker, cameraHandle, IDs[i], ref facePosition);

                            int left = facePosition.xc - (int)(facePosition.w * 0.6);
                            int top  = facePosition.yc - (int)(facePosition.w * 0.5);
                            int w    = (int)(facePosition.w * 1.2);

                            string name;

                            TFaceRecord fIn = new TFaceRecord();

                            fIn.FacePosition   = new FSDK.TFacePosition();
                            fIn.FacialFeatures = new FSDK.TPoint[2];
                            fIn.Template       = new byte[FSDK.TemplateSize];

                            FSDK.CImage img = new FSDK.CImage(image.ImageHandle);
                            img = image.CopyRect((int)(facePosition.xc - Math.Round(facePosition.w * 0.5)), (int)(facePosition.yc - Math.Round(facePosition.w * 0.5)), (int)(facePosition.xc + Math.Round(facePosition.w * 0.5)), (int)(facePosition.yc + Math.Round(facePosition.w * 0.5)));

                            fIn.image        = img;
                            fIn.FacePosition = fIn.image.DetectFace();

                            fIn.faceImage      = fIn.image.CopyRect((int)(fIn.FacePosition.xc - Math.Round(fIn.FacePosition.w * 0.5)), (int)(fIn.FacePosition.yc - Math.Round(fIn.FacePosition.w * 0.5)), (int)(fIn.FacePosition.xc + Math.Round(fIn.FacePosition.w * 0.5)), (int)(fIn.FacePosition.yc + Math.Round(fIn.FacePosition.w * 0.5)));
                            fIn.FacialFeatures = fIn.image.DetectEyesInRegion(ref fIn.FacePosition);
                            fIn.Template       = fIn.image.GetFaceTemplateInRegion(ref fIn.FacePosition); // get template with higher precision


                            //TFaceRecord fOut = new TFaceRecord();
                            //string FaceFullName = "Unknown Face";

                            //if (FrameCounter < 9)
                            //{
                            //    FrameCounter++;

                            //    StringFormat format = new StringFormat();
                            //    format.Alignment = StringAlignment.Center;

                            //    gr.DrawString("Searching ...", new Font("Arial", 16), new SolidBrush(Color.LightGreen), facePosition.xc, top + w + 5, format);

                            //    Fx.GetPerson(fIn, out FaceFullName);
                            //    Names[FrameCounter] = FaceFullName;
                            //    name = FaceFullName;

                            //}
                            //else
                            //{

                            //FrameCounter++;
                            Fx.GetPerson(fIn, out FaceFullName);
                            Names[FrameCounter] = FaceFullName;
                            name = FaceFullName;
                            if (FaceFullName != "")
                            {
                                IntruderFullName = FaceFullName;
                            }

                            FrameCounter = 0;


                            /*/ draw name
                             * name = (from n in Names
                             *      group n by n into g
                             *      select new
                             *      {
                             *          Key = g.Key,
                             *          Count = g.Count()
                             *      }).OrderByDescending(g => g.Count).ToArray()[0].ToString();
                             */

                            StringFormat format = new StringFormat();
                            format.Alignment = StringAlignment.Center;

                            gr.DrawString(name, new Font("Arial", 16), new SolidBrush(Color.LightGreen), facePosition.xc, top + w + 5, format);

                            Pen pen = Pens.LightGreen;
                            gr.DrawRectangle(pen, left, top, w, w);


                            if (mouseX >= left && mouseX <= left + w && mouseY >= top && mouseY <= top + w)
                            {
                                pen = Pens.Blue;
                            }

                            P = pen;
                            L = left;
                            T = top;
                            W = w;

                            gr.DrawRectangle(pen, left, top, w, w);
                            if (FaceFullName == "Unknown Face")
                            {
                                un++;
                                if (un >= 20)
                                {
                                    //MessageBox.Show("I don't kno him");
                                }
                            }
                            else
                            {
                                kno++;
                                if (kno >= 5)
                                {
                                    //MessageBox.Show("i know him");

                                    //Get detected student details
                                    var d_student = db.Students.Where(p => p.fullname == Name).FirstOrDefault();
                                    var att       = db.Attendances.Where(p => p.fullname == name && p.insertdate > DateTime.Now.AddDays(-1));
                                    if (att.Count() == 0)
                                    {
                                        //save to attedance
                                        db.Attendances.Add(
                                            new Attendance
                                        {
                                            // regno =
                                            regno      = d_student.regno,
                                            fullname   = d_student.fullname,
                                            gender     = d_student.gender,
                                            level      = d_student.level,
                                            insertdate = DateTime.Now
                                        });
                                        db.SaveChanges();
                                    }
                                }
                            }

                            if (MakingCall == false)
                            {
                                MakingCall = true;
                                // timer.Tick += timer_Tick;
                                //timer.Interval = 30000000;
                                // timer.Start();
                                //MessageBox.Show("UNKNOWN");
                                Thread.Sleep(5000);
                                TwilioClass call = new TwilioClass();
                                if (call.MakeCall(IntruderFullName))
                                {
                                    MakingCall = false;
                                }
                            }
                            //}
                            //gr.DrawRectangle(P, L, T, W, W);
                            name             = "";
                            IntruderFullName = "";
                        }
                    }

                    //programState = ProgramState.psRecognize;

                    // display current frame
                    imageBox.Image = frameImage;
                    GC.Collect(); // collect the garbage after the deletion
                }

                FSDKCam.CloseVideoCamera(cameraHandle);
                FSDKCam.FinalizeCapturing();
            }
            catch (Exception n)
            {
                StartStreamingAndDetecting();
            }
        }
        public void recFace(object pppp)
        {
            Bitmap ppp = (Bitmap)pppp;

            if (label1.InvokeRequired)
            {
                label1.Invoke(new System.Threading.ParameterizedThreadStart(recFace), new object[] { pppp });
                return;
            }
            bool error = false;

            try
            {
                IntPtr ff = ppp.GetHbitmap();
                FSDK.LoadImageFromHBitmap(ref cimg, ff);
                FSDK.SetFaceDetectionParameters(false, false, 500);
                FSDK.SetFaceDetectionThreshold(1);

                FSDK.TFacePosition facePosition = new FSDK.TFacePosition();

                IntPtr hbitmapHandle = IntPtr.Zero;

                FSDK.SaveImageToHBitmap(cimg, ref hbitmapHandle);
                Image    ccimg = Image.FromHbitmap(hbitmapHandle);
                Graphics gr    = Graphics.FromImage(ccimg);

                if (FSDK.FSDKE_OK == FSDK.DetectFace(cimg, ref facePosition))
                {
                    gr.DrawRectangle(Pens.LightBlue, facePosition.xc - facePosition.w / 2, facePosition.yc - facePosition.w / 2,
                                     facePosition.w, facePosition.w);
                    byte[] tempd = new byte[FSDK.TemplateSize];
                    FSDK.GetFaceTemplateInRegion(cimg, ref facePosition, out tempd);
                    temp = System.Text.Encoding.ASCII.GetString(tempd);
                    if (check_reg(tempd))
                    {
                        timer2.Enabled = false;
                        StringFormat format = new StringFormat();
                        format.Alignment = StringAlignment.Center;
                        gr.DrawString(_name + " | " + _matric + " | " + _room, new System.Drawing.Font("Candara", 18),
                                      new System.Drawing.SolidBrush(System.Drawing.Color.LightBlue),
                                      facePosition.xc, facePosition.yc + facePosition.w * 0.55f, format);
                    }
                    else
                    {
                        timer2.Enabled = true;
                    }
                }
                else
                {
                    timer2.Enabled = false;
                    label1.Text    = "Please Focus on the camera";
                }
                pictureBox1.Height = ccimg.Height;
                pictureBox1.Width  = ccimg.Width;
                pictureBox1.Image  = ccimg;
                FSDK.FreeImage(cimg);
                DeleteObject(hbitmapHandle);
                GC.Collect();
                Application.DoEvents();
            }
            catch (NullReferenceException nul)
            {
                timer1.Enabled = false;
                timer1.Dispose();
                MessageBox.Show(nul.ToString());
                error = true;
            }
            catch (ExternalException exer)
            {
            }
            catch (AccessViolationException acs)
            {
            }
            finally
            {
                if (error)
                {
                    canClose = true;
                    Application.Exit();
                    Application.Restart();
                }
            }
        }