11

我正在尝试制作一个应用程序来处理一组帧,这些帧jpg使用 Google-vision API 存储到应用程序中。

管道很简单。

1)我用一些选项创建检测器:

     _options = @{
                  GMVDetectorFaceLandmarkType : @(GMVDetectorFaceLandmarkAll),
                  GMVDetectorFaceClassificationType : @(GMVDetectorFaceClassificationAll),
                  GMVDetectorFaceTrackingEnabled : @(NO)
                  };
    _faceDetector = [GMVDetector detectorOfType:GMVDetectorTypeFace options:_options];

2)我用这种方法读取了一个框架:

    UIImage *image = [UIImage imageWithContentsOfFile:imFile];

imFile 中包含的路径是正确的,我可以看到图像表示

3)最后,我处理框架:

NSArray<GMVFaceFeature *> *faces = [_faceDetector featuresInImage:image options:nil];

使用这段代码我可以处理一些帧,但是当分析很多帧时,应用程序的内存使用量不断增加,应用程序被自动终止。

我试图跟踪内存泄漏,但据我跟踪,它来自最后一部分内部,在[detector featuresInImage...]

是我做错了什么,还是里面有内存泄漏?我试图从谷歌找到任何问题,但无法找到它。

编辑:

这是我对检测器的每个结果所做的事情:

    if ([faces count]>0){
        GMVFaceFeature *face = [faces objectAtIndex:0];
        NSFileHandle *myHandle = [NSFileHandle fileHandleForWritingAtPath:filename];
        [myHandle seekToEndOfFile];

        NSString* lineToWrite = [NSString stringWithFormat:@"%u",fNumber];
        lineToWrite = [lineToWrite stringByAppendingString:[NSString stringWithFormat:@",%f",face.smilingProbability]];
        lineToWrite = [lineToWrite stringByAppendingString:@"\n"];
        NSError *errorWrite;
        [myHandle writeData:[lineToWrite dataUsingEncoding:NSUTF8StringEncoding]];

        if(errorWrite){
            NSLog(@"%@",errorWrite);
        }
    }

该方法到此结束。所以基本上我所做的就是创建一个文件并在其中写入。

4

0 回答 0