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
1 +// !$*UTF8*$!
2 +{
3 + archiveVersion = 1;
4 + classes = {
5 + };
6 + objectVersion = 50;
7 + objects = {
8 +
9 +/* Begin PBXBuildFile section */
10 + B2C21D262492033C00C4BF34 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2C21D252492033C00C4BF34 /* AppDelegate.swift */; };
11 + B2C21D282492033C00C4BF34 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2C21D272492033C00C4BF34 /* SceneDelegate.swift */; };
12 + B2C21D2A2492033C00C4BF34 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2C21D292492033C00C4BF34 /* ViewController.swift */; };
13 + B2C21D2D2492033C00C4BF34 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B2C21D2B2492033C00C4BF34 /* Main.storyboard */; };
14 + B2C21D2F2492033F00C4BF34 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B2C21D2E2492033F00C4BF34 /* Assets.xcassets */; };
15 + B2C21D322492033F00C4BF34 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B2C21D302492033F00C4BF34 /* LaunchScreen.storyboard */; };
16 + B2C21D3A249208FF00C4BF34 /* VideoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2C21D39249208FF00C4BF34 /* VideoViewController.swift */; };
17 +/* End PBXBuildFile section */
18 +
19 +/* Begin PBXFileReference section */
20 + B2C21D222492033C00C4BF34 /* ExtractFacialExpression.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ExtractFacialExpression.app; sourceTree = BUILT_PRODUCTS_DIR; };
21 + B2C21D252492033C00C4BF34 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
22 + B2C21D272492033C00C4BF34 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; };
23 + B2C21D292492033C00C4BF34 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = "<group>"; };
24 + B2C21D2C2492033C00C4BF34 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
25 + B2C21D2E2492033F00C4BF34 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
26 + B2C21D312492033F00C4BF34 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
27 + B2C21D332492033F00C4BF34 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
28 + B2C21D39249208FF00C4BF34 /* VideoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VideoViewController.swift; sourceTree = "<group>"; };
29 +/* End PBXFileReference section */
30 +
31 +/* Begin PBXFrameworksBuildPhase section */
32 + B2C21D1F2492033C00C4BF34 /* Frameworks */ = {
33 + isa = PBXFrameworksBuildPhase;
34 + buildActionMask = 2147483647;
35 + files = (
36 + );
37 + runOnlyForDeploymentPostprocessing = 0;
38 + };
39 +/* End PBXFrameworksBuildPhase section */
40 +
41 +/* Begin PBXGroup section */
42 + B2C21D192492033C00C4BF34 = {
43 + isa = PBXGroup;
44 + children = (
45 + B2C21D242492033C00C4BF34 /* extract_facial_expression */,
46 + B2C21D232492033C00C4BF34 /* Products */,
47 + );
48 + sourceTree = "<group>";
49 + };
50 + B2C21D232492033C00C4BF34 /* Products */ = {
51 + isa = PBXGroup;
52 + children = (
53 + B2C21D222492033C00C4BF34 /* ExtractFacialExpression.app */,
54 + );
55 + name = Products;
56 + sourceTree = "<group>";
57 + };
58 + B2C21D242492033C00C4BF34 /* extract_facial_expression */ = {
59 + isa = PBXGroup;
60 + children = (
61 + B2C21D252492033C00C4BF34 /* AppDelegate.swift */,
62 + B2C21D272492033C00C4BF34 /* SceneDelegate.swift */,
63 + B2C21D292492033C00C4BF34 /* ViewController.swift */,
64 + B2C21D2B2492033C00C4BF34 /* Main.storyboard */,
65 + B2C21D2E2492033F00C4BF34 /* Assets.xcassets */,
66 + B2C21D302492033F00C4BF34 /* LaunchScreen.storyboard */,
67 + B2C21D332492033F00C4BF34 /* Info.plist */,
68 + B2C21D39249208FF00C4BF34 /* VideoViewController.swift */,
69 + );
70 + path = extract_facial_expression;
71 + sourceTree = "<group>";
72 + };
73 +/* End PBXGroup section */
74 +
75 +/* Begin PBXNativeTarget section */
76 + B2C21D212492033C00C4BF34 /* extract_facial_expression */ = {
77 + isa = PBXNativeTarget;
78 + buildConfigurationList = B2C21D362492033F00C4BF34 /* Build configuration list for PBXNativeTarget "extract_facial_expression" */;
79 + buildPhases = (
80 + B2C21D1E2492033C00C4BF34 /* Sources */,
81 + B2C21D1F2492033C00C4BF34 /* Frameworks */,
82 + B2C21D202492033C00C4BF34 /* Resources */,
83 + );
84 + buildRules = (
85 + );
86 + dependencies = (
87 + );
88 + name = extract_facial_expression;
89 + productName = extract_facial_expression;
90 + productReference = B2C21D222492033C00C4BF34 /* ExtractFacialExpression.app */;
91 + productType = "com.apple.product-type.application";
92 + };
93 +/* End PBXNativeTarget section */
94 +
95 +/* Begin PBXProject section */
96 + B2C21D1A2492033C00C4BF34 /* Project object */ = {
97 + isa = PBXProject;
98 + attributes = {
99 + LastSwiftUpdateCheck = 1150;
100 + LastUpgradeCheck = 1150;
101 + ORGANIZATIONNAME = hoya;
102 + TargetAttributes = {
103 + B2C21D212492033C00C4BF34 = {
104 + CreatedOnToolsVersion = 11.5;
105 + };
106 + };
107 + };
108 + buildConfigurationList = B2C21D1D2492033C00C4BF34 /* Build configuration list for PBXProject "extract_facial_expression" */;
109 + compatibilityVersion = "Xcode 9.3";
110 + developmentRegion = en;
111 + hasScannedForEncodings = 0;
112 + knownRegions = (
113 + en,
114 + Base,
115 + );
116 + mainGroup = B2C21D192492033C00C4BF34;
117 + productRefGroup = B2C21D232492033C00C4BF34 /* Products */;
118 + projectDirPath = "";
119 + projectRoot = "";
120 + targets = (
121 + B2C21D212492033C00C4BF34 /* extract_facial_expression */,
122 + );
123 + };
124 +/* End PBXProject section */
125 +
126 +/* Begin PBXResourcesBuildPhase section */
127 + B2C21D202492033C00C4BF34 /* Resources */ = {
128 + isa = PBXResourcesBuildPhase;
129 + buildActionMask = 2147483647;
130 + files = (
131 + B2C21D322492033F00C4BF34 /* LaunchScreen.storyboard in Resources */,
132 + B2C21D2F2492033F00C4BF34 /* Assets.xcassets in Resources */,
133 + B2C21D2D2492033C00C4BF34 /* Main.storyboard in Resources */,
134 + );
135 + runOnlyForDeploymentPostprocessing = 0;
136 + };
137 +/* End PBXResourcesBuildPhase section */
138 +
139 +/* Begin PBXSourcesBuildPhase section */
140 + B2C21D1E2492033C00C4BF34 /* Sources */ = {
141 + isa = PBXSourcesBuildPhase;
142 + buildActionMask = 2147483647;
143 + files = (
144 + B2C21D2A2492033C00C4BF34 /* ViewController.swift in Sources */,
145 + B2C21D262492033C00C4BF34 /* AppDelegate.swift in Sources */,
146 + B2C21D3A249208FF00C4BF34 /* VideoViewController.swift in Sources */,
147 + B2C21D282492033C00C4BF34 /* SceneDelegate.swift in Sources */,
148 + );
149 + runOnlyForDeploymentPostprocessing = 0;
150 + };
151 +/* End PBXSourcesBuildPhase section */
152 +
153 +/* Begin PBXVariantGroup section */
154 + B2C21D2B2492033C00C4BF34 /* Main.storyboard */ = {
155 + isa = PBXVariantGroup;
156 + children = (
157 + B2C21D2C2492033C00C4BF34 /* Base */,
158 + );
159 + name = Main.storyboard;
160 + sourceTree = "<group>";
161 + };
162 + B2C21D302492033F00C4BF34 /* LaunchScreen.storyboard */ = {
163 + isa = PBXVariantGroup;
164 + children = (
165 + B2C21D312492033F00C4BF34 /* Base */,
166 + );
167 + name = LaunchScreen.storyboard;
168 + sourceTree = "<group>";
169 + };
170 +/* End PBXVariantGroup section */
171 +
172 +/* Begin XCBuildConfiguration section */
173 + B2C21D342492033F00C4BF34 /* Debug */ = {
174 + isa = XCBuildConfiguration;
175 + buildSettings = {
176 + ALWAYS_SEARCH_USER_PATHS = NO;
177 + CLANG_ANALYZER_NONNULL = YES;
178 + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
179 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
180 + CLANG_CXX_LIBRARY = "libc++";
181 + CLANG_ENABLE_MODULES = YES;
182 + CLANG_ENABLE_OBJC_ARC = YES;
183 + CLANG_ENABLE_OBJC_WEAK = YES;
184 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
185 + CLANG_WARN_BOOL_CONVERSION = YES;
186 + CLANG_WARN_COMMA = YES;
187 + CLANG_WARN_CONSTANT_CONVERSION = YES;
188 + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
189 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
190 + CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
191 + CLANG_WARN_EMPTY_BODY = YES;
192 + CLANG_WARN_ENUM_CONVERSION = YES;
193 + CLANG_WARN_INFINITE_RECURSION = YES;
194 + CLANG_WARN_INT_CONVERSION = YES;
195 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
196 + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
197 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
198 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
199 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
200 + CLANG_WARN_STRICT_PROTOTYPES = YES;
201 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
202 + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
203 + CLANG_WARN_UNREACHABLE_CODE = YES;
204 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
205 + COPY_PHASE_STRIP = NO;
206 + DEBUG_INFORMATION_FORMAT = dwarf;
207 + ENABLE_STRICT_OBJC_MSGSEND = YES;
208 + ENABLE_TESTABILITY = YES;
209 + GCC_C_LANGUAGE_STANDARD = gnu11;
210 + GCC_DYNAMIC_NO_PIC = NO;
211 + GCC_NO_COMMON_BLOCKS = YES;
212 + GCC_OPTIMIZATION_LEVEL = 0;
213 + GCC_PREPROCESSOR_DEFINITIONS = (
214 + "DEBUG=1",
215 + "$(inherited)",
216 + );
217 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
218 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
219 + GCC_WARN_UNDECLARED_SELECTOR = YES;
220 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
221 + GCC_WARN_UNUSED_FUNCTION = YES;
222 + GCC_WARN_UNUSED_VARIABLE = YES;
223 + IPHONEOS_DEPLOYMENT_TARGET = 13.5;
224 + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
225 + MTL_FAST_MATH = YES;
226 + ONLY_ACTIVE_ARCH = YES;
227 + SDKROOT = iphoneos;
228 + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
229 + SWIFT_OPTIMIZATION_LEVEL = "-Onone";
230 + };
231 + name = Debug;
232 + };
233 + B2C21D352492033F00C4BF34 /* Release */ = {
234 + isa = XCBuildConfiguration;
235 + buildSettings = {
236 + ALWAYS_SEARCH_USER_PATHS = NO;
237 + CLANG_ANALYZER_NONNULL = YES;
238 + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
239 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
240 + CLANG_CXX_LIBRARY = "libc++";
241 + CLANG_ENABLE_MODULES = YES;
242 + CLANG_ENABLE_OBJC_ARC = YES;
243 + CLANG_ENABLE_OBJC_WEAK = YES;
244 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
245 + CLANG_WARN_BOOL_CONVERSION = YES;
246 + CLANG_WARN_COMMA = YES;
247 + CLANG_WARN_CONSTANT_CONVERSION = YES;
248 + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
249 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
250 + CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
251 + CLANG_WARN_EMPTY_BODY = YES;
252 + CLANG_WARN_ENUM_CONVERSION = YES;
253 + CLANG_WARN_INFINITE_RECURSION = YES;
254 + CLANG_WARN_INT_CONVERSION = YES;
255 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
256 + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
257 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
258 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
259 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
260 + CLANG_WARN_STRICT_PROTOTYPES = YES;
261 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
262 + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
263 + CLANG_WARN_UNREACHABLE_CODE = YES;
264 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
265 + COPY_PHASE_STRIP = NO;
266 + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
267 + ENABLE_NS_ASSERTIONS = NO;
268 + ENABLE_STRICT_OBJC_MSGSEND = YES;
269 + GCC_C_LANGUAGE_STANDARD = gnu11;
270 + GCC_NO_COMMON_BLOCKS = YES;
271 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
272 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
273 + GCC_WARN_UNDECLARED_SELECTOR = YES;
274 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
275 + GCC_WARN_UNUSED_FUNCTION = YES;
276 + GCC_WARN_UNUSED_VARIABLE = YES;
277 + IPHONEOS_DEPLOYMENT_TARGET = 13.5;
278 + MTL_ENABLE_DEBUG_INFO = NO;
279 + MTL_FAST_MATH = YES;
280 + SDKROOT = iphoneos;
281 + SWIFT_COMPILATION_MODE = wholemodule;
282 + SWIFT_OPTIMIZATION_LEVEL = "-O";
283 + VALIDATE_PRODUCT = YES;
284 + };
285 + name = Release;
286 + };
287 + B2C21D372492033F00C4BF34 /* Debug */ = {
288 + isa = XCBuildConfiguration;
289 + buildSettings = {
290 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
291 + CODE_SIGN_STYLE = Automatic;
292 + DEVELOPMENT_TEAM = WEV3B59JPF;
293 + INFOPLIST_FILE = extract_facial_expression/Info.plist;
294 + IPHONEOS_DEPLOYMENT_TARGET = 13.2;
295 + LD_RUNPATH_SEARCH_PATHS = (
296 + "$(inherited)",
297 + "@executable_path/Frameworks",
298 + );
299 + PRODUCT_BUNDLE_IDENTIFIER = com.hoya.ExtractFacialExpression;
300 + PRODUCT_NAME = ExtractFacialExpression;
301 + SWIFT_VERSION = 5.0;
302 + TARGETED_DEVICE_FAMILY = "1,2";
303 + };
304 + name = Debug;
305 + };
306 + B2C21D382492033F00C4BF34 /* Release */ = {
307 + isa = XCBuildConfiguration;
308 + buildSettings = {
309 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
310 + CODE_SIGN_STYLE = Automatic;
311 + DEVELOPMENT_TEAM = WEV3B59JPF;
312 + INFOPLIST_FILE = extract_facial_expression/Info.plist;
313 + IPHONEOS_DEPLOYMENT_TARGET = 13.2;
314 + LD_RUNPATH_SEARCH_PATHS = (
315 + "$(inherited)",
316 + "@executable_path/Frameworks",
317 + );
318 + PRODUCT_BUNDLE_IDENTIFIER = com.hoya.ExtractFacialExpression;
319 + PRODUCT_NAME = ExtractFacialExpression;
320 + SWIFT_VERSION = 5.0;
321 + TARGETED_DEVICE_FAMILY = "1,2";
322 + };
323 + name = Release;
324 + };
325 +/* End XCBuildConfiguration section */
326 +
327 +/* Begin XCConfigurationList section */
328 + B2C21D1D2492033C00C4BF34 /* Build configuration list for PBXProject "extract_facial_expression" */ = {
329 + isa = XCConfigurationList;
330 + buildConfigurations = (
331 + B2C21D342492033F00C4BF34 /* Debug */,
332 + B2C21D352492033F00C4BF34 /* Release */,
333 + );
334 + defaultConfigurationIsVisible = 0;
335 + defaultConfigurationName = Release;
336 + };
337 + B2C21D362492033F00C4BF34 /* Build configuration list for PBXNativeTarget "extract_facial_expression" */ = {
338 + isa = XCConfigurationList;
339 + buildConfigurations = (
340 + B2C21D372492033F00C4BF34 /* Debug */,
341 + B2C21D382492033F00C4BF34 /* Release */,
342 + );
343 + defaultConfigurationIsVisible = 0;
344 + defaultConfigurationName = Release;
345 + };
346 +/* End XCConfigurationList section */
347 + };
348 + rootObject = B2C21D1A2492033C00C4BF34 /* Project object */;
349 +}
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<Workspace
3 + version = "1.0">
4 + <FileRef
5 + location = "self:extract_facial_expression.xcodeproj">
6 + </FileRef>
7 +</Workspace>
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3 +<plist version="1.0">
4 +<dict>
5 + <key>IDEDidComputeMac32BitWarning</key>
6 + <true/>
7 +</dict>
8 +</plist>
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3 +<plist version="1.0">
4 +<dict>
5 + <key>SchemeUserState</key>
6 + <dict>
7 + <key>extract_facial_expression.xcscheme_^#shared#^_</key>
8 + <dict>
9 + <key>orderHint</key>
10 + <integer>0</integer>
11 + </dict>
12 + </dict>
13 +</dict>
14 +</plist>
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3 +<plist version="1.0">
4 +<dict>
5 + <key>SchemeUserState</key>
6 + <dict>
7 + <key>extract_facial_expression.xcscheme_^#shared#^_</key>
8 + <dict>
9 + <key>orderHint</key>
10 + <integer>0</integer>
11 + </dict>
12 + </dict>
13 +</dict>
14 +</plist>
1 +//
2 +// AppDelegate.swift
3 +// extract_facial_expression
4 +//
5 +// Created by Jerry kim on 2020/06/11.
6 +// Copyright © 2020 hoya. All rights reserved.
7 +//
8 +
9 +import UIKit
10 +
11 +@UIApplicationMain
12 +class AppDelegate: UIResponder, UIApplicationDelegate {
13 +
14 +
15 +
16 + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
17 + // Override point for customization after application launch.
18 + return true
19 + }
20 +
21 + // MARK: UISceneSession Lifecycle
22 +
23 + func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
24 + // Called when a new scene session is being created.
25 + // Use this method to select a configuration to create the new scene with.
26 + return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
27 + }
28 +
29 + func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
30 + // Called when the user discards a scene session.
31 + // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
32 + // Use this method to release any resources that were specific to the discarded scenes, as they will not return.
33 + }
34 +
35 +
36 +}
37 +
1 +{
2 + "images" : [
3 + {
4 + "idiom" : "iphone",
5 + "scale" : "2x",
6 + "size" : "20x20"
7 + },
8 + {
9 + "idiom" : "iphone",
10 + "scale" : "3x",
11 + "size" : "20x20"
12 + },
13 + {
14 + "idiom" : "iphone",
15 + "scale" : "2x",
16 + "size" : "29x29"
17 + },
18 + {
19 + "idiom" : "iphone",
20 + "scale" : "3x",
21 + "size" : "29x29"
22 + },
23 + {
24 + "idiom" : "iphone",
25 + "scale" : "2x",
26 + "size" : "40x40"
27 + },
28 + {
29 + "idiom" : "iphone",
30 + "scale" : "3x",
31 + "size" : "40x40"
32 + },
33 + {
34 + "idiom" : "iphone",
35 + "scale" : "2x",
36 + "size" : "60x60"
37 + },
38 + {
39 + "idiom" : "iphone",
40 + "scale" : "3x",
41 + "size" : "60x60"
42 + },
43 + {
44 + "idiom" : "ipad",
45 + "scale" : "1x",
46 + "size" : "20x20"
47 + },
48 + {
49 + "idiom" : "ipad",
50 + "scale" : "2x",
51 + "size" : "20x20"
52 + },
53 + {
54 + "idiom" : "ipad",
55 + "scale" : "1x",
56 + "size" : "29x29"
57 + },
58 + {
59 + "idiom" : "ipad",
60 + "scale" : "2x",
61 + "size" : "29x29"
62 + },
63 + {
64 + "idiom" : "ipad",
65 + "scale" : "1x",
66 + "size" : "40x40"
67 + },
68 + {
69 + "idiom" : "ipad",
70 + "scale" : "2x",
71 + "size" : "40x40"
72 + },
73 + {
74 + "idiom" : "ipad",
75 + "scale" : "1x",
76 + "size" : "76x76"
77 + },
78 + {
79 + "idiom" : "ipad",
80 + "scale" : "2x",
81 + "size" : "76x76"
82 + },
83 + {
84 + "idiom" : "ipad",
85 + "scale" : "2x",
86 + "size" : "83.5x83.5"
87 + },
88 + {
89 + "idiom" : "ios-marketing",
90 + "scale" : "1x",
91 + "size" : "1024x1024"
92 + }
93 + ],
94 + "info" : {
95 + "author" : "xcode",
96 + "version" : 1
97 + }
98 +}
1 +{
2 + "info" : {
3 + "author" : "xcode",
4 + "version" : 1
5 + }
6 +}
1 +{
2 + "images" : [
3 + {
4 + "filename" : "Extract
Facial Expression
on playing video (2).png",
5 + "idiom" : "universal",
6 + "scale" : "1x"
7 + },
8 + {
9 + "idiom" : "universal",
10 + "scale" : "2x"
11 + },
12 + {
13 + "idiom" : "universal",
14 + "scale" : "3x"
15 + }
16 + ],
17 + "info" : {
18 + "author" : "xcode",
19 + "version" : 1
20 + }
21 +}
1 +{
2 + "images" : [
3 + {
4 + "filename" : "backward.png",
5 + "idiom" : "universal",
6 + "scale" : "1x"
7 + },
8 + {
9 + "idiom" : "universal",
10 + "scale" : "2x"
11 + },
12 + {
13 + "idiom" : "universal",
14 + "scale" : "3x"
15 + }
16 + ],
17 + "info" : {
18 + "author" : "xcode",
19 + "version" : 1
20 + }
21 +}
1 +{
2 + "images" : [
3 + {
4 + "filename" : "forward.png",
5 + "idiom" : "universal",
6 + "scale" : "1x"
7 + },
8 + {
9 + "idiom" : "universal",
10 + "scale" : "2x"
11 + },
12 + {
13 + "idiom" : "universal",
14 + "scale" : "3x"
15 + }
16 + ],
17 + "info" : {
18 + "author" : "xcode",
19 + "version" : 1
20 + }
21 +}
1 +{
2 + "images" : [
3 + {
4 + "filename" : "pause.png",
5 + "idiom" : "universal",
6 + "scale" : "1x"
7 + },
8 + {
9 + "idiom" : "universal",
10 + "scale" : "2x"
11 + },
12 + {
13 + "idiom" : "universal",
14 + "scale" : "3x"
15 + }
16 + ],
17 + "info" : {
18 + "author" : "xcode",
19 + "version" : 1
20 + }
21 +}
1 +{
2 + "images" : [
3 + {
4 + "filename" : "play.png",
5 + "idiom" : "universal",
6 + "scale" : "1x"
7 + },
8 + {
9 + "idiom" : "universal",
10 + "scale" : "2x"
11 + },
12 + {
13 + "idiom" : "universal",
14 + "scale" : "3x"
15 + }
16 + ],
17 + "info" : {
18 + "author" : "xcode",
19 + "version" : 1
20 + }
21 +}
1 +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2 +<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">
3 + <dependencies>
4 + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13104.12"/>
5 + <capability name="Safe area layout guides" minToolsVersion="9.0"/>
6 + <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
7 + </dependencies>
8 + <scenes>
9 + <!--View Controller-->
10 + <scene sceneID="EHf-IW-A2E">
11 + <objects>
12 + <viewController id="01J-lp-oVM" sceneMemberID="viewController">
13 + <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
14 + <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
15 + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
16 + <color key="backgroundColor" xcode11CocoaTouchSystemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
17 + <viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
18 + </view>
19 + </viewController>
20 + <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
21 + </objects>
22 + <point key="canvasLocation" x="53" y="375"/>
23 + </scene>
24 + </scenes>
25 +</document>
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<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">
3 + <device id="retina5_9" orientation="portrait" appearance="light"/>
4 + <dependencies>
5 + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="15704"/>
6 + <capability name="Safe area layout guides" minToolsVersion="9.0"/>
7 + <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
8 + </dependencies>
9 + <scenes>
10 + <!--View Controller-->
11 + <scene sceneID="tne-QT-ifu">
12 + <objects>
13 + <viewController id="BYZ-38-t0r" customClass="ViewController" customModule="ExtractFacialExpression" customModuleProvider="target" sceneMemberID="viewController">
14 + <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
15 + <rect key="frame" x="0.0" y="0.0" width="375" height="812"/>
16 + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
17 + <subviews>
18 + <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="Extract
Facial Expression
on playing video" translatesAutoresizingMaskIntoConstraints="NO" id="Sse-ql-HXA">
19 + <rect key="frame" x="20" y="184" width="335" height="250"/>
20 + <constraints>
21 + <constraint firstAttribute="height" constant="250" id="JOu-92-oyr"/>
22 + <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="250" id="fZS-S2-tSG"/>
23 + </constraints>
24 + </imageView>
25 + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="zB7-aY-ubm">
26 + <rect key="frame" x="172.66666666666666" y="534" width="30" height="30"/>
27 + <state key="normal" title="Play"/>
28 + <connections>
29 + <segue destination="D4g-px-Vch" kind="show" id="ofT-Xb-4te"/>
30 + </connections>
31 + </button>
32 + </subviews>
33 + <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
34 + <constraints>
35 + <constraint firstItem="Sse-ql-HXA" firstAttribute="top" secondItem="6Tk-OE-BBY" secondAttribute="top" constant="140" id="6ND-nd-DHf"/>
36 + <constraint firstItem="zB7-aY-ubm" firstAttribute="centerX" secondItem="8bC-Xf-vdC" secondAttribute="centerX" id="JHz-a0-WWL"/>
37 + <constraint firstAttribute="trailing" secondItem="Sse-ql-HXA" secondAttribute="trailing" constant="20" id="Ug1-BD-cPO"/>
38 + <constraint firstItem="Sse-ql-HXA" firstAttribute="centerX" secondItem="8bC-Xf-vdC" secondAttribute="centerX" id="XTv-iE-JWp"/>
39 + <constraint firstItem="Sse-ql-HXA" firstAttribute="leading" secondItem="8bC-Xf-vdC" secondAttribute="leading" constant="20" id="pT3-PT-wAa"/>
40 + <constraint firstItem="zB7-aY-ubm" firstAttribute="top" secondItem="Sse-ql-HXA" secondAttribute="bottom" constant="100" id="rzh-wI-cwq"/>
41 + </constraints>
42 + <viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
43 + </view>
44 + </viewController>
45 + <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
46 + </objects>
47 + <point key="canvasLocation" x="133" y="139"/>
48 + </scene>
49 + <!--Video View Controller-->
50 + <scene sceneID="SYy-sc-oJ4">
51 + <objects>
52 + <viewController id="D4g-px-Vch" customClass="VideoViewController" customModule="ExtractFacialExpression" customModuleProvider="target" sceneMemberID="viewController">
53 + <view key="view" contentMode="scaleToFill" id="WJS-7U-AZj">
54 + <rect key="frame" x="0.0" y="0.0" width="375" height="758"/>
55 + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
56 + <subviews>
57 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="yF4-1A-lpn" userLabel="RealTimeView">
58 + <rect key="frame" x="0.0" y="225" width="375" height="250"/>
59 + <subviews>
60 + <arscnView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="GOO-Pa-3H8">
61 + <rect key="frame" x="0.0" y="0.0" width="200" height="250"/>
62 + <constraints>
63 + <constraint firstAttribute="width" constant="200" id="SzQ-Yi-cr3"/>
64 + </constraints>
65 + </arscnView>
66 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Ihv-nt-mwe" userLabel="ExpressionView">
67 + <rect key="frame" x="200" y="0.0" width="175" height="250"/>
68 + <subviews>
69 + <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">
70 + <rect key="frame" x="87.666666666666686" y="200" width="0.0" height="0.0"/>
71 + <fontDescription key="fontDescription" type="system" pointSize="25"/>
72 + <nil key="textColor"/>
73 + <nil key="highlightedColor"/>
74 + </label>
75 + <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">
76 + <rect key="frame" x="0.0" y="50" width="175" height="40.666666666666657"/>
77 + <fontDescription key="fontDescription" type="system" pointSize="17"/>
78 + <nil key="textColor"/>
79 + <nil key="highlightedColor"/>
80 + </label>
81 + </subviews>
82 + <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
83 + <constraints>
84 + <constraint firstItem="7l5-9A-CuQ" firstAttribute="top" secondItem="Ihv-nt-mwe" secondAttribute="top" constant="50" id="0tz-hF-9h7"/>
85 + <constraint firstItem="ncL-g5-JAo" firstAttribute="centerX" secondItem="Ihv-nt-mwe" secondAttribute="centerX" id="1rZ-Hk-pns"/>
86 + <constraint firstAttribute="trailing" secondItem="7l5-9A-CuQ" secondAttribute="trailing" id="SQD-ll-Qop"/>
87 + <constraint firstAttribute="bottom" secondItem="ncL-g5-JAo" secondAttribute="bottom" constant="50" id="UZW-Hi-PwF"/>
88 + <constraint firstItem="7l5-9A-CuQ" firstAttribute="leading" secondItem="Ihv-nt-mwe" secondAttribute="leading" id="mfU-T7-ZNA"/>
89 + </constraints>
90 + </view>
91 + </subviews>
92 + <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
93 + <constraints>
94 + <constraint firstItem="GOO-Pa-3H8" firstAttribute="leading" secondItem="yF4-1A-lpn" secondAttribute="leading" id="2tI-uk-d6l"/>
95 + <constraint firstAttribute="bottom" secondItem="Ihv-nt-mwe" secondAttribute="bottom" id="5GY-y6-dZY"/>
96 + <constraint firstAttribute="height" constant="250" id="EwU-Rs-E1f"/>
97 + <constraint firstItem="Ihv-nt-mwe" firstAttribute="leading" secondItem="GOO-Pa-3H8" secondAttribute="trailing" id="WGO-06-6nc"/>
98 + <constraint firstItem="Ihv-nt-mwe" firstAttribute="top" secondItem="yF4-1A-lpn" secondAttribute="top" id="azL-gq-Rje"/>
99 + <constraint firstAttribute="bottom" secondItem="GOO-Pa-3H8" secondAttribute="bottom" id="jUl-AN-2uk"/>
100 + <constraint firstItem="GOO-Pa-3H8" firstAttribute="top" secondItem="yF4-1A-lpn" secondAttribute="top" id="rDT-gT-BqA"/>
101 + <constraint firstAttribute="trailing" secondItem="Ihv-nt-mwe" secondAttribute="trailing" id="xAJ-Rh-NoQ"/>
102 + </constraints>
103 + </view>
104 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ZhC-D1-7na" userLabel="Expression View1">
105 + <rect key="frame" x="0.0" y="475" width="187" height="30"/>
106 + <subviews>
107 + <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">
108 + <rect key="frame" x="126.66666666666667" y="4.6666666666666856" width="10.333333333333329" height="21"/>
109 + <fontDescription key="fontDescription" type="system" pointSize="17"/>
110 + <nil key="textColor"/>
111 + <nil key="highlightedColor"/>
112 + </label>
113 + <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">
114 + <rect key="frame" x="40" y="4.6666666666666856" width="23" height="21"/>
115 + <fontDescription key="fontDescription" type="system" pointSize="17"/>
116 + <nil key="textColor"/>
117 + <nil key="highlightedColor"/>
118 + </label>
119 + </subviews>
120 + <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
121 + <constraints>
122 + <constraint firstAttribute="height" constant="30" id="GjB-HF-3J9"/>
123 + <constraint firstAttribute="width" constant="187" id="aQ7-Nx-Z1j"/>
124 + <constraint firstItem="zv4-Og-q4o" firstAttribute="leading" secondItem="ZhC-D1-7na" secondAttribute="leading" constant="40" id="ef4-w8-MYI"/>
125 + <constraint firstItem="49I-NX-neh" firstAttribute="centerY" secondItem="ZhC-D1-7na" secondAttribute="centerY" id="jcW-78-fbP"/>
126 + <constraint firstAttribute="trailing" secondItem="49I-NX-neh" secondAttribute="trailing" constant="50" id="qm4-m9-EQI"/>
127 + <constraint firstItem="zv4-Og-q4o" firstAttribute="centerY" secondItem="ZhC-D1-7na" secondAttribute="centerY" id="x1B-ho-y2y"/>
128 + </constraints>
129 + </view>
130 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Bsc-VE-nOz" userLabel="Expression View4">
131 + <rect key="frame" x="188" y="505" width="187" height="30"/>
132 + <subviews>
133 + <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">
134 + <rect key="frame" x="40" y="4.6666666666666856" width="23" height="21"/>
135 + <fontDescription key="fontDescription" type="system" pointSize="17"/>
136 + <nil key="textColor"/>
137 + <nil key="highlightedColor"/>
138 + </label>
139 + <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">
140 + <rect key="frame" x="126.66666666666667" y="4.6666666666666856" width="10.333333333333329" height="21"/>
141 + <fontDescription key="fontDescription" type="system" pointSize="17"/>
142 + <nil key="textColor"/>
143 + <nil key="highlightedColor"/>
144 + </label>
145 + </subviews>
146 + <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
147 + <constraints>
148 + <constraint firstAttribute="trailing" secondItem="rc7-qH-1mM" secondAttribute="trailing" constant="50" id="2Kl-ma-axf"/>
149 + <constraint firstItem="o4y-bW-8BJ" firstAttribute="leading" secondItem="Bsc-VE-nOz" secondAttribute="leading" constant="40" id="7zj-mK-t5w"/>
150 + <constraint firstAttribute="height" constant="30" id="8zn-Sc-256"/>
151 + <constraint firstAttribute="width" constant="187" id="Dkh-Oi-aGI"/>
152 + <constraint firstItem="rc7-qH-1mM" firstAttribute="centerY" secondItem="Bsc-VE-nOz" secondAttribute="centerY" id="W9t-Dj-gtu"/>
153 + <constraint firstItem="o4y-bW-8BJ" firstAttribute="centerY" secondItem="Bsc-VE-nOz" secondAttribute="centerY" id="adB-CV-XeE"/>
154 + </constraints>
155 + </view>
156 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="UVb-Vr-AMc" userLabel="Expression View3">
157 + <rect key="frame" x="0.0" y="505" width="187" height="30"/>
158 + <subviews>
159 + <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">
160 + <rect key="frame" x="40" y="4.6666666666666856" width="23" height="21"/>
161 + <fontDescription key="fontDescription" type="system" pointSize="17"/>
162 + <nil key="textColor"/>
163 + <nil key="highlightedColor"/>
164 + </label>
165 + <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">
166 + <rect key="frame" x="126.66666666666667" y="4.6666666666666856" width="10.333333333333329" height="21"/>
167 + <fontDescription key="fontDescription" type="system" pointSize="17"/>
168 + <nil key="textColor"/>
169 + <nil key="highlightedColor"/>
170 + </label>
171 + </subviews>
172 + <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
173 + <constraints>
174 + <constraint firstItem="mBl-lr-d8H" firstAttribute="centerY" secondItem="UVb-Vr-AMc" secondAttribute="centerY" id="D1A-fl-If1"/>
175 + <constraint firstItem="Lrd-hK-bdr" firstAttribute="centerY" secondItem="UVb-Vr-AMc" secondAttribute="centerY" id="Noo-At-eDM"/>
176 + <constraint firstAttribute="height" constant="30" id="Qpq-SP-rmz"/>
177 + <constraint firstAttribute="width" constant="187" id="rot-rl-rnW"/>
178 + <constraint firstItem="mBl-lr-d8H" firstAttribute="leading" secondItem="UVb-Vr-AMc" secondAttribute="leading" constant="40" id="tAy-aE-rf8"/>
179 + <constraint firstAttribute="trailing" secondItem="Lrd-hK-bdr" secondAttribute="trailing" constant="50" id="twH-Go-mag"/>
180 + </constraints>
181 + </view>
182 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="6b6-sp-Kkp" userLabel="Expression View2">
183 + <rect key="frame" x="188" y="475" width="187" height="30"/>
184 + <subviews>
185 + <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">
186 + <rect key="frame" x="40" y="4.6666666666666856" width="23" height="21"/>
187 + <fontDescription key="fontDescription" type="system" pointSize="17"/>
188 + <nil key="textColor"/>
189 + <nil key="highlightedColor"/>
190 + </label>
191 + <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">
192 + <rect key="frame" x="126.66666666666667" y="4.6666666666666856" width="10.333333333333329" height="21"/>
193 + <fontDescription key="fontDescription" type="system" pointSize="17"/>
194 + <nil key="textColor"/>
195 + <nil key="highlightedColor"/>
196 + </label>
197 + </subviews>
198 + <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
199 + <constraints>
200 + <constraint firstItem="oPD-7K-hoP" firstAttribute="leading" secondItem="6b6-sp-Kkp" secondAttribute="leading" constant="40" id="91y-bL-Tgx"/>
201 + <constraint firstAttribute="trailing" secondItem="CWA-Cj-DS7" secondAttribute="trailing" constant="50" id="CkX-jh-xPX"/>
202 + <constraint firstItem="CWA-Cj-DS7" firstAttribute="centerY" secondItem="6b6-sp-Kkp" secondAttribute="centerY" id="Gf3-op-6M6"/>
203 + <constraint firstItem="oPD-7K-hoP" firstAttribute="centerY" secondItem="6b6-sp-Kkp" secondAttribute="centerY" id="hOa-bR-qqM"/>
204 + <constraint firstAttribute="width" constant="187" id="kyO-7F-j6b"/>
205 + <constraint firstAttribute="height" constant="30" id="sNb-u6-dno"/>
206 + </constraints>
207 + </view>
208 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ETI-CF-ume" userLabel="Expression View5">
209 + <rect key="frame" x="0.0" y="535" width="187" height="30"/>
210 + <subviews>
211 + <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">
212 + <rect key="frame" x="40" y="4.6666666666666288" width="23" height="21"/>
213 + <fontDescription key="fontDescription" type="system" pointSize="17"/>
214 + <nil key="textColor"/>
215 + <nil key="highlightedColor"/>
216 + </label>
217 + <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">
218 + <rect key="frame" x="126.66666666666667" y="4.6666666666666288" width="10.333333333333329" height="21"/>
219 + <fontDescription key="fontDescription" type="system" pointSize="17"/>
220 + <nil key="textColor"/>
221 + <nil key="highlightedColor"/>
222 + </label>
223 + </subviews>
224 + <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
225 + <constraints>
226 + <constraint firstAttribute="width" constant="187" id="3uL-mI-bCh"/>
227 + <constraint firstItem="l6s-5g-m0t" firstAttribute="leading" secondItem="ETI-CF-ume" secondAttribute="leading" constant="40" id="C5x-jh-kq5"/>
228 + <constraint firstItem="KvS-wX-pit" firstAttribute="centerY" secondItem="ETI-CF-ume" secondAttribute="centerY" id="H0b-tb-Wrr"/>
229 + <constraint firstAttribute="height" constant="30" id="Nh5-IZ-EPN"/>
230 + <constraint firstAttribute="trailing" secondItem="KvS-wX-pit" secondAttribute="trailing" constant="50" id="aiP-pd-cFA"/>
231 + <constraint firstItem="l6s-5g-m0t" firstAttribute="centerY" secondItem="ETI-CF-ume" secondAttribute="centerY" id="wlv-Z7-1Jx"/>
232 + </constraints>
233 + </view>
234 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="3JK-f4-SkW" userLabel="Expression View6">
235 + <rect key="frame" x="188" y="535" width="187" height="30"/>
236 + <subviews>
237 + <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">
238 + <rect key="frame" x="40" y="4.6666666666666288" width="23" height="21"/>
239 + <fontDescription key="fontDescription" type="system" pointSize="17"/>
240 + <nil key="textColor"/>
241 + <nil key="highlightedColor"/>
242 + </label>
243 + <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">
244 + <rect key="frame" x="126.66666666666667" y="4.6666666666666288" width="10.333333333333329" height="21"/>
245 + <fontDescription key="fontDescription" type="system" pointSize="17"/>
246 + <nil key="textColor"/>
247 + <nil key="highlightedColor"/>
248 + </label>
249 + </subviews>
250 + <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
251 + <constraints>
252 + <constraint firstAttribute="height" constant="30" id="5Ip-9N-tzf"/>
253 + <constraint firstItem="9q1-jD-6X5" firstAttribute="centerY" secondItem="3JK-f4-SkW" secondAttribute="centerY" id="AjH-rS-hMO"/>
254 + <constraint firstItem="2cV-Zc-9uX" firstAttribute="centerY" secondItem="3JK-f4-SkW" secondAttribute="centerY" id="G2X-1w-nfA"/>
255 + <constraint firstAttribute="width" constant="187" id="Hk6-2H-5BV"/>
256 + <constraint firstItem="9q1-jD-6X5" firstAttribute="centerY" secondItem="3JK-f4-SkW" secondAttribute="centerY" id="MJo-9X-HTn"/>
257 + <constraint firstItem="2cV-Zc-9uX" firstAttribute="leading" secondItem="3JK-f4-SkW" secondAttribute="leading" constant="40" id="Mwq-T9-Lad"/>
258 + <constraint firstAttribute="trailing" secondItem="9q1-jD-6X5" secondAttribute="trailing" constant="50" id="cx7-gd-jx7"/>
259 + <constraint firstItem="2cV-Zc-9uX" firstAttribute="centerY" secondItem="3JK-f4-SkW" secondAttribute="centerY" id="czG-6Y-y4O"/>
260 + </constraints>
261 + </view>
262 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="3ve-a3-NIJ" userLabel="Result View">
263 + <rect key="frame" x="0.0" y="565" width="375" height="80"/>
264 + <subviews>
265 + <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">
266 + <rect key="frame" x="160.33333333333334" y="28" width="54.666666666666657" height="24"/>
267 + <fontDescription key="fontDescription" type="system" pointSize="20"/>
268 + <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
269 + <nil key="highlightedColor"/>
270 + </label>
271 + </subviews>
272 + <color key="backgroundColor" systemColor="systemTealColor" red="0.35294117650000001" green="0.7843137255" blue="0.98039215690000003" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
273 + <constraints>
274 + <constraint firstItem="2Po-2M-1NN" firstAttribute="centerX" secondItem="3ve-a3-NIJ" secondAttribute="centerX" id="HD3-Ga-F5M"/>
275 + <constraint firstItem="2Po-2M-1NN" firstAttribute="centerY" secondItem="3ve-a3-NIJ" secondAttribute="centerY" id="HPS-7H-jNH"/>
276 + <constraint firstAttribute="height" constant="80" id="i3M-7i-aRk"/>
277 + </constraints>
278 + </view>
279 + </subviews>
280 + <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
281 + <constraints>
282 + <constraint firstItem="yF4-1A-lpn" firstAttribute="leading" secondItem="IHb-Tq-DWS" secondAttribute="leading" id="13e-dG-Vhd"/>
283 + <constraint firstItem="IHb-Tq-DWS" firstAttribute="trailing" secondItem="3ve-a3-NIJ" secondAttribute="trailing" id="1y8-tT-gIW"/>
284 + <constraint firstItem="IHb-Tq-DWS" firstAttribute="trailing" secondItem="6b6-sp-Kkp" secondAttribute="trailing" id="Ecn-Yi-tuY"/>
285 + <constraint firstItem="yF4-1A-lpn" firstAttribute="top" secondItem="IHb-Tq-DWS" secondAttribute="top" constant="225" id="IvY-Xf-Tv3"/>
286 + <constraint firstItem="6b6-sp-Kkp" firstAttribute="top" secondItem="yF4-1A-lpn" secondAttribute="bottom" id="ODq-jz-bme"/>
287 + <constraint firstItem="3JK-f4-SkW" firstAttribute="top" secondItem="UVb-Vr-AMc" secondAttribute="bottom" id="OI0-dg-zaq"/>
288 + <constraint firstItem="UVb-Vr-AMc" firstAttribute="leading" secondItem="WJS-7U-AZj" secondAttribute="leading" id="RgC-5O-SGe"/>
289 + <constraint firstItem="ETI-CF-ume" firstAttribute="leading" secondItem="WJS-7U-AZj" secondAttribute="leading" id="UlC-Rn-aTB"/>
290 + <constraint firstItem="IHb-Tq-DWS" firstAttribute="trailing" secondItem="yF4-1A-lpn" secondAttribute="trailing" id="X9u-LU-J2M"/>
291 + <constraint firstItem="ZhC-D1-7na" firstAttribute="top" secondItem="yF4-1A-lpn" secondAttribute="bottom" id="Yd1-sb-jwL"/>
292 + <constraint firstItem="ZhC-D1-7na" firstAttribute="leading" secondItem="IHb-Tq-DWS" secondAttribute="leading" id="gKa-dz-XmM"/>
293 + <constraint firstAttribute="trailing" secondItem="Bsc-VE-nOz" secondAttribute="trailing" id="gnG-og-IrU"/>
294 + <constraint firstItem="3ve-a3-NIJ" firstAttribute="leading" secondItem="IHb-Tq-DWS" secondAttribute="leading" id="mkh-bb-Z7l"/>
295 + <constraint firstItem="3ve-a3-NIJ" firstAttribute="top" secondItem="ETI-CF-ume" secondAttribute="bottom" id="mpq-ep-geT"/>
296 + <constraint firstItem="Bsc-VE-nOz" firstAttribute="top" secondItem="6b6-sp-Kkp" secondAttribute="bottom" id="q7t-ze-bQ8"/>
297 + <constraint firstItem="ETI-CF-ume" firstAttribute="top" secondItem="Bsc-VE-nOz" secondAttribute="bottom" id="rqz-24-biH"/>
298 + <constraint firstItem="UVb-Vr-AMc" firstAttribute="top" secondItem="6b6-sp-Kkp" secondAttribute="bottom" id="sXR-9G-q3P"/>
299 + <constraint firstItem="IHb-Tq-DWS" firstAttribute="trailing" secondItem="3JK-f4-SkW" secondAttribute="trailing" id="uPf-aG-EAm"/>
300 + </constraints>
301 + <viewLayoutGuide key="safeArea" id="IHb-Tq-DWS"/>
302 + </view>
303 + <navigationItem key="navigationItem" id="Tro-oq-hvX"/>
304 + <connections>
305 + <outlet property="expression1" destination="49I-NX-neh" id="QzN-FH-oGW"/>
306 + <outlet property="expression2" destination="CWA-Cj-DS7" id="9UR-hH-IIa"/>
307 + <outlet property="expression3" destination="Lrd-hK-bdr" id="oSG-bz-v6A"/>
308 + <outlet property="expression4" destination="rc7-qH-1mM" id="4nj-d8-So7"/>
309 + <outlet property="expression5" destination="KvS-wX-pit" id="cSN-4q-mnG"/>
310 + <outlet property="expression6" destination="9q1-jD-6X5" id="Uxg-zC-oOI"/>
311 + <outlet property="expressionLabel" destination="ncL-g5-JAo" id="mn0-xt-uyH"/>
312 + <outlet property="resultLabel" destination="2Po-2M-1NN" id="6y5-wC-Hm9"/>
313 + <outlet property="sceneView" destination="GOO-Pa-3H8" id="3d5-d6-9Mw"/>
314 + </connections>
315 + </viewController>
316 + <placeholder placeholderIdentifier="IBFirstResponder" id="XNA-rN-fYo" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
317 + </objects>
318 + <point key="canvasLocation" x="963.76811594202911" y="138.61607142857142"/>
319 + </scene>
320 + </scenes>
321 + <resources>
322 + <image name="Extract
Facial Expression
on playing video" width="767" height="355"/>
323 + </resources>
324 +</document>
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3 +<plist version="1.0">
4 +<dict>
5 + <key>CFBundleDevelopmentRegion</key>
6 + <string>$(DEVELOPMENT_LANGUAGE)</string>
7 + <key>CFBundleExecutable</key>
8 + <string>$(EXECUTABLE_NAME)</string>
9 + <key>CFBundleIdentifier</key>
10 + <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
11 + <key>CFBundleInfoDictionaryVersion</key>
12 + <string>6.0</string>
13 + <key>CFBundleName</key>
14 + <string>$(PRODUCT_NAME)</string>
15 + <key>CFBundlePackageType</key>
16 + <string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
17 + <key>CFBundleShortVersionString</key>
18 + <string>1.0</string>
19 + <key>CFBundleVersion</key>
20 + <string>1</string>
21 + <key>LSRequiresIPhoneOS</key>
22 + <true/>
23 + <key>UIApplicationSceneManifest</key>
24 + <dict>
25 + <key>UIApplicationSupportsMultipleScenes</key>
26 + <false/>
27 + <key>UISceneConfigurations</key>
28 + <dict>
29 + <key>UIWindowSceneSessionRoleApplication</key>
30 + <array>
31 + <dict>
32 + <key>UISceneConfigurationName</key>
33 + <string>Default Configuration</string>
34 + <key>UISceneDelegateClassName</key>
35 + <string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
36 + <key>UISceneStoryboardFile</key>
37 + <string>Main</string>
38 + </dict>
39 + </array>
40 + </dict>
41 + </dict>
42 + <key>UILaunchStoryboardName</key>
43 + <string>LaunchScreen</string>
44 + <key>UIMainStoryboardFile</key>
45 + <string>Main</string>
46 + <key>NSCameraUsageDescription</key>
47 + <string></string>
48 + <key>UIRequiredDeviceCapabilities</key>
49 + <array>
50 + <string>armv7</string>
51 + <string>arkit</string>
52 + </array>
53 + <key>UISupportedInterfaceOrientations</key>
54 + <array>
55 + <string>UIInterfaceOrientationPortrait</string>
56 + <string>UIInterfaceOrientationLandscapeLeft</string>
57 + <string>UIInterfaceOrientationLandscapeRight</string>
58 + </array>
59 + <key>UISupportedInterfaceOrientations~ipad</key>
60 + <array>
61 + <string>UIInterfaceOrientationPortrait</string>
62 + <string>UIInterfaceOrientationPortraitUpsideDown</string>
63 + <string>UIInterfaceOrientationLandscapeLeft</string>
64 + <string>UIInterfaceOrientationLandscapeRight</string>
65 + </array>
66 +</dict>
67 +</plist>
1 +//
2 +// SceneDelegate.swift
3 +// extract_facial_expression
4 +//
5 +// Created by Jerry kim on 2020/06/11.
6 +// Copyright © 2020 hoya. All rights reserved.
7 +//
8 +
9 +import UIKit
10 +
11 +class SceneDelegate: UIResponder, UIWindowSceneDelegate {
12 +
13 + var window: UIWindow?
14 +
15 +
16 + func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
17 + // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
18 + // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
19 + // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
20 + guard let _ = (scene as? UIWindowScene) else { return }
21 + }
22 +
23 + func sceneDidDisconnect(_ scene: UIScene) {
24 + // Called as the scene is being released by the system.
25 + // This occurs shortly after the scene enters the background, or when its session is discarded.
26 + // Release any resources associated with this scene that can be re-created the next time the scene connects.
27 + // The scene may re-connect later, as its session was not neccessarily discarded (see `application:didDiscardSceneSessions` instead).
28 + }
29 +
30 + func sceneDidBecomeActive(_ scene: UIScene) {
31 + // Called when the scene has moved from an inactive state to an active state.
32 + // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive.
33 + }
34 +
35 + func sceneWillResignActive(_ scene: UIScene) {
36 + // Called when the scene will move from an active state to an inactive state.
37 + // This may occur due to temporary interruptions (ex. an incoming phone call).
38 + }
39 +
40 + func sceneWillEnterForeground(_ scene: UIScene) {
41 + // Called as the scene transitions from the background to the foreground.
42 + // Use this method to undo the changes made on entering the background.
43 + }
44 +
45 + func sceneDidEnterBackground(_ scene: UIScene) {
46 + // Called as the scene transitions from the foreground to the background.
47 + // Use this method to save data, release shared resources, and store enough scene-specific state information
48 + // to restore the scene back to its current state.
49 + }
50 +
51 +
52 +}
53 +
1 +//
2 +// VideoViewController.swift
3 +// extract_facial_expression
4 +//
5 +// Created by Jerry kim on 2020/06/11.
6 +// Copyright © 2020 hoya. All rights reserved.
7 +//
8 +
9 +import UIKit
10 +import AVFoundation
11 +import ARKit
12 +
13 +class VideoViewController: UIViewController, ARSCNViewDelegate {
14 + let videoPlayerView = UIView()
15 + var player: AVPlayer?
16 +
17 + public struct emotions {
18 + let expression: String
19 + let count: Int
20 + }
21 +
22 + @IBOutlet var sceneView: ARSCNView!
23 + @IBOutlet weak var expressionLabel: UILabel!
24 + @IBOutlet weak var expression1: UILabel! // smile
25 + @IBOutlet weak var expression2: UILabel! // dumbfounded
26 + @IBOutlet weak var expression3: UILabel! // suprise
27 + @IBOutlet weak var expression4: UILabel! // nyah
28 + @IBOutlet weak var expression5: UILabel! // awful
29 + @IBOutlet weak var expression6: UILabel! // eye smile
30 +
31 + @IBOutlet weak var resultLabel: UILabel! // result label
32 +
33 + var faceExpression = ""
34 + var count1 = 0 // smile
35 + var count2 = 0 // dumbfounded
36 + var count3 = 0 // suprise
37 + var count4 = 0 // nyah
38 + var count5 = 0 // awful
39 + var count6 = 0 // eye smile
40 +
41 + // Sample Videos
42 + let videos = ["http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4",
43 + "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ElephantsDream.mp4",
44 + "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerBlazes.mp4",
45 + "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerEscapes.mp4",
46 + "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerFun.mp4",
47 + "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerJoyrides.mp4",
48 + "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerMeltdowns.mp4",
49 + "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/SubaruOutbackOnStreetAndDirt.mp4",
50 + "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/TearsOfSteel.mp4"]
51 +
52 + override func viewDidLoad() {
53 + super.viewDidLoad()
54 + videoPlayerView.backgroundColor = UIColor.white
55 + videoPlayerView.translatesAutoresizingMaskIntoConstraints = false
56 + // Add constraints, pinnning each of the four sides
57 +// let topConstraint = NSLayoutConstraint(item: videoPlayerView, attribute: .top, relatedBy: .equal, toItem: view, attribute: .top, multiplier: 1, constant: 0)
58 +// let bottomConstraint = NSLayoutConstraint(item: videoPlayerView, attribute: .bottom, relatedBy: .equal, toItem: view, attribute: .bottom, multiplier: 1, constant: 0)
59 +// let leadingConstraint = NSLayoutConstraint(item: videoPlayerView, attribute: .leading, relatedBy: .equal, toItem: view, attribute: .leading, multiplier: 1, constant: 0)
60 +// let trailingConstraint = NSLayoutConstraint(item: videoPlayerView, attribute: .trailing, relatedBy: .equal, toItem: view, attribute: .trailing, multiplier: 1, constant: 0)
61 +
62 +
63 + view.addSubview(videoPlayerView)
64 +
65 + videoPlayerView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
66 + videoPlayerView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
67 + videoPlayerView.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 0.3).isActive = true
68 + videoPlayerView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true
69 +
70 +// view.addConstraints([topConstraint, bottomConstraint, leadingConstraint, trailingConstraint])
71 + view.sendSubviewToBack(videoPlayerView)
72 +
73 + // for ARSCNView
74 + guard ARFaceTrackingConfiguration.isSupported else {
75 + fatalError("Face tracking not available on this on this device model!")
76 + }
77 + sceneView.delegate = self
78 + sceneView.showsStatistics = true
79 +
80 +// sceneView.translatesAutoresizingMaskIntoConstraints = false
81 +// sceneView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
82 +// sceneView.topAnchor.constraint(equalToSystemSpacingBelow: videoPlayerView.bottomAnchor, multiplier: 0.3).isActive = true
83 +// sceneView.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 0.3).isActive = true
84 +
85 + }
86 +
87 + override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
88 + // for view video, left landscape
89 + return .landscapeLeft
90 + }
91 +
92 + func setupVideoPlayer() { // Play random video
93 + let randNum = arc4random_uniform(9)
94 + guard let url = URL(string: self.videos[Int(randNum)]) else {
95 + return
96 + }
97 +
98 + player = AVPlayer(url: url)
99 +
100 + let playerLayer = AVPlayerLayer(player: player)
101 + playerLayer.frame = videoPlayerView.bounds
102 + videoPlayerView.layer.addSublayer(playerLayer)
103 + player?.play()
104 + }
105 +
106 + override func viewWillAppear(_ animated: Bool) {
107 + super.viewWillAppear(animated)
108 +
109 + // Create a session configuration
110 + let configuration = ARFaceTrackingConfiguration()
111 +
112 + // Run the view's session
113 + sceneView.session.run(configuration)
114 + }
115 +
116 + override func viewWillDisappear(_ animated: Bool) {
117 + super.viewWillDisappear(animated)
118 +
119 + // Pause the view's session
120 + sceneView.session.pause()
121 + }
122 +
123 + override func viewDidAppear(_ animated: Bool) {
124 + super.viewDidAppear(animated)
125 + setupVideoPlayer()
126 + }
127 +
128 + func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode? {
129 + let faceMesh = ARSCNFaceGeometry(device: sceneView.device!)
130 + let node = SCNNode(geometry: faceMesh)
131 + node.geometry?.firstMaterial?.fillMode = .lines
132 + return node
133 + }
134 +
135 + func renderer(_ renderer: SCNSceneRenderer, didUpdate node: SCNNode, for anchor: ARAnchor) {
136 + if let faceAnchor = anchor as? ARFaceAnchor, let faceGeometry = node.geometry as? ARSCNFaceGeometry {
137 + faceGeometry.update(from: faceAnchor.geometry)
138 + facePoseAnalyzer(anchor: faceAnchor)
139 +
140 + DispatchQueue.main.async {
141 + self.expressionLabel.text = self.faceExpression
142 + self.expression1.text = String(self.count1)
143 + self.expression2.text = String(self.count2)
144 + self.expression3.text = String(self.count3)
145 + self.expression4.text = String(self.count4)
146 + self.expression5.text = String(self.count5)
147 + self.expression6.text = String(self.count6)
148 + self.extractMost()
149 + }
150 +
151 + }
152 + }
153 +
154 + func extractMost() {
155 + let structedArray = [
156 + emotions(expression: "smile", count: self.count1),
157 + emotions(expression: "dumbfounded", count: self.count2),
158 + emotions(expression: "surprise", count: self.count3),
159 + emotions(expression: "nyah", count: self.count4),
160 + emotions(expression: "awful", count: self.count5),
161 + emotions(expression: "eye smile", count: self.count6)
162 + ]
163 + let sortedArray = structedArray.sorted(by: {$0.count > $1.count})
164 + self.resultLabel.text = sortedArray[0].expression
165 +
166 + }
167 +
168 + func facePoseAnalyzer(anchor: ARFaceAnchor) {
169 + let smileLeft = anchor.blendShapes[.mouthSmileLeft]
170 + let smileRight = anchor.blendShapes[.mouthSmileRight]
171 + let innerUp = anchor.blendShapes[.browInnerUp]
172 + let tongue = anchor.blendShapes[.tongueOut]
173 + let eyeBlinkLeft = anchor.blendShapes[.eyeBlinkLeft]
174 + let jawOpen = anchor.blendShapes[.jawOpen]
175 +
176 + let mouthFrownLeft = anchor.blendShapes[.mouthFrownLeft]
177 + let mouthFrownRight = anchor.blendShapes[.mouthFrownRight]
178 +
179 + var newFaceExpression = ""
180 +
181 + if ((smileLeft?.decimalValue ?? 0.0) + (smileRight?.decimalValue ?? 0.0)) > 0.9 {
182 + newFaceExpression = "😀"
183 + self.count1 = self.count1 + 1
184 + }
185 +
186 + if ((jawOpen?.decimalValue ?? 0.0) + (innerUp?.decimalValue ?? 0.0)) > 0.85 {
187 + newFaceExpression = "😧"
188 + self.count2 = self.count2 + 1
189 + }
190 +
191 +
192 + if innerUp?.decimalValue ?? 0.0 > 0.8 {
193 + newFaceExpression = "😳"
194 + self.count3 = self.count3 + 1
195 + }
196 +
197 + if tongue?.decimalValue ?? 0.0 > 0.08 {
198 + newFaceExpression = "😛"
199 + self.count4 = self.count4 + 1
200 + }
201 +
202 + if (mouthFrownLeft?.decimalValue ?? 0.0) > 0.3 || (mouthFrownRight?.decimalValue ?? 0.0) > 0.3 {
203 + newFaceExpression = "🤢"
204 + self.count5 = self.count5 + 1
205 + }
206 +
207 +
208 + if eyeBlinkLeft?.decimalValue ?? 0.0 > 0.5 {
209 + newFaceExpression = "😊"
210 + self.count6 = self.count6 + 1
211 + }
212 +
213 + if self.faceExpression != newFaceExpression {
214 + self.faceExpression = newFaceExpression
215 + }
216 + // if cheekPuff?.decimalValue ?? 0.0 > 0.5 {
217 + // newFaceExpression = "🤢"
218 + // self.count5 = self.count5 + 1
219 + // }
220 +
221 + }
222 +
223 + func session(_ session: ARSession, didFailWithError error: Error) {
224 + // Present an error message to the user
225 +
226 + }
227 +
228 + func sessionWasInterrupted(_ session: ARSession) {
229 + // Inform the user that the session has been interrupted, for example, by presenting an overlay
230 +
231 + }
232 +
233 + func sessionInterruptionEnded(_ session: ARSession) {
234 + // Reset tracking and/or remove existing anchors if consistent tracking is required
235 +
236 + }
237 +}
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<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">
3 + <device id="retina6_1" orientation="landscape" appearance="light"/>
4 + <dependencies>
5 + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="16087"/>
6 + <capability name="Safe area layout guides" minToolsVersion="9.0"/>
7 + <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
8 + </dependencies>
9 + <objects>
10 + <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
11 + <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
12 + <view contentMode="scaleToFill" id="m5W-Np-e6E">
13 + <rect key="frame" x="0.0" y="0.0" width="896" height="414"/>
14 + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
15 + <subviews>
16 + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="2IZ-Qo-Rl0">
17 + <rect key="frame" x="425" y="192" width="46" height="30"/>
18 + <state key="normal" title="Button"/>
19 + </button>
20 + </subviews>
21 + <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
22 + <constraints>
23 + <constraint firstItem="2IZ-Qo-Rl0" firstAttribute="centerY" secondItem="m5W-Np-e6E" secondAttribute="centerY" id="Xpn-17-T2q"/>
24 + <constraint firstItem="2IZ-Qo-Rl0" firstAttribute="centerX" secondItem="m5W-Np-e6E" secondAttribute="centerX" id="xUd-ag-9LJ"/>
25 + </constraints>
26 + <viewLayoutGuide key="safeArea" id="1md-eY-o7C"/>
27 + <point key="canvasLocation" x="139" y="154"/>
28 + </view>
29 + </objects>
30 +</document>
1 +//
2 +// ViewController.swift
3 +// extract_facial_expression
4 +//
5 +// Created by Jerry kim on 2020/06/11.
6 +// Copyright © 2020 hoya. All rights reserved.
7 +//
8 +
9 +import UIKit
10 +
11 +class ViewController: UIViewController {
12 +
13 + override func viewDidLoad() {
14 + super.viewDidLoad()
15 + // Do any additional setup after loading the view.
16 + }
17 +
18 +
19 +
20 +}
21 +