Ejemplo n.º 1
0
        private void Findface(Bitmap bitmap)
        {
            var img = 0;

            var image = bitmap;

            image.Save("test.png");
            FSDK.LoadImageFromFile(ref img, "test.png");

            Face.Source = new BitmapImage(new Uri("test.png", UriKind.Relative));

            FSDK.TPoint[] array;
            FSDK.DetectFacialFeatures(img, out array);
            if (array != null)
            {
                Face.Source = DrawPoints(image, array);
            }


            FSDK.TFacePosition[] faces;
            int faceCount = 0;

            FSDK.DetectMultipleFaces(img, ref faceCount, out faces, 10000);


            if (faces != null)
            {
                foreach (var f in faces)
                {
                    Face.Source = DrawCircle(image, f.xc, f.yc, f.w);
                }
            }
        }
Ejemplo n.º 2
0
        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog dlg = new OpenFileDialog();

            dlg.Filter      = "JPEG (*.jpg)|*.jpg|Windows bitmap (*.bmp)|*.bmp|All files|*.*";
            dlg.Multiselect = true;

            if (dlg.ShowDialog() == DialogResult.OK)
            {
                listView1.Visible = true;
                if (thunho == false)
                {
                    this.Width = this.Width + listView1.Width;
                    thunho     = true;
                }

                try
                {
                    //Set các thông số độ nghiêng
                    FSDK.SetFaceDetectionParameters(false, true, 384);
                    ///Set thông số phát hiện khung mặt
                    FSDK.SetFaceDetectionThreshold((int)Form1.FaceDetectionThreshold);


                    foreach (string fn in dlg.FileNames)
                    {
                        TFaceRecord fr = new TFaceRecord();
                        fr.ImageFileName = fn;
                        //fr.FacePosition = new FSDK.TFacePosition();
                        fr.FacialFeatures = new FSDK.TPoint[2];
                        //fr.Template = new byte[FSDK.TemplateSize];
                        fr.image = new FSDK.CImage(fn);

                        //textBox1.Text += "Enrolling '" + fn + "'\r\n";
                        //textBox1.Refresh();
                        ///Lấy vị trí mặt trong ảnh
                        //fr.FacePosition = fr.image.DetectFace();
                        FSDK.DetectMultipleFaces(fr.image.ImageHandle, ref fr.CountFace, out fr.FacePosition, sizeof(long) * 256);
                        Array.Resize(ref fr.FacePosition, fr.CountFace);
                        if (fr.FacePosition.Length == 0)
                        {
                            if (dlg.FileNames.Length <= 1)
                            {
                                MessageBox.Show("Không có khuôn mặt nào !", "Lỗi ");
                            }
                            else
                            {
                                MessageBox.Show(fn + ": Không tìm thấy khuôn mặt nào !");
                            }
                        }
                        else
                        {
                            //Sao chép mặt
                            fr.faceImage = fr.image.CopyRect((int)(fr.FacePosition[0].xc - Math.Round(fr.FacePosition[0].w * 0.5)),
                                                             (int)(fr.FacePosition[0].yc - Math.Round(fr.FacePosition[0].w * 0.5)),
                                                             (int)(fr.FacePosition[0].xc + Math.Round(fr.FacePosition[0].w * 0.5)),
                                                             (int)(fr.FacePosition[0].yc + Math.Round(fr.FacePosition[0].w * 0.5)));

                            try
                            {
                                ///Lấy đặc điểm của mắt
                                fr.FacialFeatures = fr.image.DetectEyesInRegion(ref fr.FacePosition[0]);
                            }
                            catch (Exception ex2)
                            {
                                MessageBox.Show(ex2.Message, "Lỗi không nhận diện được mắt !");
                                byte[] by = new byte[FSDK.TemplateSize];
                                by = null;
                                fr.Template.Add(by);
                            }

                            try
                            {
                                ///Lấy giá trị nhận diện khung mặt
                                byte[] by = new byte[FSDK.TemplateSize];
                                by = fr.image.GetFaceTemplateInRegion(ref fr.FacePosition[0]); // get template with higher precision
                                fr.Template.Add(by);
                            }
                            catch (Exception ex2)
                            {
                                MessageBox.Show(ex2.Message, "Không phát hiện khuôn mặt");
                            }
                            //Them vào danh sách
                            FaceList.Add(fr);

                            imageList1.Images.Add(fr.faceImage.ToCLRImage());
                            listView1.Items.Add((imageList1.Images.Count - 1).ToString(), fn.Split('\\')[fn.Split('\\').Length - 1], imageList1.Images.Count - 1);

                            //textBox1.Text += "File '" + fn + "' enrolled\r\n";
                            //textBox1.Refresh();

                            listView1.SelectedIndices.Clear();
                            listView1.SelectedIndices.Add(listView1.Items.Count - 1);
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message.ToString(), "Exception");
                }
            }
        }
Ejemplo n.º 3
0
        private void nhậnDiệnToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (AnhList.Count == 0 || Form2.FaceList == null?true:Form2.FaceList.Count == 0)
            {
                MessageBox.Show("Chưa có dữ liệu ảnh đào tạo hoặc chưa có ảnh nhận diện ", "Lỗi ");
            }
            else
            {
                demlv2 = 0;
                listView2.Items.Clear();
                imageList2.Images.Clear();
                FaceListID.Clear();
                listView2.LargeImageList = imageList2;

                for (int i3 = 0; i3 < AnhList.Count; i3++)
                {
                    try
                    {
                        string      fn = AnhList[i3].URL;
                        TFaceRecord fr = new TFaceRecord();
                        fr.ImageFileName = fn;
                        //fr.FacePosition = new FSDK.TFacePosition();
                        fr.FacialFeatures = new FSDK.TPoint[FSDK.FSDK_FACIAL_FEATURE_COUNT];
                        //fr.Template = new byte[FSDK.TemplateSize];

                        try
                        {
                            fr.image = new FSDK.CImage(fn);
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.Message, "Lỗi tải file ");
                        }

                        FSDK.DetectMultipleFaces(fr.image.ImageHandle, ref fr.CountFace, out fr.FacePosition, sizeof(long) * 256);
                        Array.Resize(ref fr.FacePosition, fr.CountFace);
                        if (fr.CountFace != 0)
                        {
                            for (int i = 0; i < fr.FacePosition.Length; i++)
                            {
                                //fr.faceImage = fr.image.CopyRect((int)(fr.FacePosition.xc - Math.Round(fr.FacePosition.w * 0.5)), (int)(fr.FacePosition.yc - Math.Round(fr.FacePosition.w * 0.5)), (int)(fr.FacePosition.xc + Math.Round(fr.FacePosition.w * 0.5)), (int)(fr.FacePosition.yc + Math.Round(fr.FacePosition.w * 0.5)));

                                bool eyesDetected = false;
                                try
                                {
                                    fr.FacialFeatures = fr.image.DetectEyesInRegion(ref fr.FacePosition[i]);
                                    eyesDetected      = true;
                                }
                                catch (Exception ex)
                                {
                                    MessageBox.Show(ex.Message, "Lỗi nhận diện mắt");
                                    byte[] by = new byte[FSDK.TemplateSize];
                                    by = null;
                                    fr.Template.Add(by);
                                }

                                if (eyesDetected)
                                {
                                    byte[] by = new byte[FSDK.TemplateSize];
                                    by = fr.image.GetFaceTemplateInRegion(ref fr.FacePosition[i]); // get template with higher precision
                                    fr.Template.Add(by);
                                }
                            }
                        }
                        FaceListID.Add(fr);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("không mở được ảnh : " + ex.Message.ToString(), "Lỗi ");
                    }
                }
                ShowXuLi showXuLi = new ShowXuLi();
                showXuLi.max  = 100;
                showXuLi.min  = 1;
                showXuLi.step = 100 / FaceListID.Count;
                showXuLi.Show();

                for (int i1 = 0; i1 < FaceListID.Count; i1++)
                {
                    xuLy(FaceListID[i1], i1);
                    if (demlv2 > 0)
                    {
                        listView2.SelectedIndices.Clear();
                        listView2.SelectedIndices.Add(0);
                        listView2.CheckBoxes = true;
                    }
                    showXuLi.getIndex(((i1 + 1) * showXuLi.step).ToString(), 0);
                }
                showXuLi.getIndex("100", 100);
                MessageBox.Show("Nhận diện được " + listView2.Items.Count + " ảnh có mặt bạn !", "Thông báo ");
                showXuLi.Close();
                if (groupBox3.Visible == false)
                {
                    this.Height       = this.Height + groupBox3.Height;
                    groupBox3.Visible = true;
                }
            }
        }