ios 级联文件的opencv文件路径
ios opencv filepath of cascade file
我是 ios 的新手。目前我正在开发一个使用 opencv facetracker 的应用程序。
因此我在 Objective-C 内使用 C++。我的问题是,处理面部跟踪部分的 C++ class 的构造函数需要级联文件的文件位置。构造函数如下所示:
VideoFaceDetector(const std::string cascadeFilePath);
不幸的是,以下代码不起作用(由于匿名原因更改了文件路径):
const cv::String CASCADE_FILE("/../../../../haarcascade_frontalface_default.xml");
虽然 haarcascade_frontalface_default.xml 文件在 Xcode 项目中,但无法加载。
有没有办法在 C++ 代码中获取级联文件的文件路径?我已经尝试过用户的方法:r4ghu
NSString *faceCascadePath = [[NSBundle mainBundle]
pathForResource:@"<your_cascade_name>"
ofType:@"xml"];
const CFIndex CASCADE_NAME_LEN = 2048;
char *CASCADE_NAME = (char *) malloc(CASCADE_NAME_LEN);
CFStringGetFileSystemRepresentation( (CFStringRef)faceCascadePath,
CASCADE_NAME,
CASCADE_NAME_LEN);
if(!face_cascade.load(CASCADE_NAME)) {
cout << "Unable to load the face detector!!!!" << endl;
exit(-1);
}
它对我不起作用。
还有别的办法吗?
谢谢
我找到了解决办法。用户 r4ghu 是对的。但我不清楚将那几行代码放在哪里。如果您想正确加载级联文件,则必须在初始化相机之前执行此操作。例如:
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSString * const TFCascadeFilename = @"haarcascade_frontalface_alt2";//Strings of haar file names
NSString *TF_cascade_name = [[NSBundle mainBundle] pathForResource:TFCascadeFilename ofType:@"xml"];
bool check = false;
//Load haar file, return error message if fail
if (!(check = faceCascade.load( [TF_cascade_name UTF8String] ))) {
NSLog(@"[Cascade File]: Could not load TF cascade!");
}
else{
NSLog(@"[Cascade File]: Successfully loaded!");
}
NSLog(@"[path]: %@\n", TF_cascade_name);
self.videoCamera = [[CvVideoCamera alloc] initWithParentView:imageView];
self.videoCamera.defaultAVCaptureDevicePosition = AVCaptureDevicePositionFront;
self.videoCamera.defaultAVCaptureSessionPreset = AVCaptureSessionPresetHigh;
self.videoCamera.defaultAVCaptureVideoOrientation = AVCaptureVideoOrientationPortrait;
self.videoCamera.defaultFPS = 30;
self.videoCamera.grayscaleMode = NO;
self.videoCamera.delegate = self;
self.videoCamera.rotateVideo = YES;
[self.videoCamera start];
}
这对我有用。
亲切的问候。
我是 ios 的新手。目前我正在开发一个使用 opencv facetracker 的应用程序。 因此我在 Objective-C 内使用 C++。我的问题是,处理面部跟踪部分的 C++ class 的构造函数需要级联文件的文件位置。构造函数如下所示:
VideoFaceDetector(const std::string cascadeFilePath);
不幸的是,以下代码不起作用(由于匿名原因更改了文件路径):
const cv::String CASCADE_FILE("/../../../../haarcascade_frontalface_default.xml");
虽然 haarcascade_frontalface_default.xml 文件在 Xcode 项目中,但无法加载。 有没有办法在 C++ 代码中获取级联文件的文件路径?我已经尝试过用户的方法:r4ghu
NSString *faceCascadePath = [[NSBundle mainBundle]
pathForResource:@"<your_cascade_name>"
ofType:@"xml"];
const CFIndex CASCADE_NAME_LEN = 2048;
char *CASCADE_NAME = (char *) malloc(CASCADE_NAME_LEN);
CFStringGetFileSystemRepresentation( (CFStringRef)faceCascadePath,
CASCADE_NAME,
CASCADE_NAME_LEN);
if(!face_cascade.load(CASCADE_NAME)) {
cout << "Unable to load the face detector!!!!" << endl;
exit(-1);
}
它对我不起作用。 还有别的办法吗?
谢谢
我找到了解决办法。用户 r4ghu 是对的。但我不清楚将那几行代码放在哪里。如果您想正确加载级联文件,则必须在初始化相机之前执行此操作。例如:
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSString * const TFCascadeFilename = @"haarcascade_frontalface_alt2";//Strings of haar file names
NSString *TF_cascade_name = [[NSBundle mainBundle] pathForResource:TFCascadeFilename ofType:@"xml"];
bool check = false;
//Load haar file, return error message if fail
if (!(check = faceCascade.load( [TF_cascade_name UTF8String] ))) {
NSLog(@"[Cascade File]: Could not load TF cascade!");
}
else{
NSLog(@"[Cascade File]: Successfully loaded!");
}
NSLog(@"[path]: %@\n", TF_cascade_name);
self.videoCamera = [[CvVideoCamera alloc] initWithParentView:imageView];
self.videoCamera.defaultAVCaptureDevicePosition = AVCaptureDevicePositionFront;
self.videoCamera.defaultAVCaptureSessionPreset = AVCaptureSessionPresetHigh;
self.videoCamera.defaultAVCaptureVideoOrientation = AVCaptureVideoOrientationPortrait;
self.videoCamera.defaultFPS = 30;
self.videoCamera.grayscaleMode = NO;
self.videoCamera.delegate = self;
self.videoCamera.rotateVideo = YES;
[self.videoCamera start];
}
这对我有用。
亲切的问候。