我目前正在从事一个涉及AVCaptureVideoDataOutputSampleBufferDelegate
眨眼检测的项目。
dispatch_async
我在委托方法中有以下块
(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection{
//Initialisation of buffer and UIImage and CIDetector, etc.
dispatch_async(dispatch_get_main_queue(), ^(void) {
if(features.count > 0){
CIFaceFeature *feature = [features objectAtIndex:0];
if([feature leftEyeClosed]&&[feature rightEyeClosed]){
flag = TRUE;
}else{
if(flag){
blinkcount++;
//Update UILabel containing blink count. The count variable is incremented from here.
}
flag = FALSE;
}
}
}
上面显示的方法被连续调用并处理来自相机的视频输入。flag
布尔值跟踪在最后一帧中眼睛是闭合还是睁开,以便可以检测到眨眼。有大量帧被丢弃,但仍然正确检测到眨眼,所以我猜处理的 fps 是足够的。
我的问题是UILabel
在执行眨眼后经过相当长的延迟(约 1 秒)后更新。这使应用程序看起来滞后且不直观。我尝试在没有调度的情况下编写 UI 更新代码,但这是不行的。有什么我可以做的,以便UILabel
在眨眼后立即更新吗?