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; }
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(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; if (userName == null) { String s = ""; 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 = 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(); }
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(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; if (userName == null) { String s = ""; 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 = 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(); }