Aqui les muestro de como termino el programa en un video espero que les guste
Introducción
Usaremos las redes neuronales para detectar patrones en los datos.
en la practica 3 se a decidido utilizar las red neuronal para el reconocimiento de rostros de las personas. la aplicación fue inspirada por los últimos avances en los programas de las cámaras digitales, el programa es capturar tus características faciales para luego crear una representación estática de su rostro.
Que la cámara sin importar la posición de la personas o incluso si hay mas de una que el programa te reconozca y te pueda localizar.
Lograr lo anterior hay que entrenar al programa utilizando una gran variedad de fotos para que el programa te pueda reconocer los ojos, la boca, la nariz.
Justificación
Se decidió las redes neuronales por el gran uso que este se le puede dar en cualquier lugar como de seguridad de una empresa o uso policíaco, hasta en el uso de juegos. La verdad el uso de redes neuronales tiene una gran espacio para abarcar y por lo que me llego a llamar la atención.
plactica 3
En este platica me presente con mucho retos, uno de estos retos fue entender el uso de las funciones de la librería del openCV, aunque esta librería es muy útil no pude encontrar bueno ejemplos o no los comprendí, porque se me dificultaba mucho y mas al usar una función.
El programa que realice usando esta librería tenia que reconocer los patrones de unas fotos que le indicara para luego mostrarte cuales son las caras de la foto.
en el dia una realice una investigación de como hacer este programa buscan por Internet en una variedad de pag.
En el día dos y tres empece a realizar el programa en cuestión con la información que encontré sobre la librería.
En el día cuatro, cinco, seis y siete fue a corregir los errores del programa, uno de los errores fueron que llamaba a funciones antes de tiempo por lo que cual me generaba un errores, otro error fue que aparte de llamar a las funciones tenia que definir ciertas características a las funciones para que no hubiera ningún error. Otro problema que tuve fue que no me quiere ejecutar el programa aunque si me compila, por lo cual ya no se que hacer con el código.
En este platica me presente con mucho retos, uno de estos retos fue entender el uso de las funciones de la librería del openCV, aunque esta librería es muy útil no pude encontrar bueno ejemplos o no los comprendí, porque se me dificultaba mucho y mas al usar una función.
El programa que realice usando esta librería tenia que reconocer los patrones de unas fotos que le indicara para luego mostrarte cuales son las caras de la foto.
en el dia una realice una investigación de como hacer este programa buscan por Internet en una variedad de pag.
En el día dos y tres empece a realizar el programa en cuestión con la información que encontré sobre la librería.
En el día cuatro, cinco, seis y siete fue a corregir los errores del programa, uno de los errores fueron que llamaba a funciones antes de tiempo por lo que cual me generaba un errores, otro error fue que aparte de llamar a las funciones tenia que definir ciertas características a las funciones para que no hubiera ningún error. Otro problema que tuve fue que no me quiere ejecutar el programa aunque si me compila, por lo cual ya no se que hacer con el código.
El reconocimiento de rostro el programa a continuacion fue realizado en visual Stdio2010el codigo es el siguiente:
using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; namespace MultiFaceRec { static class Program { /// <summary> /// Punto de entrada principal para la aplicación. /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new FrmPrincipal()); } } }
using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; using Emgu.CV; using Emgu.CV.Structure; using Emgu.CV.CvEnum; using System.IO; using System.Diagnostics; namespace MultiFaceRec { public partial class FrmPrincipal : Form { //Declararation of all variables, vectors and haarcascades Image<Bgr, Byte> currentFrame; Capture grabber; HaarCascade face; HaarCascade eye; MCvFont font = new MCvFont(FONT.CV_FONT_HERSHEY_TRIPLEX, 0.5d, 0.5d); Image<Gray, byte> result, TrainedFace = null; Image<Gray, byte> gray = null; List<Image<Gray, byte>> trainingImages = new List<Image<Gray, byte>>(); List<string> labels= new List<string>(); List<string> NamePersons = new List<string>(); int ContTrain, NumLabels, t; string name, names = null; public FrmPrincipal() { InitializeComponent(); //Load haarcascades for face detection face = new HaarCascade("haarcascade_frontalface_default.xml"); //eye = new HaarCascade("haarcascade_eye.xml"); try { //Load of previus trainned faces and labels for each image string Labelsinfo = File.ReadAllText(Application.StartupPath + "/TrainedFaces/TrainedLabels.txt"); string[] Labels = Labelsinfo.Split('%'); NumLabels = Convert.ToInt16(Labels[0]); ContTrain = NumLabels; string LoadFaces; for (int tf = 1; tf < NumLabels+1; tf++) { LoadFaces = "face" + tf + ".bmp"; trainingImages.Add(new Image<Gray, byte>(Application.StartupPath + "/TrainedFaces/" + LoadFaces)); labels.Add(Labels[tf]); } } catch(Exception e) { //MessageBox.Show(e.ToString()); MessageBox.Show("Nothing in binary database, please add at least a face(Simply train the prototype with the Add Face Button).", "Triained faces load", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } private void button1_Click(object sender, EventArgs e) { //Initialize the capture device grabber = new Capture(); grabber.QueryFrame(); //Initialize the FrameGraber event Application.Idle += new EventHandler(FrameGrabber); button1.Enabled = false; } private void button2_Click(object sender, System.EventArgs e) { try { //Trained face counter ContTrain = ContTrain + 1; //Get a gray frame from capture device gray = grabber.QueryGrayFrame().Resize(320, 240, Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC); //Face Detector MCvAvgComp[][] facesDetected = gray.DetectHaarCascade( face, 1.2, 10, Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, new Size(20, 20)); //Action for each element detected foreach (MCvAvgComp f in facesDetected[0]) { TrainedFace = currentFrame.Copy(f.rect).Convert<Gray, byte>(); break; } //resize face detected image for force to compare the same size with the //test image with cubic interpolation type method TrainedFace = result.Resize(100, 100, Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC); trainingImages.Add(TrainedFace); labels.Add(textBox1.Text); //Show face added in gray scale imageBox1.Image = TrainedFace; //Write the number of triained faces in a file text for further load File.WriteAllText(Application.StartupPath + "/TrainedFaces/TrainedLabels.txt", trainingImages.ToArray().Length.ToString() + "%"); //Write the labels of triained faces in a file text for further load for (int i = 1; i < trainingImages.ToArray().Length + 1; i++) { trainingImages.ToArray()[i - 1].Save(Application.StartupPath + "/TrainedFaces/face" + i + ".bmp"); File.AppendAllText(Application.StartupPath + "/TrainedFaces/TrainedLabels.txt", labels.ToArray()[i - 1] + "%"); } MessageBox.Show(textBox1.Text + "´s face detected and added :)", "Training OK", MessageBoxButtons.OK, MessageBoxIcon.Information); } catch { MessageBox.Show("Enable the face detection first", "Training Fail", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } void FrameGrabber(object sender, EventArgs e) { label3.Text = "0"; //label4.Text = ""; NamePersons.Add(""); //Get the current frame form capture device currentFrame = grabber.QueryFrame().Resize(320, 240, Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC); //Convert it to Grayscale gray = currentFrame.Convert<Gray, Byte>(); //Face Detector MCvAvgComp[][] facesDetected = gray.DetectHaarCascade( face, 1.2, 10, Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, new Size(20, 20)); //Action for each element detected foreach (MCvAvgComp f in facesDetected[0]) { t = t + 1; result = currentFrame.Copy(f.rect).Convert<Gray, byte>().Resize(100, 100, Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC); //draw the face detected in the 0th (gray) channel with blue color currentFrame.Draw(f.rect, new Bgr(Color.Red), 2); if (trainingImages.ToArray().Length != 0) { //TermCriteria for face recognition with numbers of trained images like maxIteration MCvTermCriteria termCrit = new MCvTermCriteria(ContTrain, 0.001); //Eigen face recognizer EigenObjectRecognizer recognizer = new EigenObjectRecognizer( trainingImages.ToArray(), labels.ToArray(), 3000, ref termCrit); name = recognizer.Recognize(result); //Draw the label for each face detected and recognized currentFrame.Draw(name, ref font, new Point(f.rect.X - 2, f.rect.Y - 2), new Bgr(Color.LightGreen)); } NamePersons[t-1] = name; NamePersons.Add(""); //Set the number of faces detected on the scene label3.Text = facesDetected[0].Length.ToString(); /* //Set the region of interest on the faces gray.ROI = f.rect; MCvAvgComp[][] eyesDetected = gray.DetectHaarCascade( eye, 1.1, 10, Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, new Size(20, 20)); gray.ROI = Rectangle.Empty; foreach (MCvAvgComp ey in eyesDetected[0]) { Rectangle eyeRect = ey.rect; eyeRect.Offset(f.rect.X, f.rect.Y); currentFrame.Draw(eyeRect, new Bgr(Color.Blue), 2); } */ } t = 0; //Names concatenation of persons recognized for (int nnn = 0; nnn < facesDetected[0].Length; nnn++) { names = names + NamePersons[nnn] + ", "; } //Show the faces procesed and recognized imageBoxFrameGrabber.Image = currentFrame; label4.Text = names; names = ""; //Clear the list(vector) of names NamePersons.Clear(); } private void label5_Click(object sender, EventArgs e) { } private void imageBoxFrameGrabber_Click(object sender, EventArgs e) { } } }
Aquí les dejo el vídeo
file:///C:/Users/luis/Documents/Camtasia%20Studio/camara/camara.html
Código
#include <stdio.h> #include "cv.h" #include "highgui.h" void displayDetections(IplImage * pInpImg, CvSeq * pFaceRectSeq); int main(int argc, char** argv) { IplImage * pInpImg = 0; CvHaarClassifierCascade * pCascade = 0; CvMemStorage * pStorage = 0; CvSeq * pFaceRectSeq;
if(argc < 2) { printf("Missing name of image file!\n" "Usage: %s <imagefilename>\n", argv[0]); exit(-1); } pInpImg = (argc > 1) ? cvLoadImage(argv[1], CV_LOAD_IMAGE_COLOR) : 0; pStorage = cvCreateMemStorage(0); pCascade = (CvHaarClassifierCascade *)cvLoad ("deepti/eclipseopencv/detectface/src/haarcascade_frontalface_default.xm\ l", 0, 0, 0 ); if( !pInpImg || !pStorage || !pCascade ) { printf("Initialization failed: %s\n", (!pInpImg)? "can't load image file" : (!pCascade)? "can't load haar-cascade -- " "make sure path is correct" : "unable to allocate memory for data storage", argv[1]); exit(-1); } // detect faces in image pFaceRectSeq = cvHaarDetectObjects (pInpImg, pCascade, pStorage, 1.1, // increase search scale by 10% each pass; 3, // merge groups of three detections CV_HAAR_DO_CANNY_PRUNING, // skip regions unlikely to contain a face cvSize(40,40),cvSize(0,0)); // smallest size face to detect = 40x40 // display detected faces displayDetections(pInpImg, pFaceRectSeq); // clean up and release resources cvReleaseImage(&pInpImg); if(pCascade) cvReleaseHaarClassifierCascade(&pCascade); if(pStorage) cvReleaseMemStorage(&pStorage); return 0; } void displayDetections(IplImage * pInpImg, CvSeq * pFaceRectSeq) { const char * DISPLAY_WINDOW = "Haar Window"; int i; // create a window to display detected faces cvNamedWindow(DISPLAY_WINDOW, CV_WINDOW_AUTOSIZE); // draw a rectangular outline around each detection for(i=0;i<(pFaceRectSeq? pFaceRectSeq->total:0); i++ ) { CvRect* r = (CvRect*)cvGetSeqElem(pFaceRectSeq, i); CvPoint pt1 = { r->x, r->y }; CvPoint pt2 = { r->x + r->width, r->y + r->height }; cvRectangle(pInpImg, pt1, pt2, CV_RGB(0,255,0), 3, 4, 0); } // display face detections cvShowImage(DISPLAY_WINDOW, pInpImg); cvWaitKey(0); cvDestroyWindow(DISPLAY_WINDOW); }
Código de ejemplo del open CV en C
Aun se esta investigando librerías, y lo que hemos logrado es saber usar algunos ejemplo de la libreria que deseamos realizar.
#include <cstdlib> #include <iostream> #include <stdio.h> #include <highgui.h> using namespace std; int main(int argc, char *argv[]) { IplImage *img = cvLoadImage( "mty.jpg",1 ); cvNamedWindow("ventana", CV_WINDOW_AUTOSIZE ); cvShowImage("ventana", img ); printf("\nUPIITA"); cvWaitKey(0); cvReleaseImage( &img ); cvDestroyWindow("ventana"); system("PAUSE"); return EXIT_SUCCESS; }


No hay comentarios:
Publicar un comentario