我已经使用 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 个线程无法完成。这是它的截图。
我想知道如何避免这种崩溃以及如何有效地进行图像处理。我想我需要一个好的设计。任何人都可以帮忙吗?