EVFaceTracker 1.1.0

EVFaceTracker 1.1.0

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
已发布最后发布2015年5月

evermeer维护。



总结:使用面部识别来计算手机的距离和角度。

此版本适用于Xcode 6.3。由于Travis-ci正在运行Xcode 6.1.1,构建失败,需要等待Travis-ci将Xcode 6.3作为选项添加时(计划在五月底?)重新通过构建。

Screenshot0

更长的演示请见:https://www.youtube.com/watch?v=yLAtc7AzjIk

简介

本月初,我与同事讨论了新的用户交互形式。在移动设备上,现在有许多应用程序正在使用指南针和或加速度计。在游戏机中,使用摄像头与游戏交互非常普遍(例如Xbox Kinect和PlayStation move)。我想如果我们能使用手机的前置摄像头与应用程序交互,那会很好。我必须看看这个想法是否可以实现。

自iOS 5以来,苹果添加了脸部检测API。我的想法是根据检测到的面部大小估计设备与面部的距离。如果检测到的面部矩形很大,则设备靠近您的面部,如果很小,则设备远离您的面部。通过类似的技術,还可以计算设备相对于面部的角度。该角度是根据检测到的面部矩形与屏幕中心之间的距离来计算的。

这里的挑战是连接视频流并在每帧中检测人脸。幸运的是,苹果有一个名为SquareCam的示例项目,使用该项目的代码,可以在每秒大约5帧的速率上检测人脸(在iPhone 4S上)

使用面部跟踪,您可以做一些有趣的事情

  • 根据距离更改缩放级别。
  • 根据角度更改阴影偏移量
  • ?

在您的应用程序中使用EVFaceTracker

'EVFaceTracker'现在通过依赖管理器CocoaPods提供。您可以运行以下命令安装cocoapods:

[sudo] gem install cocoapods

您也可以将EVFaceTracker.m和.h文件复制到您的项目中。

示例代码

- (void)viewDidLoad {
    [super viewDidLoad];
    // Start tracking your face.
    evFaceTracker = [[EVFaceTracker alloc] initWithDelegate:self];
    // And give us a smooth update 10 times per second.
    [evFaceTracker fluidUpdateInterval:0.1f withReactionFactor:0.5f];
}

#pragma mark - <EVFaceTrackerDelegate>
// This delegate method is called every time the face recognition has detected something (including change)
- (void)faceIsTracked:(CGRect)faceRect withOffsetWidth:(float)offsetWidth andOffsetHeight:(float)offsetHeight andDistance:(float) distance {
    [CATransaction begin];
    [CATransaction setAnimationDuration:0.2];
    CALayer *layer = dynamicLabel.layer;
    layer.masksToBounds = NO;
    layer.shadowOffset = CGSizeMake(offsetWidth / 5.0f, offsetHeight / 10.0f);
    layer.shadowRadius = 5;
    layer.shadowOpacity = 0.5;
    [CATransaction commit];
}

// When the fluidUpdateInterval method is called, then this delegate method will be called on a regular interval
- (void)fluentUpdateDistance:(float)distance {
    // Animate to the zoom level.
    float effectiveScale = distance / 60.0f;
    [CATransaction begin];
    [CATransaction setAnimationDuration:0.1f];
    [dynamicView.layer setAffineTransform:CGAffineTransformMakeScale(effectiveScale, effectiveScale)];
    [CATransaction commit];
}