AVFoundation – Обнаружить лицо и лицо лица?

Как говорится в названии, я хочу обнаружить лицо, а затем обрезать только область лица. Это то, что у меня есть до сих пор:

- (void) captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection { for (AVMetadataObject *face in metadataObjects) { if ([face.type isEqualToString:AVMetadataObjectTypeFace]) { AVCaptureConnection *stillConnection = [_stillImageOutput connectionWithMediaType:AVMediaTypeVideo]; stillConnection.videoOrientation = [self videoOrientationFromCurrentDeviceOrientation]; [_stillImageOutput captureStillImageAsynchronouslyFromConnection:stillConnection completionHandler:^(CMSampleBufferRef imageDataSampleBuffer, NSError *error) { if (error) { NSLog(@"There was a problem"); return; } NSData *jpegData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageDataSampleBuffer]; UIImage *stillImage = [UIImage imageWithData:jpegData]; CIDetector *faceDetector = [CIDetector detectorOfType:CIDetectorTypeFace context:[CIContext contextWithOptions:nil] options:nil]; CIImage *ciimage = [CIImage imageWithData:jpegData]; NSArray *features = [faceDetector featuresInImage:ciimage]; self.captureImageView.image = stillImage; for(CIFeature *feature in features) { if ([feature isKindOfClass:[CIFaceFeature class]]) { CIFaceFeature *faceFeature = (CIFaceFeature *)feature; CGImageRef imageRef = CGImageCreateWithImageInRect([stillImage CGImage], faceFeature.bounds); self.detectedFaceImageView.image = [UIImage imageWithCGImage:imageRef]; CGImageRelease(imageRef); } } //[_session stopRunning]; }]; } } 

}

Этот код работает частично, он может обнаруживать лицо, но он не может обрезать часть с помощью лица, он всегда обрезает неправильную область, обрезает что-то вообще. Я просматривал стек за ответами, пробовал то и дело, но безрезультатно.

Вот ответ

 - (void) captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection { // when do we start face detection if (!_canStartDetection) return; CIImage *ciimage = [CIImage imageWithCVPixelBuffer:CMSampleBufferGetImageBuffer(sampleBuffer)]; NSArray *features = [_faceDetector featuresInImage:ciimage options:nil]; // find face feature for(CIFeature *feature in features) { // if not face feature ignore if (![feature isKindOfClass:[CIFaceFeature class]]) continue; // face detected _canStartDetection = NO; CIFaceFeature *faceFeature = (CIFaceFeature *)feature; // crop detected face CIVector *cropRect = [CIVector vectorWithCGRect:faceFeature.bounds]; CIFilter *cropFilter = [CIFilter filterWithName:@"CICrop"]; [cropFilter setValue:ciimage forKey:@"inputImage"]; [cropFilter setValue:cropRect forKey:@"inputRectangle"]; CIImage *croppedImage = [cropFilter valueForKey:@"outputImage"]; UIImage *stillImage = [UIImage imageWithCIImage:ciimage]; } 

}

Обратите внимание, что я использовал это время AVCaptureVideoDataOutput , вот этот код:

 // set output for face frames AVCaptureVideoDataOutput *output2 = [[AVCaptureVideoDataOutput alloc] init]; [_session addOutput:output2]; output2.videoSettings = @{(NSString*)kCVPixelBufferPixelFormatTypeKey : @(kCVPixelFormatType_32BGRA)}; output2.alwaysDiscardsLateVideoFrames = YES; dispatch_queue_t queue = dispatch_queue_create("com.myapp.faceDetectionQueueSerial", DISPATCH_QUEUE_SERIAL); [output2 setSampleBufferDelegate:self queue:queue]; 
  • Не удалось получить точный фрагмент изображения с помощью OpenGL в ipad
  • iOS Develoment: Почему мой NSURLConnection не работает с ошибкой «плохого URL» только для некоторых пользователей?
  • Не будет инициировать окно проверки подлинности в приложении LinkedIn на iPad
  • UIScrollview setContentOffset с нелинейной анимацией?
  • Программно получить список установленных приложений, поддерживающих данный тип файла
  • Core Text вычисляет буквенный фрейм в iOS
  • Используйте Adobe Reader для открытия PDF-файла из собственного приложения с помощью WebViewController
  • Добавить Cocos2D для проекта в xCode 4
  • Устройства iOS не отображаются на Xcode 6.1.1 - до перезагрузки Mac
  • iOS - Генерация PDF из UIView путем рендеринга теряет качество
  • Push-уведомление Не работает, когда приложение запущено (активно)
  • Interesting Posts

    Проблема с дополнительным сервером AVPlayerItem в iOS8

    Невозможно открыть документ «Main.storyboard»

    Как правильно разделить ViewModel и ViewController в RAC MVVM

    Как использовать SwiftyJSON в моем приложении для iOS?

    MagicalRecord + AFNetworking + NSFetchedResultsController, как заставить его работать?

    iOS: переключение на пиксели изображения

    Ошибка «Не удалось получить статус SDK с сервера» в Xamarin iOS с VS 2012

    Публикация на TestFlight, новые тестеры, действительно ли мне нужно перестроить / загрузить профиль профилей?

    Как отличить мобильное приложение от браузера?

    Репозиторий ошибок для iPhone iPad

    Должен ли я очищать мой дочерний UIViewControllers, когда мой контейнер UIViewController освобожден или выгружен?

    как написать протокол, который будет запускать функцию в определенное время с помощью – swift – SpriteKit

    При покупке приложения в iOS внезапно перестает работать (произошел код ошибки = 5002)

    iOS: CFTypeRef запрещен ARC

    Воспроизведение видео, как youtube в iOS 8

    Давайте будем гением компьютера.