Преобразование изображения с помощью CIFaceFeature в iOS

Я использую CIDetector и CIFaceFeature для определения лица на передней камере. Также пытаюсь надеть шапку на голову. Шляпа отлично ложится, когда голова прямая. Если я наклоню голову, шляпа станет маленькой и отойдет от головы.

Используйте код, чтобы добавить шляпу,

self.hatImgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:selectedImageName]];
self.hatImgView.contentMode = UIViewContentModeScaleAspectFit;
[self.previewView addSubview:self.hatImgView];

Обнаружение лица и движения,

- (void)detectedFaceController:(DetectFace *)controller features:(NSArray *)featuresArray forVideoBox:(CGRect)clap withPreviewBox:(CGRect)previewBox
{
for (CIFaceFeature *ff in featuresArray) {
    CGRect faceRect = [ff bounds];

    //isMirrored because we are using front camera
    faceRect = [DetectFace convertFrame:faceRect previewBox:previewBox forVideoBox:clap isMirrored:YES];

    float hat_width = self.hatImgView.image.size.width;
    float hat_height = self.hatImgView.image.size.height;
    int head_start_y = 330.0; //part of hat image is transparent
    int head_start_x = 60.0;

    float width = faceRect.size.width * (hat_width / (hat_width - head_start_x));
    float height = width * hat_height/hat_width;
    int y = faceRect.origin.y - (height * head_start_y) / hat_height;
    int x = faceRect.origin.x - (head_start_x * width/hat_width);
    [UIView animateWithDuration:0.3 animations:^{
            [self.hatImgView setTransform:CGAffineTransformRotate(CGAffineTransformIdentity, (DegreesToRadians(-ff.faceAngle)))];
            self.hatImgView.frame =  CGRectMake(x, y, width + 60.0f, height + 60.0f);
     }];
} 
}

Кто-нибудь знает, как преобразить шапку с головой? Все помощь приветствуется!

0 ответов

Другие вопросы по тегам