我使用Sony CameraRemoteAPI SDK连接了远程摄像头。相机已成功连接,我正在获取相框。以下代码获取传入的UIImage并分配给UIImageView
- (void) liveviewPaint:(UIImage*)image
{
@synchronized(self)
{
[self.liveviewImageView setImage:image];
image = NULL;
}
}
然后我需要为这个UIImage添加人脸识别。但是当我尝试这样做时,应用程序会耗尽内存并崩溃。如何使用此远程摄像头进行有效的人脸识别?这是我目前的代码
- (void) liveviewPaint:(UIImage*)image
{
@synchronized(self)
{
[self performSelectorInBackground:@selector(getFaceDetectedImage:) withObject:image];
if ([[RecognitionAPI getSharedInstance] detectedImage]) {
[self.liveviewImageView setImage:[[RecognitionAPI getSharedInstance] detectedImage]];
} else {
[self.liveviewImageView setImage:image];
}
image = NULL;
}
}
这里使用一个单独的线程我正在调用面部识别功能(getFaceDetectedImage)。一旦识别出面部,它将被设置为RecognitionAPI类(detectedImage)中的实例变量。如果检测到面部,我将其设置为UIImageView(liveviewImageView)的图像,如下所示
[self.liveviewImageView setImage:[[RecognitionAPI getSharedInstance] detectedImage]];
这是没有面部检测的分配工具的输出。这次应用程序没有崩溃。
这是具有面部检测的分配工具的输出。此次应用崩溃。
我正在使用苹果内置的CIDetector进行人脸识别。我尝试使用opencv,但那时应用程序也崩溃了。
这是我在控制台中收到的错误
Recognition(483,0x6a51000) malloc: *** mach_vm_map(size=2691072) failed (error code=3)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
Recognition(483,0x6a51000) malloc: *** mach_vm_map(size=675840) failed (error code=3)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
Recognition(483,0x6a51000) malloc: *** mach_vm_map(size=2691072) failed (error code=3)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
Recognition(483,0x6a51000) malloc: *** mach_vm_map(size=675840) failed (error code=3)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
Recognition(483,0x6a51000) malloc: *** mach_vm_map(size=2691072) failed (error code=3)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
Recognition(483,0x6a51000) malloc: ***
另外我总共获得了59个无法完成的线程。这是它的截图。
我想知道如何避免这种崩溃以及如何有效地进行图像处理。我想我需要一个好的设计。有人可以帮忙吗?