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); }
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); } } }
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); } }
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);//标示人脸 } }
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 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"); } } }
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); }
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); }
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(); }
/// <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(); }
//处理三个摄像头图像 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(); }
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(); }
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(); }
/* 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) { } }
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(); }
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(); } }
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); }
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(); } }
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(); }
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)); }
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) { } }
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(); }
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 }
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(); }
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) { } }
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(); } } }