Hoya-kim

[ADD] 최종보고서, 면담보고서 및 소스코드 제출

Showing 31 changed files with 1395 additions and 0 deletions
No preview for this file type
No preview for this file type
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 50;
objects = {
/* Begin PBXBuildFile section */
B2C21D262492033C00C4BF34 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2C21D252492033C00C4BF34 /* AppDelegate.swift */; };
B2C21D282492033C00C4BF34 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2C21D272492033C00C4BF34 /* SceneDelegate.swift */; };
B2C21D2A2492033C00C4BF34 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2C21D292492033C00C4BF34 /* ViewController.swift */; };
B2C21D2D2492033C00C4BF34 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B2C21D2B2492033C00C4BF34 /* Main.storyboard */; };
B2C21D2F2492033F00C4BF34 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B2C21D2E2492033F00C4BF34 /* Assets.xcassets */; };
B2C21D322492033F00C4BF34 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B2C21D302492033F00C4BF34 /* LaunchScreen.storyboard */; };
B2C21D3A249208FF00C4BF34 /* VideoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2C21D39249208FF00C4BF34 /* VideoViewController.swift */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
B2C21D222492033C00C4BF34 /* ExtractFacialExpression.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ExtractFacialExpression.app; sourceTree = BUILT_PRODUCTS_DIR; };
B2C21D252492033C00C4BF34 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
B2C21D272492033C00C4BF34 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; };
B2C21D292492033C00C4BF34 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = "<group>"; };
B2C21D2C2492033C00C4BF34 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
B2C21D2E2492033F00C4BF34 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
B2C21D312492033F00C4BF34 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
B2C21D332492033F00C4BF34 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
B2C21D39249208FF00C4BF34 /* VideoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VideoViewController.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
B2C21D1F2492033C00C4BF34 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
B2C21D192492033C00C4BF34 = {
isa = PBXGroup;
children = (
B2C21D242492033C00C4BF34 /* extract_facial_expression */,
B2C21D232492033C00C4BF34 /* Products */,
);
sourceTree = "<group>";
};
B2C21D232492033C00C4BF34 /* Products */ = {
isa = PBXGroup;
children = (
B2C21D222492033C00C4BF34 /* ExtractFacialExpression.app */,
);
name = Products;
sourceTree = "<group>";
};
B2C21D242492033C00C4BF34 /* extract_facial_expression */ = {
isa = PBXGroup;
children = (
B2C21D252492033C00C4BF34 /* AppDelegate.swift */,
B2C21D272492033C00C4BF34 /* SceneDelegate.swift */,
B2C21D292492033C00C4BF34 /* ViewController.swift */,
B2C21D2B2492033C00C4BF34 /* Main.storyboard */,
B2C21D2E2492033F00C4BF34 /* Assets.xcassets */,
B2C21D302492033F00C4BF34 /* LaunchScreen.storyboard */,
B2C21D332492033F00C4BF34 /* Info.plist */,
B2C21D39249208FF00C4BF34 /* VideoViewController.swift */,
);
path = extract_facial_expression;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
B2C21D212492033C00C4BF34 /* extract_facial_expression */ = {
isa = PBXNativeTarget;
buildConfigurationList = B2C21D362492033F00C4BF34 /* Build configuration list for PBXNativeTarget "extract_facial_expression" */;
buildPhases = (
B2C21D1E2492033C00C4BF34 /* Sources */,
B2C21D1F2492033C00C4BF34 /* Frameworks */,
B2C21D202492033C00C4BF34 /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = extract_facial_expression;
productName = extract_facial_expression;
productReference = B2C21D222492033C00C4BF34 /* ExtractFacialExpression.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
B2C21D1A2492033C00C4BF34 /* Project object */ = {
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 1150;
LastUpgradeCheck = 1150;
ORGANIZATIONNAME = hoya;
TargetAttributes = {
B2C21D212492033C00C4BF34 = {
CreatedOnToolsVersion = 11.5;
};
};
};
buildConfigurationList = B2C21D1D2492033C00C4BF34 /* Build configuration list for PBXProject "extract_facial_expression" */;
compatibilityVersion = "Xcode 9.3";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = B2C21D192492033C00C4BF34;
productRefGroup = B2C21D232492033C00C4BF34 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
B2C21D212492033C00C4BF34 /* extract_facial_expression */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
B2C21D202492033C00C4BF34 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
B2C21D322492033F00C4BF34 /* LaunchScreen.storyboard in Resources */,
B2C21D2F2492033F00C4BF34 /* Assets.xcassets in Resources */,
B2C21D2D2492033C00C4BF34 /* Main.storyboard in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
B2C21D1E2492033C00C4BF34 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
B2C21D2A2492033C00C4BF34 /* ViewController.swift in Sources */,
B2C21D262492033C00C4BF34 /* AppDelegate.swift in Sources */,
B2C21D3A249208FF00C4BF34 /* VideoViewController.swift in Sources */,
B2C21D282492033C00C4BF34 /* SceneDelegate.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXVariantGroup section */
B2C21D2B2492033C00C4BF34 /* Main.storyboard */ = {
isa = PBXVariantGroup;
children = (
B2C21D2C2492033C00C4BF34 /* Base */,
);
name = Main.storyboard;
sourceTree = "<group>";
};
B2C21D302492033F00C4BF34 /* LaunchScreen.storyboard */ = {
isa = PBXVariantGroup;
children = (
B2C21D312492033F00C4BF34 /* Base */,
);
name = LaunchScreen.storyboard;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
B2C21D342492033F00C4BF34 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 13.5;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
};
name = Debug;
};
B2C21D352492033F00C4BF34 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 13.5;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
VALIDATE_PRODUCT = YES;
};
name = Release;
};
B2C21D372492033F00C4BF34 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = WEV3B59JPF;
INFOPLIST_FILE = extract_facial_expression/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 13.2;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.hoya.ExtractFacialExpression;
PRODUCT_NAME = ExtractFacialExpression;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
};
B2C21D382492033F00C4BF34 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = WEV3B59JPF;
INFOPLIST_FILE = extract_facial_expression/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 13.2;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.hoya.ExtractFacialExpression;
PRODUCT_NAME = ExtractFacialExpression;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
B2C21D1D2492033C00C4BF34 /* Build configuration list for PBXProject "extract_facial_expression" */ = {
isa = XCConfigurationList;
buildConfigurations = (
B2C21D342492033F00C4BF34 /* Debug */,
B2C21D352492033F00C4BF34 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
B2C21D362492033F00C4BF34 /* Build configuration list for PBXNativeTarget "extract_facial_expression" */ = {
isa = XCConfigurationList;
buildConfigurations = (
B2C21D372492033F00C4BF34 /* Debug */,
B2C21D382492033F00C4BF34 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = B2C21D1A2492033C00C4BF34 /* Project object */;
}
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:extract_facial_expression.xcodeproj">
</FileRef>
</Workspace>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>SchemeUserState</key>
<dict>
<key>extract_facial_expression.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>0</integer>
</dict>
</dict>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>SchemeUserState</key>
<dict>
<key>extract_facial_expression.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>0</integer>
</dict>
</dict>
</dict>
</plist>
//
// AppDelegate.swift
// extract_facial_expression
//
// Created by Jerry kim on 2020/06/11.
// Copyright © 2020 hoya. All rights reserved.
//
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
return true
}
// MARK: UISceneSession Lifecycle
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
// Called when a new scene session is being created.
// Use this method to select a configuration to create the new scene with.
return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
}
func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
// Called when the user discards a scene session.
// If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
// Use this method to release any resources that were specific to the discarded scenes, as they will not return.
}
}
{
"images" : [
{
"idiom" : "iphone",
"scale" : "2x",
"size" : "20x20"
},
{
"idiom" : "iphone",
"scale" : "3x",
"size" : "20x20"
},
{
"idiom" : "iphone",
"scale" : "2x",
"size" : "29x29"
},
{
"idiom" : "iphone",
"scale" : "3x",
"size" : "29x29"
},
{
"idiom" : "iphone",
"scale" : "2x",
"size" : "40x40"
},
{
"idiom" : "iphone",
"scale" : "3x",
"size" : "40x40"
},
{
"idiom" : "iphone",
"scale" : "2x",
"size" : "60x60"
},
{
"idiom" : "iphone",
"scale" : "3x",
"size" : "60x60"
},
{
"idiom" : "ipad",
"scale" : "1x",
"size" : "20x20"
},
{
"idiom" : "ipad",
"scale" : "2x",
"size" : "20x20"
},
{
"idiom" : "ipad",
"scale" : "1x",
"size" : "29x29"
},
{
"idiom" : "ipad",
"scale" : "2x",
"size" : "29x29"
},
{
"idiom" : "ipad",
"scale" : "1x",
"size" : "40x40"
},
{
"idiom" : "ipad",
"scale" : "2x",
"size" : "40x40"
},
{
"idiom" : "ipad",
"scale" : "1x",
"size" : "76x76"
},
{
"idiom" : "ipad",
"scale" : "2x",
"size" : "76x76"
},
{
"idiom" : "ipad",
"scale" : "2x",
"size" : "83.5x83.5"
},
{
"idiom" : "ios-marketing",
"scale" : "1x",
"size" : "1024x1024"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"filename" : "Extract
Facial Expression
on playing video (2).png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"filename" : "backward.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"filename" : "forward.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"filename" : "pause.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"filename" : "play.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13122.16" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13104.12"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="EHf-IW-A2E">
<objects>
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" xcode11CocoaTouchSystemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="53" y="375"/>
</scene>
</scenes>
</document>
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="15702" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
<device id="retina5_9" orientation="portrait" appearance="light"/>
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="15704"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="tne-QT-ifu">
<objects>
<viewController id="BYZ-38-t0r" customClass="ViewController" customModule="ExtractFacialExpression" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
<rect key="frame" x="0.0" y="0.0" width="375" height="812"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="Extract
Facial Expression
on playing video" translatesAutoresizingMaskIntoConstraints="NO" id="Sse-ql-HXA">
<rect key="frame" x="20" y="184" width="335" height="250"/>
<constraints>
<constraint firstAttribute="height" constant="250" id="JOu-92-oyr"/>
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="250" id="fZS-S2-tSG"/>
</constraints>
</imageView>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="zB7-aY-ubm">
<rect key="frame" x="172.66666666666666" y="534" width="30" height="30"/>
<state key="normal" title="Play"/>
<connections>
<segue destination="D4g-px-Vch" kind="show" id="ofT-Xb-4te"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
<constraints>
<constraint firstItem="Sse-ql-HXA" firstAttribute="top" secondItem="6Tk-OE-BBY" secondAttribute="top" constant="140" id="6ND-nd-DHf"/>
<constraint firstItem="zB7-aY-ubm" firstAttribute="centerX" secondItem="8bC-Xf-vdC" secondAttribute="centerX" id="JHz-a0-WWL"/>
<constraint firstAttribute="trailing" secondItem="Sse-ql-HXA" secondAttribute="trailing" constant="20" id="Ug1-BD-cPO"/>
<constraint firstItem="Sse-ql-HXA" firstAttribute="centerX" secondItem="8bC-Xf-vdC" secondAttribute="centerX" id="XTv-iE-JWp"/>
<constraint firstItem="Sse-ql-HXA" firstAttribute="leading" secondItem="8bC-Xf-vdC" secondAttribute="leading" constant="20" id="pT3-PT-wAa"/>
<constraint firstItem="zB7-aY-ubm" firstAttribute="top" secondItem="Sse-ql-HXA" secondAttribute="bottom" constant="100" id="rzh-wI-cwq"/>
</constraints>
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="133" y="139"/>
</scene>
<!--Video View Controller-->
<scene sceneID="SYy-sc-oJ4">
<objects>
<viewController id="D4g-px-Vch" customClass="VideoViewController" customModule="ExtractFacialExpression" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="WJS-7U-AZj">
<rect key="frame" x="0.0" y="0.0" width="375" height="758"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="yF4-1A-lpn" userLabel="RealTimeView">
<rect key="frame" x="0.0" y="225" width="375" height="250"/>
<subviews>
<arscnView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="GOO-Pa-3H8">
<rect key="frame" x="0.0" y="0.0" width="200" height="250"/>
<constraints>
<constraint firstAttribute="width" constant="200" id="SzQ-Yi-cr3"/>
</constraints>
</arscnView>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Ihv-nt-mwe" userLabel="ExpressionView">
<rect key="frame" x="200" y="0.0" width="175" height="250"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ncL-g5-JAo">
<rect key="frame" x="87.666666666666686" y="200" width="0.0" height="0.0"/>
<fontDescription key="fontDescription" type="system" pointSize="25"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Show Your Facial Expression" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="7l5-9A-CuQ" userLabel="Describe Label">
<rect key="frame" x="0.0" y="50" width="175" height="40.666666666666657"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
<constraints>
<constraint firstItem="7l5-9A-CuQ" firstAttribute="top" secondItem="Ihv-nt-mwe" secondAttribute="top" constant="50" id="0tz-hF-9h7"/>
<constraint firstItem="ncL-g5-JAo" firstAttribute="centerX" secondItem="Ihv-nt-mwe" secondAttribute="centerX" id="1rZ-Hk-pns"/>
<constraint firstAttribute="trailing" secondItem="7l5-9A-CuQ" secondAttribute="trailing" id="SQD-ll-Qop"/>
<constraint firstAttribute="bottom" secondItem="ncL-g5-JAo" secondAttribute="bottom" constant="50" id="UZW-Hi-PwF"/>
<constraint firstItem="7l5-9A-CuQ" firstAttribute="leading" secondItem="Ihv-nt-mwe" secondAttribute="leading" id="mfU-T7-ZNA"/>
</constraints>
</view>
</subviews>
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
<constraints>
<constraint firstItem="GOO-Pa-3H8" firstAttribute="leading" secondItem="yF4-1A-lpn" secondAttribute="leading" id="2tI-uk-d6l"/>
<constraint firstAttribute="bottom" secondItem="Ihv-nt-mwe" secondAttribute="bottom" id="5GY-y6-dZY"/>
<constraint firstAttribute="height" constant="250" id="EwU-Rs-E1f"/>
<constraint firstItem="Ihv-nt-mwe" firstAttribute="leading" secondItem="GOO-Pa-3H8" secondAttribute="trailing" id="WGO-06-6nc"/>
<constraint firstItem="Ihv-nt-mwe" firstAttribute="top" secondItem="yF4-1A-lpn" secondAttribute="top" id="azL-gq-Rje"/>
<constraint firstAttribute="bottom" secondItem="GOO-Pa-3H8" secondAttribute="bottom" id="jUl-AN-2uk"/>
<constraint firstItem="GOO-Pa-3H8" firstAttribute="top" secondItem="yF4-1A-lpn" secondAttribute="top" id="rDT-gT-BqA"/>
<constraint firstAttribute="trailing" secondItem="Ihv-nt-mwe" secondAttribute="trailing" id="xAJ-Rh-NoQ"/>
</constraints>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ZhC-D1-7na" userLabel="Expression View1">
<rect key="frame" x="0.0" y="475" width="187" height="30"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="49I-NX-neh">
<rect key="frame" x="126.66666666666667" y="4.6666666666666856" width="10.333333333333329" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="😀" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="zv4-Og-q4o" userLabel="Emoji Label1">
<rect key="frame" x="40" y="4.6666666666666856" width="23" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
<constraints>
<constraint firstAttribute="height" constant="30" id="GjB-HF-3J9"/>
<constraint firstAttribute="width" constant="187" id="aQ7-Nx-Z1j"/>
<constraint firstItem="zv4-Og-q4o" firstAttribute="leading" secondItem="ZhC-D1-7na" secondAttribute="leading" constant="40" id="ef4-w8-MYI"/>
<constraint firstItem="49I-NX-neh" firstAttribute="centerY" secondItem="ZhC-D1-7na" secondAttribute="centerY" id="jcW-78-fbP"/>
<constraint firstAttribute="trailing" secondItem="49I-NX-neh" secondAttribute="trailing" constant="50" id="qm4-m9-EQI"/>
<constraint firstItem="zv4-Og-q4o" firstAttribute="centerY" secondItem="ZhC-D1-7na" secondAttribute="centerY" id="x1B-ho-y2y"/>
</constraints>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Bsc-VE-nOz" userLabel="Expression View4">
<rect key="frame" x="188" y="505" width="187" height="30"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="😛" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="o4y-bW-8BJ" userLabel="Emoji Label4">
<rect key="frame" x="40" y="4.6666666666666856" width="23" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="rc7-qH-1mM">
<rect key="frame" x="126.66666666666667" y="4.6666666666666856" width="10.333333333333329" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
<constraints>
<constraint firstAttribute="trailing" secondItem="rc7-qH-1mM" secondAttribute="trailing" constant="50" id="2Kl-ma-axf"/>
<constraint firstItem="o4y-bW-8BJ" firstAttribute="leading" secondItem="Bsc-VE-nOz" secondAttribute="leading" constant="40" id="7zj-mK-t5w"/>
<constraint firstAttribute="height" constant="30" id="8zn-Sc-256"/>
<constraint firstAttribute="width" constant="187" id="Dkh-Oi-aGI"/>
<constraint firstItem="rc7-qH-1mM" firstAttribute="centerY" secondItem="Bsc-VE-nOz" secondAttribute="centerY" id="W9t-Dj-gtu"/>
<constraint firstItem="o4y-bW-8BJ" firstAttribute="centerY" secondItem="Bsc-VE-nOz" secondAttribute="centerY" id="adB-CV-XeE"/>
</constraints>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="UVb-Vr-AMc" userLabel="Expression View3">
<rect key="frame" x="0.0" y="505" width="187" height="30"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="😳" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="mBl-lr-d8H" userLabel="Emoji Label3">
<rect key="frame" x="40" y="4.6666666666666856" width="23" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Lrd-hK-bdr">
<rect key="frame" x="126.66666666666667" y="4.6666666666666856" width="10.333333333333329" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
<constraints>
<constraint firstItem="mBl-lr-d8H" firstAttribute="centerY" secondItem="UVb-Vr-AMc" secondAttribute="centerY" id="D1A-fl-If1"/>
<constraint firstItem="Lrd-hK-bdr" firstAttribute="centerY" secondItem="UVb-Vr-AMc" secondAttribute="centerY" id="Noo-At-eDM"/>
<constraint firstAttribute="height" constant="30" id="Qpq-SP-rmz"/>
<constraint firstAttribute="width" constant="187" id="rot-rl-rnW"/>
<constraint firstItem="mBl-lr-d8H" firstAttribute="leading" secondItem="UVb-Vr-AMc" secondAttribute="leading" constant="40" id="tAy-aE-rf8"/>
<constraint firstAttribute="trailing" secondItem="Lrd-hK-bdr" secondAttribute="trailing" constant="50" id="twH-Go-mag"/>
</constraints>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="6b6-sp-Kkp" userLabel="Expression View2">
<rect key="frame" x="188" y="475" width="187" height="30"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="😧" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="oPD-7K-hoP" userLabel="Emoji Label2">
<rect key="frame" x="40" y="4.6666666666666856" width="23" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="CWA-Cj-DS7">
<rect key="frame" x="126.66666666666667" y="4.6666666666666856" width="10.333333333333329" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
<constraints>
<constraint firstItem="oPD-7K-hoP" firstAttribute="leading" secondItem="6b6-sp-Kkp" secondAttribute="leading" constant="40" id="91y-bL-Tgx"/>
<constraint firstAttribute="trailing" secondItem="CWA-Cj-DS7" secondAttribute="trailing" constant="50" id="CkX-jh-xPX"/>
<constraint firstItem="CWA-Cj-DS7" firstAttribute="centerY" secondItem="6b6-sp-Kkp" secondAttribute="centerY" id="Gf3-op-6M6"/>
<constraint firstItem="oPD-7K-hoP" firstAttribute="centerY" secondItem="6b6-sp-Kkp" secondAttribute="centerY" id="hOa-bR-qqM"/>
<constraint firstAttribute="width" constant="187" id="kyO-7F-j6b"/>
<constraint firstAttribute="height" constant="30" id="sNb-u6-dno"/>
</constraints>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ETI-CF-ume" userLabel="Expression View5">
<rect key="frame" x="0.0" y="535" width="187" height="30"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="🤢" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="l6s-5g-m0t" userLabel="Emoji Label5">
<rect key="frame" x="40" y="4.6666666666666288" width="23" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="KvS-wX-pit">
<rect key="frame" x="126.66666666666667" y="4.6666666666666288" width="10.333333333333329" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
<constraints>
<constraint firstAttribute="width" constant="187" id="3uL-mI-bCh"/>
<constraint firstItem="l6s-5g-m0t" firstAttribute="leading" secondItem="ETI-CF-ume" secondAttribute="leading" constant="40" id="C5x-jh-kq5"/>
<constraint firstItem="KvS-wX-pit" firstAttribute="centerY" secondItem="ETI-CF-ume" secondAttribute="centerY" id="H0b-tb-Wrr"/>
<constraint firstAttribute="height" constant="30" id="Nh5-IZ-EPN"/>
<constraint firstAttribute="trailing" secondItem="KvS-wX-pit" secondAttribute="trailing" constant="50" id="aiP-pd-cFA"/>
<constraint firstItem="l6s-5g-m0t" firstAttribute="centerY" secondItem="ETI-CF-ume" secondAttribute="centerY" id="wlv-Z7-1Jx"/>
</constraints>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="3JK-f4-SkW" userLabel="Expression View6">
<rect key="frame" x="188" y="535" width="187" height="30"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="😊" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="2cV-Zc-9uX" userLabel="Emoji Label6">
<rect key="frame" x="40" y="4.6666666666666288" width="23" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="9q1-jD-6X5">
<rect key="frame" x="126.66666666666667" y="4.6666666666666288" width="10.333333333333329" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
<constraints>
<constraint firstAttribute="height" constant="30" id="5Ip-9N-tzf"/>
<constraint firstItem="9q1-jD-6X5" firstAttribute="centerY" secondItem="3JK-f4-SkW" secondAttribute="centerY" id="AjH-rS-hMO"/>
<constraint firstItem="2cV-Zc-9uX" firstAttribute="centerY" secondItem="3JK-f4-SkW" secondAttribute="centerY" id="G2X-1w-nfA"/>
<constraint firstAttribute="width" constant="187" id="Hk6-2H-5BV"/>
<constraint firstItem="9q1-jD-6X5" firstAttribute="centerY" secondItem="3JK-f4-SkW" secondAttribute="centerY" id="MJo-9X-HTn"/>
<constraint firstItem="2cV-Zc-9uX" firstAttribute="leading" secondItem="3JK-f4-SkW" secondAttribute="leading" constant="40" id="Mwq-T9-Lad"/>
<constraint firstAttribute="trailing" secondItem="9q1-jD-6X5" secondAttribute="trailing" constant="50" id="cx7-gd-jx7"/>
<constraint firstItem="2cV-Zc-9uX" firstAttribute="centerY" secondItem="3JK-f4-SkW" secondAttribute="centerY" id="czG-6Y-y4O"/>
</constraints>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="3ve-a3-NIJ" userLabel="Result View">
<rect key="frame" x="0.0" y="565" width="375" height="80"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Result" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="2Po-2M-1NN">
<rect key="frame" x="160.33333333333334" y="28" width="54.666666666666657" height="24"/>
<fontDescription key="fontDescription" type="system" pointSize="20"/>
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" systemColor="systemTealColor" red="0.35294117650000001" green="0.7843137255" blue="0.98039215690000003" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="2Po-2M-1NN" firstAttribute="centerX" secondItem="3ve-a3-NIJ" secondAttribute="centerX" id="HD3-Ga-F5M"/>
<constraint firstItem="2Po-2M-1NN" firstAttribute="centerY" secondItem="3ve-a3-NIJ" secondAttribute="centerY" id="HPS-7H-jNH"/>
<constraint firstAttribute="height" constant="80" id="i3M-7i-aRk"/>
</constraints>
</view>
</subviews>
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
<constraints>
<constraint firstItem="yF4-1A-lpn" firstAttribute="leading" secondItem="IHb-Tq-DWS" secondAttribute="leading" id="13e-dG-Vhd"/>
<constraint firstItem="IHb-Tq-DWS" firstAttribute="trailing" secondItem="3ve-a3-NIJ" secondAttribute="trailing" id="1y8-tT-gIW"/>
<constraint firstItem="IHb-Tq-DWS" firstAttribute="trailing" secondItem="6b6-sp-Kkp" secondAttribute="trailing" id="Ecn-Yi-tuY"/>
<constraint firstItem="yF4-1A-lpn" firstAttribute="top" secondItem="IHb-Tq-DWS" secondAttribute="top" constant="225" id="IvY-Xf-Tv3"/>
<constraint firstItem="6b6-sp-Kkp" firstAttribute="top" secondItem="yF4-1A-lpn" secondAttribute="bottom" id="ODq-jz-bme"/>
<constraint firstItem="3JK-f4-SkW" firstAttribute="top" secondItem="UVb-Vr-AMc" secondAttribute="bottom" id="OI0-dg-zaq"/>
<constraint firstItem="UVb-Vr-AMc" firstAttribute="leading" secondItem="WJS-7U-AZj" secondAttribute="leading" id="RgC-5O-SGe"/>
<constraint firstItem="ETI-CF-ume" firstAttribute="leading" secondItem="WJS-7U-AZj" secondAttribute="leading" id="UlC-Rn-aTB"/>
<constraint firstItem="IHb-Tq-DWS" firstAttribute="trailing" secondItem="yF4-1A-lpn" secondAttribute="trailing" id="X9u-LU-J2M"/>
<constraint firstItem="ZhC-D1-7na" firstAttribute="top" secondItem="yF4-1A-lpn" secondAttribute="bottom" id="Yd1-sb-jwL"/>
<constraint firstItem="ZhC-D1-7na" firstAttribute="leading" secondItem="IHb-Tq-DWS" secondAttribute="leading" id="gKa-dz-XmM"/>
<constraint firstAttribute="trailing" secondItem="Bsc-VE-nOz" secondAttribute="trailing" id="gnG-og-IrU"/>
<constraint firstItem="3ve-a3-NIJ" firstAttribute="leading" secondItem="IHb-Tq-DWS" secondAttribute="leading" id="mkh-bb-Z7l"/>
<constraint firstItem="3ve-a3-NIJ" firstAttribute="top" secondItem="ETI-CF-ume" secondAttribute="bottom" id="mpq-ep-geT"/>
<constraint firstItem="Bsc-VE-nOz" firstAttribute="top" secondItem="6b6-sp-Kkp" secondAttribute="bottom" id="q7t-ze-bQ8"/>
<constraint firstItem="ETI-CF-ume" firstAttribute="top" secondItem="Bsc-VE-nOz" secondAttribute="bottom" id="rqz-24-biH"/>
<constraint firstItem="UVb-Vr-AMc" firstAttribute="top" secondItem="6b6-sp-Kkp" secondAttribute="bottom" id="sXR-9G-q3P"/>
<constraint firstItem="IHb-Tq-DWS" firstAttribute="trailing" secondItem="3JK-f4-SkW" secondAttribute="trailing" id="uPf-aG-EAm"/>
</constraints>
<viewLayoutGuide key="safeArea" id="IHb-Tq-DWS"/>
</view>
<navigationItem key="navigationItem" id="Tro-oq-hvX"/>
<connections>
<outlet property="expression1" destination="49I-NX-neh" id="QzN-FH-oGW"/>
<outlet property="expression2" destination="CWA-Cj-DS7" id="9UR-hH-IIa"/>
<outlet property="expression3" destination="Lrd-hK-bdr" id="oSG-bz-v6A"/>
<outlet property="expression4" destination="rc7-qH-1mM" id="4nj-d8-So7"/>
<outlet property="expression5" destination="KvS-wX-pit" id="cSN-4q-mnG"/>
<outlet property="expression6" destination="9q1-jD-6X5" id="Uxg-zC-oOI"/>
<outlet property="expressionLabel" destination="ncL-g5-JAo" id="mn0-xt-uyH"/>
<outlet property="resultLabel" destination="2Po-2M-1NN" id="6y5-wC-Hm9"/>
<outlet property="sceneView" destination="GOO-Pa-3H8" id="3d5-d6-9Mw"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="XNA-rN-fYo" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="963.76811594202911" y="138.61607142857142"/>
</scene>
</scenes>
<resources>
<image name="Extract
Facial Expression
on playing video" width="767" height="355"/>
</resources>
</document>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>UIApplicationSceneManifest</key>
<dict>
<key>UIApplicationSupportsMultipleScenes</key>
<false/>
<key>UISceneConfigurations</key>
<dict>
<key>UIWindowSceneSessionRoleApplication</key>
<array>
<dict>
<key>UISceneConfigurationName</key>
<string>Default Configuration</string>
<key>UISceneDelegateClassName</key>
<string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
<key>UISceneStoryboardFile</key>
<string>Main</string>
</dict>
</array>
</dict>
</dict>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>NSCameraUsageDescription</key>
<string></string>
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>armv7</string>
<string>arkit</string>
</array>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
</dict>
</plist>
//
// SceneDelegate.swift
// extract_facial_expression
//
// Created by Jerry kim on 2020/06/11.
// Copyright © 2020 hoya. All rights reserved.
//
import UIKit
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
// Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
// If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
// This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
guard let _ = (scene as? UIWindowScene) else { return }
}
func sceneDidDisconnect(_ scene: UIScene) {
// Called as the scene is being released by the system.
// This occurs shortly after the scene enters the background, or when its session is discarded.
// Release any resources associated with this scene that can be re-created the next time the scene connects.
// The scene may re-connect later, as its session was not neccessarily discarded (see `application:didDiscardSceneSessions` instead).
}
func sceneDidBecomeActive(_ scene: UIScene) {
// Called when the scene has moved from an inactive state to an active state.
// Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive.
}
func sceneWillResignActive(_ scene: UIScene) {
// Called when the scene will move from an active state to an inactive state.
// This may occur due to temporary interruptions (ex. an incoming phone call).
}
func sceneWillEnterForeground(_ scene: UIScene) {
// Called as the scene transitions from the background to the foreground.
// Use this method to undo the changes made on entering the background.
}
func sceneDidEnterBackground(_ scene: UIScene) {
// Called as the scene transitions from the foreground to the background.
// Use this method to save data, release shared resources, and store enough scene-specific state information
// to restore the scene back to its current state.
}
}
//
// VideoViewController.swift
// extract_facial_expression
//
// Created by Jerry kim on 2020/06/11.
// Copyright © 2020 hoya. All rights reserved.
//
import UIKit
import AVFoundation
import ARKit
class VideoViewController: UIViewController, ARSCNViewDelegate {
let videoPlayerView = UIView()
var player: AVPlayer?
public struct emotions {
let expression: String
let count: Int
}
@IBOutlet var sceneView: ARSCNView!
@IBOutlet weak var expressionLabel: UILabel!
@IBOutlet weak var expression1: UILabel! // smile
@IBOutlet weak var expression2: UILabel! // dumbfounded
@IBOutlet weak var expression3: UILabel! // suprise
@IBOutlet weak var expression4: UILabel! // nyah
@IBOutlet weak var expression5: UILabel! // awful
@IBOutlet weak var expression6: UILabel! // eye smile
@IBOutlet weak var resultLabel: UILabel! // result label
var faceExpression = ""
var count1 = 0 // smile
var count2 = 0 // dumbfounded
var count3 = 0 // suprise
var count4 = 0 // nyah
var count5 = 0 // awful
var count6 = 0 // eye smile
// Sample Videos
let videos = ["http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4",
"http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ElephantsDream.mp4",
"http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerBlazes.mp4",
"http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerEscapes.mp4",
"http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerFun.mp4",
"http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerJoyrides.mp4",
"http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerMeltdowns.mp4",
"http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/SubaruOutbackOnStreetAndDirt.mp4",
"http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/TearsOfSteel.mp4"]
override func viewDidLoad() {
super.viewDidLoad()
videoPlayerView.backgroundColor = UIColor.white
videoPlayerView.translatesAutoresizingMaskIntoConstraints = false
// Add constraints, pinnning each of the four sides
// let topConstraint = NSLayoutConstraint(item: videoPlayerView, attribute: .top, relatedBy: .equal, toItem: view, attribute: .top, multiplier: 1, constant: 0)
// let bottomConstraint = NSLayoutConstraint(item: videoPlayerView, attribute: .bottom, relatedBy: .equal, toItem: view, attribute: .bottom, multiplier: 1, constant: 0)
// let leadingConstraint = NSLayoutConstraint(item: videoPlayerView, attribute: .leading, relatedBy: .equal, toItem: view, attribute: .leading, multiplier: 1, constant: 0)
// let trailingConstraint = NSLayoutConstraint(item: videoPlayerView, attribute: .trailing, relatedBy: .equal, toItem: view, attribute: .trailing, multiplier: 1, constant: 0)
view.addSubview(videoPlayerView)
videoPlayerView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
videoPlayerView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
videoPlayerView.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 0.3).isActive = true
videoPlayerView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true
// view.addConstraints([topConstraint, bottomConstraint, leadingConstraint, trailingConstraint])
view.sendSubviewToBack(videoPlayerView)
// for ARSCNView
guard ARFaceTrackingConfiguration.isSupported else {
fatalError("Face tracking not available on this on this device model!")
}
sceneView.delegate = self
sceneView.showsStatistics = true
// sceneView.translatesAutoresizingMaskIntoConstraints = false
// sceneView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
// sceneView.topAnchor.constraint(equalToSystemSpacingBelow: videoPlayerView.bottomAnchor, multiplier: 0.3).isActive = true
// sceneView.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 0.3).isActive = true
}
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
// for view video, left landscape
return .landscapeLeft
}
func setupVideoPlayer() { // Play random video
let randNum = arc4random_uniform(9)
guard let url = URL(string: self.videos[Int(randNum)]) else {
return
}
player = AVPlayer(url: url)
let playerLayer = AVPlayerLayer(player: player)
playerLayer.frame = videoPlayerView.bounds
videoPlayerView.layer.addSublayer(playerLayer)
player?.play()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// Create a session configuration
let configuration = ARFaceTrackingConfiguration()
// Run the view's session
sceneView.session.run(configuration)
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
// Pause the view's session
sceneView.session.pause()
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
setupVideoPlayer()
}
func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode? {
let faceMesh = ARSCNFaceGeometry(device: sceneView.device!)
let node = SCNNode(geometry: faceMesh)
node.geometry?.firstMaterial?.fillMode = .lines
return node
}
func renderer(_ renderer: SCNSceneRenderer, didUpdate node: SCNNode, for anchor: ARAnchor) {
if let faceAnchor = anchor as? ARFaceAnchor, let faceGeometry = node.geometry as? ARSCNFaceGeometry {
faceGeometry.update(from: faceAnchor.geometry)
facePoseAnalyzer(anchor: faceAnchor)
DispatchQueue.main.async {
self.expressionLabel.text = self.faceExpression
self.expression1.text = String(self.count1)
self.expression2.text = String(self.count2)
self.expression3.text = String(self.count3)
self.expression4.text = String(self.count4)
self.expression5.text = String(self.count5)
self.expression6.text = String(self.count6)
self.extractMost()
}
}
}
func extractMost() {
let structedArray = [
emotions(expression: "smile", count: self.count1),
emotions(expression: "dumbfounded", count: self.count2),
emotions(expression: "surprise", count: self.count3),
emotions(expression: "nyah", count: self.count4),
emotions(expression: "awful", count: self.count5),
emotions(expression: "eye smile", count: self.count6)
]
let sortedArray = structedArray.sorted(by: {$0.count > $1.count})
self.resultLabel.text = sortedArray[0].expression
}
func facePoseAnalyzer(anchor: ARFaceAnchor) {
let smileLeft = anchor.blendShapes[.mouthSmileLeft]
let smileRight = anchor.blendShapes[.mouthSmileRight]
let innerUp = anchor.blendShapes[.browInnerUp]
let tongue = anchor.blendShapes[.tongueOut]
let eyeBlinkLeft = anchor.blendShapes[.eyeBlinkLeft]
let jawOpen = anchor.blendShapes[.jawOpen]
let mouthFrownLeft = anchor.blendShapes[.mouthFrownLeft]
let mouthFrownRight = anchor.blendShapes[.mouthFrownRight]
var newFaceExpression = ""
if ((smileLeft?.decimalValue ?? 0.0) + (smileRight?.decimalValue ?? 0.0)) > 0.9 {
newFaceExpression = "😀"
self.count1 = self.count1 + 1
}
if ((jawOpen?.decimalValue ?? 0.0) + (innerUp?.decimalValue ?? 0.0)) > 0.85 {
newFaceExpression = "😧"
self.count2 = self.count2 + 1
}
if innerUp?.decimalValue ?? 0.0 > 0.8 {
newFaceExpression = "😳"
self.count3 = self.count3 + 1
}
if tongue?.decimalValue ?? 0.0 > 0.08 {
newFaceExpression = "😛"
self.count4 = self.count4 + 1
}
if (mouthFrownLeft?.decimalValue ?? 0.0) > 0.3 || (mouthFrownRight?.decimalValue ?? 0.0) > 0.3 {
newFaceExpression = "🤢"
self.count5 = self.count5 + 1
}
if eyeBlinkLeft?.decimalValue ?? 0.0 > 0.5 {
newFaceExpression = "😊"
self.count6 = self.count6 + 1
}
if self.faceExpression != newFaceExpression {
self.faceExpression = newFaceExpression
}
// if cheekPuff?.decimalValue ?? 0.0 > 0.5 {
// newFaceExpression = "🤢"
// self.count5 = self.count5 + 1
// }
}
func session(_ session: ARSession, didFailWithError error: Error) {
// Present an error message to the user
}
func sessionWasInterrupted(_ session: ARSession) {
// Inform the user that the session has been interrupted, for example, by presenting an overlay
}
func sessionInterruptionEnded(_ session: ARSession) {
// Reset tracking and/or remove existing anchors if consistent tracking is required
}
}
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="16097" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<device id="retina6_1" orientation="landscape" appearance="light"/>
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="16087"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" id="m5W-Np-e6E">
<rect key="frame" x="0.0" y="0.0" width="896" height="414"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="2IZ-Qo-Rl0">
<rect key="frame" x="425" y="192" width="46" height="30"/>
<state key="normal" title="Button"/>
</button>
</subviews>
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
<constraints>
<constraint firstItem="2IZ-Qo-Rl0" firstAttribute="centerY" secondItem="m5W-Np-e6E" secondAttribute="centerY" id="Xpn-17-T2q"/>
<constraint firstItem="2IZ-Qo-Rl0" firstAttribute="centerX" secondItem="m5W-Np-e6E" secondAttribute="centerX" id="xUd-ag-9LJ"/>
</constraints>
<viewLayoutGuide key="safeArea" id="1md-eY-o7C"/>
<point key="canvasLocation" x="139" y="154"/>
</view>
</objects>
</document>
//
// ViewController.swift
// extract_facial_expression
//
// Created by Jerry kim on 2020/06/11.
// Copyright © 2020 hoya. All rights reserved.
//
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
}