⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jesorsky.cc

📁 torch tracking code, it is a good code
💻 CC
字号:
const char *help = "\progname: jesorsky.cc\n\code2html: This program computes the face detection results using the Jesorsky measure.\n\version: Torch3 vision2.0, 2004-2005\n\(c) Christine Alves (alves@idiap.ch)\n";// face model (more to be added)#include "FrontalFace19x19.h"// GT measurer#include "jesorskyGTMeasurer.h"// geometry#include "Rectangle2D.h"// misc#include "CmdLine.h"#include "DiskXFile.h"using namespace Torch;int main(int argc, char *argv[]){	// Cmdline variables   	char *gtlistposfilename;   	char *inlistposfilename;   	real threshold;   	int postype;   	bool oneface;   	bool gtoneface;	bool verbose;   	bool rect;		CmdLine cmd;	cmd.info(help);	cmd.setBOption("write log", false);		cmd.addText("\nArguments:");	cmd.addSCmdArg("gtlistposfile", &gtlistposfilename, "list of ground truth pos file");	cmd.addSCmdArg("inlistposfile", &inlistposfilename, "list of input pos file");	cmd.addText("\nOptions:");	cmd.addRCmdOption("-threshold", &threshold, 0.25, "threshold");	cmd.addICmdOption("-postype", &postype, 1, "pos type");	cmd.addBCmdOption("-gtoneface", &gtoneface, false, "gt one face");	cmd.addBCmdOption("-oneface", &oneface, false, "one face");	cmd.addBCmdOption("-rect", &rect, false, "the file contains rectangles coordinates");	cmd.addBCmdOption("-verbose", &verbose, false, "verbose");		cmd.read(argc, argv);  	//	Allocator *allocator = new Allocator;	char inposfilename[200];	char gtposfilename[200];	Point2D l_eye;	Point2D r_eye;	sPoint2D eyes[2];	bool found = true;	int ngt, nin;	real x1, y1, x2, y2;	int n_detected_faces;	int n_match_faces = 0;	int n_gt_faces = 0;	int s_n_gt_faces = 0;	int missed = 0;	int smissed = 0;	int fa = 0;	int sfa = 0;	real detect = 0;	real sdetect = 0;		//	DiskXFile *inlistposfile = new DiskXFile(inlistposfilename, "r");	DiskXFile *gtlistposfile = new DiskXFile(gtlistposfilename, "r");		gtlistposfile->scanf("%d", &ngt);	inlistposfile->scanf("%d", &nin);		for (int i = 1; i <= ngt; i++) 	{		gtlistposfile->scanf("%s", gtposfilename);	   	inlistposfile->scanf("%s", inposfilename);				if(verbose) message("   Comparing %s to %s", inposfilename, gtposfilename);      		//-------------------------------------------------------------------	   		//------------------- MATCHING --------------------------------------	   		//-------------------------------------------------------------------				DiskXFile *inposfile = NULL;	   	inposfile = new DiskXFile(inposfilename, "r");		if (oneface) n_detected_faces = 1;		else inposfile->scanf("%d", &n_detected_faces);			//		if(verbose) message("Using 19x19 face model.");		FaceModel *face_model = NULL;		face_model = new(allocator) FrontalFace19x19(postype);				 		// Read the input file and for all detections, compare with the groundtruth 		n_match_faces = 0;		if (n_detected_faces != 0) 		//if (!oneface) 		{			for (int i=1;i<=n_detected_faces;i++) 			{			      inposfile->scanf("%f", &x1);			      inposfile->scanf("%f", &y1);			      inposfile->scanf("%f", &x2);			      inposfile->scanf("%f", &y2);							      // If the input file contains rectangles and not eyes: convert to eyes coordinates			      if (rect) 			      {				 //				 sPoint2D bbx[4];								 //				 bbx[0].x = x1;				 bbx[0].y = y1;				 bbx[1].x = x1 + x2;				 bbx[1].y = y1;				 bbx[2].x = x1 + x2;				 bbx[2].y = y1 + y2;				 bbx[3].x = x1;				 bbx[3].y = y1 + y2;			    		 // Jesorsky measurer: load the gt file, get the number of faces				 jesorskyGTMeasurer *jesorsky = new(allocator) jesorskyGTMeasurer(face_model, gtoneface, threshold);				 jesorsky->setBOption("verbose", verbose);				 jesorsky->load(gtposfilename);				 n_gt_faces = jesorsky->n_faces;								 //				 if(verbose) message("Jesorsky measure");				 				 found = jesorsky->measure(4, bbx);				 				 allocator->free(jesorsky);			      } 			      else 			      {	   			l_eye.x = x1; 	   			l_eye.y = y1;	   			r_eye.x = x2; 	   			r_eye.y = y2;				eyes[0].x = l_eye.x;		   		eyes[0].y = l_eye.y;				eyes[1].x = r_eye.x;		   		eyes[1].y = r_eye.y;		    		// Jesorsky measurer: load the gt file, get the number of faces				jesorskyGTMeasurer *jesorsky = new(allocator) jesorskyGTMeasurer(face_model, gtoneface, threshold);				jesorsky->setBOption("verbose", verbose);				jesorsky->load(gtposfilename);				n_gt_faces = jesorsky->n_faces;   				//				if(verbose) message("Jesorsky measure");    		    		found = jesorsky->measure(2, eyes);				allocator->free(jesorsky);			      }						      // Count the number of faces correctly detected in the input file			      if (found) n_match_faces ++;				}					} 		else 		{		   l_eye.x = 0;		   l_eye.y = 0;		   r_eye.x = 0;		   r_eye.y = 0;		   // Jesorsky measurer: load the gt file, get the number of faces		   jesorskyGTMeasurer *jesorsky = new(allocator) jesorskyGTMeasurer(face_model, gtoneface, threshold);		   jesorsky->setBOption("verbose", verbose);		   jesorsky->load(gtposfilename);		   n_gt_faces = jesorsky->n_faces;		   		   missed = n_gt_faces;		   fa = 0;						   allocator->free(jesorsky);		}		// Delete the input file		delete inposfile;	    		//-------------------------------------------------------------------	   		//------------------- EVALUATION ------------------------------------	   		//-------------------------------------------------------------------		   	if (n_detected_faces == n_gt_faces) {	      		if (n_match_faces == n_gt_faces) {	  			missed = 0;				fa = 0;	       		} else if (n_match_faces < n_gt_faces) {		  		missed = n_gt_faces - n_match_faces;				fa = 0;       			}		} else if (n_detected_faces > n_gt_faces) {	       		if (n_match_faces == n_gt_faces) {	  			missed = 0;				fa = n_detected_faces - n_match_faces;	       		} else if (n_match_faces < n_gt_faces) {		  		missed = n_gt_faces - n_match_faces;	 			fa = n_detected_faces - n_gt_faces;	       		}		} else {	      		if (n_match_faces == n_detected_faces) {	  			missed = n_gt_faces - n_match_faces;				fa = 0;	       		} else if (n_match_faces < n_detected_faces) {		  		missed = n_gt_faces - n_match_faces;				fa = n_detected_faces -  n_match_faces;       			}		}		     		detect = n_match_faces;		s_n_gt_faces += n_gt_faces;		sdetect += detect;		smissed += missed;		sfa += fa;			if(verbose)		{			print("   Detection : %f\n", detect);	  			print("   Missed : %d\n", missed);	  			print("   FA : %d\n\n", fa);	  		}	}		print("Final result:\n");	print("   GT Faces : %d\n", s_n_gt_faces);	  	print("   Detected Faces : %f\n", sdetect);	  	sdetect = (sdetect / s_n_gt_faces) * 100;	print("   Percentage of detections : %f\n", sdetect);	  	print("   Number of GT faces non detected (missed) : %d\n", smissed);	  	print("   Number of non-faces detected as faces (FA) : %d\n", sfa);	delete inlistposfile;	delete gtlistposfile;	delete allocator;	return(0);	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -