double[] LookForOneFace(double[,] data) { double[,] img = data.RotateImage(); closestFace.Image = img.ImageFromArray(); double[] weights = ImageTool.getWeights(eigFaces, img, avg); double[] cmp = ImageTool.compareWeigths(libWeights, weights); return(cmp); }
/// <summary> /// entey point to form /// </summary> public FaceRecog() { InitializeComponent(); foreach (FilterInfo videoCaptureDevice in InfoCollection) { streamDeviceChoiceBox.Items.Add(videoCaptureDevice.Name); } streamDeviceChoiceBox.SelectedIndex = 1; foreach ( VideoCapabilities format in new VideoCaptureDevice(InfoCollection[streamDeviceChoiceBox.SelectedIndex] .MonikerString).VideoCapabilities) { formatsBox.Items.Add(format.FrameSize + " : " + format.AverageFrameRate + "FPS"); } formatsBox.SelectedIndex = 1; FData = new FrameData(); Counter = new Counter(0, 20); CheckFaceCounter = new Counter(0, 10); LibCount = LoadLibrary(@"../../ImageLib/cfol/", 512, 512, FACES_PER_PERSON); avg = ImageTool.GetAvg(lib); difLib = ImageTool.GetDifferenceArray(lib, avg); EigenObject eigVects = ImageTool.GetEigen(ImageTool.GetA(lib)); ImageTool.normalize(eigVects.Vectors); eigFaces = ImageTool.getEigenFaces(eigVects.Vectors, difLib); libWeights = new double[lib.Length][]; for (int i = 0; i < lib.Length; i++) { libWeights[i] = ImageTool.getWeights(eigFaces, lib[i], avg); // test - eigen then Sigma weight * each eigen } Image image = Image.FromFile(@"../../ImageLib/cfol/0101.bmp"); QuickFaceDetect((Bitmap)image); }
/// <summary> /// /// </summary> /// <param name="directory"></param> /// <param name="width"></param> /// <param name="height"></param> /// <param name="subSet"></param> /// <returns></returns> private int LoadLibrary(string directory, int width, int height, int subSet) { string[] images = Directory.GetFiles(@directory, "*.bmp"); if (subSet < 1) { subSet = 1; } lib = new double[images.Length][, ]; int i = 0; foreach (string image in images) { lib[i++] = ImageTool.GetArray(new Bitmap(image)); } if (subSet > 1) { lib = ImageTool.avgSubsets(lib, subSet); } return(images.Length / subSet); }