2017-09-24 9 views
0

私はiosを初めて使用しています。現在、私はopencvのfacetrackerを使用するアプリケーションに取り組んでいます。 したがって、Objective-CではC++を使用しています。私の問題は、facetracking部分を扱うC++クラスのコンストラクタが、カスケードファイルのファイルの場所を必要とすることです。コンストラクタは、次のようになります。ios opencvカスケードファイルのファイルパス

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); 
} 

それは私のために働かなかった。 他の方法はありますか?

thx

答えて

0

解決策が見つかりました。ユーザー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]; 
} 

これは私に役立ちました。

nice greets

関連する問題