Exemplo n.º 1
0
        public void GuesGenderAndAge(long[] IDs, int i, int tracker)
        {
            String AttributeValues;
            String AttributeValuesAge;
            String AtributValuesExpression;
            string str = "";

            if (0 == FSDK.GetTrackerFacialAttribute(tracker, 0, IDs[i], "Gender", out AttributeValues, 1024) &&
                0 == FSDK.GetTrackerFacialAttribute(tracker, 0, IDs[i], "Age", out AttributeValuesAge, 1024) &&
                0 == FSDK.GetTrackerFacialAttribute(tracker, 0, IDs[i], "Expression", out AtributValuesExpression, 1024))
            {
                if (checkBox2.Checked)
                {
                    float ConfidenceAge = 0.0f;
                    FSDK.GetValueConfidence(AttributeValuesAge, "Age", ref ConfidenceAge);
                    label7.Text = ((int)ConfidenceAge).ToString();
                }
                else
                {
                    label7.Text = "";
                }
                if (checkBox3.Checked)
                {
                    float ConfidenceMale   = 0.0f;
                    float ConfidenceFemale = 0.0f;
                    FSDK.GetValueConfidence(AttributeValues, "Male", ref ConfidenceMale);
                    FSDK.GetValueConfidence(AttributeValues, "Female", ref ConfidenceFemale);
                    label8.Text = (ConfidenceMale > ConfidenceFemale ? "Barbat" : "Femeie") + " " + (ConfidenceMale > ConfidenceFemale ? (int)(ConfidenceMale * 100) : (int)(ConfidenceFemale * 100)).ToString() + "%";
                }
                else
                {
                    label8.Text = "";
                }
                if (checkBox4.Checked)
                {
                    float ConfidenceExpression = 0.0f;
                    FSDK.GetValueConfidence(AtributValuesExpression, "Expression", ref ConfidenceExpression);
                    string[] tokens = AtributValuesExpression.Split(';');
                    label9.Text = tokens[0];
                }
                else
                {
                    label9.Text = "";
                }
            }
        }
        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();
        }