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(); }