Added iOS App

This commit is contained in:
Navan Chauhan 2019-05-26 18:27:36 +05:30
parent 5d4e27dc07
commit 0eef4e52de
42 changed files with 1194 additions and 0 deletions

BIN
Logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

BIN
Logo.psd Normal file

Binary file not shown.

BIN
iOSApp/.DS_Store vendored Normal file

Binary file not shown.

View File

@ -0,0 +1,355 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 50;
objects = {
/* Begin PBXBuildFile section */
3E359493229A91790052C95A /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E359492229A91790052C95A /* AppDelegate.swift */; };
3E359497229A91790052C95A /* SecondViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E359496229A91790052C95A /* SecondViewController.swift */; };
3E35949A229A91790052C95A /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3E359498229A91790052C95A /* Main.storyboard */; };
3E35949C229A917A0052C95A /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3E35949B229A917A0052C95A /* Assets.xcassets */; };
3E35949F229A917A0052C95A /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3E35949D229A917A0052C95A /* LaunchScreen.storyboard */; };
3E3594A9229A964F0052C95A /* FatigueViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E3594A8229A964F0052C95A /* FatigueViewController.swift */; };
3E3594AB229A982A0052C95A /* FaceLandmarksDetector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E3594AA229A982A0052C95A /* FaceLandmarksDetector.swift */; };
3E3594AD229A98670052C95A /* UIImage+Scale.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E3594AC229A98670052C95A /* UIImage+Scale.swift */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
3E35948F229A91790052C95A /* AutoSafe.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AutoSafe.app; sourceTree = BUILT_PRODUCTS_DIR; };
3E359492229A91790052C95A /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
3E359496229A91790052C95A /* SecondViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecondViewController.swift; sourceTree = "<group>"; };
3E359499229A91790052C95A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
3E35949B229A917A0052C95A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
3E35949E229A917A0052C95A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
3E3594A0229A917A0052C95A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
3E3594A8229A964F0052C95A /* FatigueViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FatigueViewController.swift; sourceTree = "<group>"; };
3E3594AA229A982A0052C95A /* FaceLandmarksDetector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FaceLandmarksDetector.swift; sourceTree = "<group>"; };
3E3594AC229A98670052C95A /* UIImage+Scale.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIImage+Scale.swift"; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
3E35948C229A91790052C95A /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
3E359486229A91790052C95A = {
isa = PBXGroup;
children = (
3E359491229A91790052C95A /* AutoSafe */,
3E359490229A91790052C95A /* Products */,
);
sourceTree = "<group>";
};
3E359490229A91790052C95A /* Products */ = {
isa = PBXGroup;
children = (
3E35948F229A91790052C95A /* AutoSafe.app */,
);
name = Products;
sourceTree = "<group>";
};
3E359491229A91790052C95A /* AutoSafe */ = {
isa = PBXGroup;
children = (
3E3594A8229A964F0052C95A /* FatigueViewController.swift */,
3E359492229A91790052C95A /* AppDelegate.swift */,
3E359496229A91790052C95A /* SecondViewController.swift */,
3E359498229A91790052C95A /* Main.storyboard */,
3E35949B229A917A0052C95A /* Assets.xcassets */,
3E35949D229A917A0052C95A /* LaunchScreen.storyboard */,
3E3594A0229A917A0052C95A /* Info.plist */,
3E3594AA229A982A0052C95A /* FaceLandmarksDetector.swift */,
3E3594AC229A98670052C95A /* UIImage+Scale.swift */,
);
path = AutoSafe;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
3E35948E229A91790052C95A /* AutoSafe */ = {
isa = PBXNativeTarget;
buildConfigurationList = 3E3594A3229A917A0052C95A /* Build configuration list for PBXNativeTarget "AutoSafe" */;
buildPhases = (
3E35948B229A91790052C95A /* Sources */,
3E35948C229A91790052C95A /* Frameworks */,
3E35948D229A91790052C95A /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = AutoSafe;
productName = AutoSafe;
productReference = 3E35948F229A91790052C95A /* AutoSafe.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
3E359487229A91790052C95A /* Project object */ = {
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 1020;
LastUpgradeCheck = 1020;
ORGANIZATIONNAME = "Navan Chauhan";
TargetAttributes = {
3E35948E229A91790052C95A = {
CreatedOnToolsVersion = 10.2.1;
};
};
};
buildConfigurationList = 3E35948A229A91790052C95A /* Build configuration list for PBXProject "AutoSafe" */;
compatibilityVersion = "Xcode 9.3";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 3E359486229A91790052C95A;
productRefGroup = 3E359490229A91790052C95A /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
3E35948E229A91790052C95A /* AutoSafe */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
3E35948D229A91790052C95A /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
3E35949F229A917A0052C95A /* LaunchScreen.storyboard in Resources */,
3E35949C229A917A0052C95A /* Assets.xcassets in Resources */,
3E35949A229A91790052C95A /* Main.storyboard in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
3E35948B229A91790052C95A /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
3E359497229A91790052C95A /* SecondViewController.swift in Sources */,
3E359493229A91790052C95A /* AppDelegate.swift in Sources */,
3E3594A9229A964F0052C95A /* FatigueViewController.swift in Sources */,
3E3594AB229A982A0052C95A /* FaceLandmarksDetector.swift in Sources */,
3E3594AD229A98670052C95A /* UIImage+Scale.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXVariantGroup section */
3E359498229A91790052C95A /* Main.storyboard */ = {
isa = PBXVariantGroup;
children = (
3E359499229A91790052C95A /* Base */,
);
name = Main.storyboard;
sourceTree = "<group>";
};
3E35949D229A917A0052C95A /* LaunchScreen.storyboard */ = {
isa = PBXVariantGroup;
children = (
3E35949E229A917A0052C95A /* Base */,
);
name = LaunchScreen.storyboard;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
3E3594A1229A917A0052C95A /* 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;
CODE_SIGN_IDENTITY = "iPhone Developer";
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 = 12.2;
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;
};
3E3594A2229A917A0052C95A /* 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;
CODE_SIGN_IDENTITY = "iPhone Developer";
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 = 12.2;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
VALIDATE_PRODUCT = YES;
};
name = Release;
};
3E3594A4229A917A0052C95A /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = 6BS49F3GLW;
INFOPLIST_FILE = AutoSafe/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.navanchauhan.autosafemobile;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
};
3E3594A5229A917A0052C95A /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = 6BS49F3GLW;
INFOPLIST_FILE = AutoSafe/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.navanchauhan.autosafemobile;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
3E35948A229A91790052C95A /* Build configuration list for PBXProject "AutoSafe" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3E3594A1229A917A0052C95A /* Debug */,
3E3594A2229A917A0052C95A /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
3E3594A3229A917A0052C95A /* Build configuration list for PBXNativeTarget "AutoSafe" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3E3594A4229A917A0052C95A /* Debug */,
3E3594A5229A917A0052C95A /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 3E359487229A91790052C95A /* Project object */;
}

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:AutoSafe.xcodeproj">
</FileRef>
</Workspace>

View File

@ -0,0 +1,8 @@
<?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>

View File

@ -0,0 +1,14 @@
<?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>AutoSafe.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>0</integer>
</dict>
</dict>
</dict>
</plist>

BIN
iOSApp/AutoSafe/.DS_Store vendored Normal file

Binary file not shown.

View File

@ -0,0 +1,46 @@
//
// AppDelegate.swift
// AutoSafe
//
// Created by Navan Chauhan on 26/05/19.
// Copyright © 2019 Navan Chauhan. All rights reserved.
//
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
return true
}
func applicationWillResignActive(_ application: UIApplication) {
// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
// Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.
}
func applicationDidEnterBackground(_ application: UIApplication) {
// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}
func applicationWillEnterForeground(_ application: UIApplication) {
// Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
}
func applicationDidBecomeActive(_ application: UIApplication) {
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}
func applicationWillTerminate(_ application: UIApplication) {
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}
}

View File

@ -0,0 +1,122 @@
{
"images" : [
{
"size" : "20x20",
"idiom" : "iphone",
"filename" : "Icon-App-20x20@2x.png",
"scale" : "2x"
},
{
"size" : "20x20",
"idiom" : "iphone",
"filename" : "Icon-App-20x20@3x.png",
"scale" : "3x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@1x.png",
"scale" : "1x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@2x.png",
"scale" : "2x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@3x.png",
"scale" : "3x"
},
{
"size" : "40x40",
"idiom" : "iphone",
"filename" : "Icon-App-40x40@2x.png",
"scale" : "2x"
},
{
"size" : "40x40",
"idiom" : "iphone",
"filename" : "Icon-App-40x40@3x.png",
"scale" : "3x"
},
{
"size" : "60x60",
"idiom" : "iphone",
"filename" : "Icon-App-60x60@2x.png",
"scale" : "2x"
},
{
"size" : "60x60",
"idiom" : "iphone",
"filename" : "Icon-App-60x60@3x.png",
"scale" : "3x"
},
{
"size" : "20x20",
"idiom" : "ipad",
"filename" : "Icon-App-20x20@1x.png",
"scale" : "1x"
},
{
"size" : "20x20",
"idiom" : "ipad",
"filename" : "Icon-App-20x20@2x.png",
"scale" : "2x"
},
{
"size" : "29x29",
"idiom" : "ipad",
"filename" : "Icon-App-29x29@1x.png",
"scale" : "1x"
},
{
"size" : "29x29",
"idiom" : "ipad",
"filename" : "Icon-App-29x29@2x.png",
"scale" : "2x"
},
{
"size" : "40x40",
"idiom" : "ipad",
"filename" : "Icon-App-40x40@1x.png",
"scale" : "1x"
},
{
"size" : "40x40",
"idiom" : "ipad",
"filename" : "Icon-App-40x40@2x.png",
"scale" : "2x"
},
{
"size" : "76x76",
"idiom" : "ipad",
"filename" : "Icon-App-76x76@1x.png",
"scale" : "1x"
},
{
"size" : "76x76",
"idiom" : "ipad",
"filename" : "Icon-App-76x76@2x.png",
"scale" : "2x"
},
{
"size" : "83.5x83.5",
"idiom" : "ipad",
"filename" : "Icon-App-83.5x83.5@2x.png",
"scale" : "2x"
},
{
"size" : "1024x1024",
"idiom" : "ios-marketing",
"filename" : "ItunesArtwork@2x.png",
"scale" : "1x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 776 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

View File

@ -0,0 +1,6 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
}
}

View File

@ -0,0 +1,12 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "first.pdf"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Binary file not shown.

View File

@ -0,0 +1,23 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "iTunesArtwork@1x.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "iTunesArtwork@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"filename" : "iTunesArtwork@3x.png",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 187 KiB

View File

@ -0,0 +1,12 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "second.pdf"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Binary file not shown.

View File

@ -0,0 +1,43 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
<device id="retina6_1" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14490.49"/>
<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="414" height="896"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="center" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="iTunesArtwork" translatesAutoresizingMaskIntoConstraints="NO" id="Z1u-mg-j5F">
<rect key="frame" x="0.0" y="44" width="414" height="818"/>
</imageView>
</subviews>
<color key="backgroundColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstItem="6Tk-OE-BBY" firstAttribute="bottom" secondItem="Z1u-mg-j5F" secondAttribute="bottom" id="KoE-ML-BPv"/>
<constraint firstItem="Z1u-mg-j5F" firstAttribute="leading" secondItem="6Tk-OE-BBY" secondAttribute="leading" id="bfC-dt-R6U"/>
<constraint firstItem="6Tk-OE-BBY" firstAttribute="trailing" secondItem="Z1u-mg-j5F" secondAttribute="trailing" id="nQC-qq-3lK"/>
<constraint firstItem="Z1u-mg-j5F" firstAttribute="top" secondItem="6Tk-OE-BBY" secondAttribute="top" id="vgx-Rh-3IH"/>
</constraints>
<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>
<resources>
<image name="iTunesArtwork" width="512" height="512"/>
</resources>
</document>

View File

@ -0,0 +1,104 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="49e-Tb-3d3">
<device id="retina6_1" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14490.49"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<!--Fatigue Detection-->
<scene sceneID="hNz-n2-bh7">
<objects>
<viewController id="9pv-A4-QxB" customClass="FatigueViewController" customModule="AutoSafe" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="tsR-hK-woN">
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="lfK-Uu-nGE">
<rect key="frame" x="0.0" y="20" width="414" height="793"/>
</imageView>
</subviews>
<color key="backgroundColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstItem="lfK-Uu-nGE" firstAttribute="top" secondItem="tsR-hK-woN" secondAttribute="top" constant="20" symbolic="YES" id="G4A-m5-fMU"/>
<constraint firstItem="PQr-Ze-W5v" firstAttribute="trailing" secondItem="lfK-Uu-nGE" secondAttribute="trailing" id="YVI-sn-ADh"/>
<constraint firstItem="lfK-Uu-nGE" firstAttribute="leading" secondItem="PQr-Ze-W5v" secondAttribute="leading" id="YsU-eu-XeY"/>
<constraint firstItem="PQr-Ze-W5v" firstAttribute="bottom" secondItem="lfK-Uu-nGE" secondAttribute="bottom" id="fGc-5J-gZz"/>
</constraints>
<viewLayoutGuide key="safeArea" id="PQr-Ze-W5v"/>
</view>
<tabBarItem key="tabBarItem" title="Fatigue Detection" image="first" id="acW-dT-cKf"/>
<connections>
<outlet property="imageView" destination="lfK-Uu-nGE" id="JwO-je-K5K"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="W5J-7L-Pyd" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="749.27536231884062" y="-320.08928571428572"/>
</scene>
<!--Overspeeding-->
<scene sceneID="wg7-f3-ORb">
<objects>
<viewController id="8rJ-Kc-sve" customClass="SecondViewController" customModule="AutoSafe" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="QS5-Rx-YEW">
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" text="Second View" textAlignment="center" lineBreakMode="tailTruncation" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="zEq-FU-wV5">
<rect key="frame" x="106.5" y="426.5" width="201.5" height="43"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<fontDescription key="fontDescription" type="system" pointSize="36"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Loaded by SecondViewController" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="NDk-cv-Gan">
<rect key="frame" x="99.5" y="477.5" width="215" height="17"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="NDk-cv-Gan" firstAttribute="top" secondItem="zEq-FU-wV5" secondAttribute="bottom" constant="8" symbolic="YES" id="Day-4N-Vmt"/>
<constraint firstItem="NDk-cv-Gan" firstAttribute="centerX" secondItem="zEq-FU-wV5" secondAttribute="centerX" id="JgO-Fn-dHn"/>
<constraint firstAttribute="centerX" secondItem="zEq-FU-wV5" secondAttribute="centerX" id="qqM-NS-xev"/>
<constraint firstAttribute="centerY" secondItem="zEq-FU-wV5" secondAttribute="centerY" id="qzY-Ky-pLD"/>
</constraints>
<viewLayoutGuide key="safeArea" id="O1u-W8-tvY"/>
</view>
<tabBarItem key="tabBarItem" title="Overspeeding" image="second" id="cPa-gy-q4n"/>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="4Nw-L8-lE0" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="750" y="360"/>
</scene>
<!--Tab Bar Controller-->
<scene sceneID="yl2-sM-qoP">
<objects>
<tabBarController id="49e-Tb-3d3" sceneMemberID="viewController">
<tabBar key="tabBar" contentMode="scaleToFill" id="W28-zg-YXA">
<rect key="frame" x="0.0" y="975" width="768" height="49"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
<color key="barTintColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</tabBar>
<connections>
<segue destination="9pv-A4-QxB" kind="relationship" relationship="viewControllers" id="u7Y-xg-7CH"/>
<segue destination="8rJ-Kc-sve" kind="relationship" relationship="viewControllers" id="lzU-1b-eKA"/>
</connections>
</tabBarController>
<placeholder placeholderIdentifier="IBFirstResponder" id="HuB-VB-40B" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="0.0" y="0.0"/>
</scene>
</scenes>
<resources>
<image name="first" width="30" height="30"/>
<image name="second" width="30" height="30"/>
</resources>
</document>

View File

@ -0,0 +1,196 @@
//
// FaceLandmarksDetector.swift
// AutoSafe
//
// Created by Navan Chauhan on 26/05/19.
// Copyright © 2019 Navan Chauhan. All rights reserved.
//
import AVFoundation
import UIKit
import Vision
class FaceLandmarksDetector {
var counter = 0
open func highlightFaces(for source: UIImage, complete: @escaping (UIImage) -> Void) {
var resultImage = source
let detectFaceRequest = VNDetectFaceLandmarksRequest { (request, error) in
if error == nil {
if let results = request.results as? [VNFaceObservation] {
for faceObservation in results {
guard let landmarks = faceObservation.landmarks else {
continue
}
let boundingRect = faceObservation.boundingBox
resultImage = self.drawOnImage(source: resultImage, boundingRect: boundingRect, faceLandmarks: landmarks)
}
}
} else {
print(error!.localizedDescription)
}
complete(resultImage)
}
let vnImage = VNImageRequestHandler(cgImage: source.cgImage!, options: [:])
try? vnImage.perform([detectFaceRequest])
}
private func drawOnImage(source: UIImage, boundingRect: CGRect, faceLandmarks: VNFaceLandmarks2D) -> UIImage {
UIGraphicsBeginImageContextWithOptions(source.size, false, 1)
let context = UIGraphicsGetCurrentContext()!
context.translateBy(x: 0.0, y: source.size.height)
context.scaleBy(x: 1.0, y: -1.0)
//context.setBlendMode(CGBlendMode.colorBurn)
context.setLineJoin(.round)
context.setLineCap(.round)
context.setShouldAntialias(true)
context.setAllowsAntialiasing(true)
let rectWidth = source.size.width * boundingRect.size.width
let rectHeight = source.size.height * boundingRect.size.height
//draw image
let rect = CGRect(x: 0, y:0, width: source.size.width, height: source.size.height)
context.draw(source.cgImage!, in: rect)
//draw bound rect
context.setStrokeColor(UIColor.green.cgColor)
context.addRect(CGRect(x: boundingRect.origin.x * source.size.width, y:boundingRect.origin.y * source.size.height, width: rectWidth, height: rectHeight))
context.drawPath(using: CGPathDrawingMode.stroke)
//draw overlay
context.setLineWidth(1.0)
func drawFeature(_ feature: VNFaceLandmarkRegion2D, color: CGColor, close: Bool = false) {
context.setStrokeColor(color)
context.setFillColor(color)
for point in feature.normalizedPoints {
// Draw DEBUG numbers
let textFontAttributes = [
NSAttributedString.Key.font: UIFont.systemFont(ofSize: 16),
NSAttributedString.Key.foregroundColor: UIColor.white
]
context.saveGState()
// rotate to draw numbers
context.translateBy(x: 0.0, y: source.size.height)
context.scaleBy(x: 1.0, y: -1.0)
let mp = CGPoint(x: boundingRect.origin.x * source.size.width + point.x * rectWidth, y: source.size.height - (boundingRect.origin.y * source.size.height + point.y * rectHeight))
context.fillEllipse(in: CGRect(origin: CGPoint(x: mp.x-2.0, y: mp.y-2), size: CGSize(width: 4.0, height: 4.0)))
if let index = feature.normalizedPoints.firstIndex(of: point) {
NSString(format: "%d", index).draw(at: mp, withAttributes: textFontAttributes);
//print(mp, index);
}
context.restoreGState()
}
let mappedPoints = feature.normalizedPoints.map { CGPoint(x: boundingRect.origin.x * source.size.width + $0.x * rectWidth, y: boundingRect.origin.y * source.size.height + $0.y * rectHeight) }
context.addLines(between: mappedPoints)
if close, let first = mappedPoints.first, let lats = mappedPoints.last {
context.addLines(between: [lats, first])
}
context.strokePath()
}
if let leftEye = faceLandmarks.leftEye {
drawFeature(leftEye, color: UIColor.cyan.cgColor, close: true)
/*
for point in leftEye.normalizedPoints {
let mp = CGPoint(x: boundingRect.origin.x * source.size.width + point.x * rectWidth, y: source.size.height - (boundingRect.origin.y * source.size.height + point.y * rectHeight))
/*
if let index = leftEye.normalizedPoints.index(of: point) {
print(mp, index);
if(index==4){
print("fuck me, this works!!!")
point4.append(mp[0])
} */
}
//for i in leftEye.normalizedPoints{
// print("HEHE:")
// print(i)
//}
*/
//let p1.x = leftEye.normalizedPoints[0].x;
}
if let rightEye = faceLandmarks.rightEye {
drawFeature(rightEye, color: UIColor.cyan.cgColor, close: true)
}
if let leftPupil = faceLandmarks.leftPupil {
drawFeature(leftPupil, color: UIColor.cyan.cgColor, close: true)
}
if let rightPupil = faceLandmarks.rightPupil {
drawFeature(rightPupil, color: UIColor.cyan.cgColor, close: true)
}
if let leftEye = faceLandmarks.leftEye, let rightEye = faceLandmarks.rightEye {
print("WORKS?")
let p1l = leftEye.normalizedPoints[1]
let p2l = leftEye.normalizedPoints[7]
let p3l = leftEye.normalizedPoints[3]
let p4l = leftEye.normalizedPoints[5]
let p5l = leftEye.normalizedPoints[0]
let p6l = leftEye.normalizedPoints[4]
let Al = hypotf(Float(p1l.x - p2l.x), Float(p1l.y - p2l.y));
let Bl = hypotf(Float(p3l.x - p4l.x), Float(p3l.y - p4l.y));
let Cl = hypotf(Float(p5l.x - p6l.x), Float(p5l.y - p6l.y));
let leftEAR = (Al + Bl) / (2.0 * Cl)
print("Left EAR", leftEAR);
let p1r = rightEye.normalizedPoints[1]
let p2r = rightEye.normalizedPoints[7]
let p3r = rightEye.normalizedPoints[3]
let p4r = rightEye.normalizedPoints[5]
let p5r = rightEye.normalizedPoints[0]
let p6r = rightEye.normalizedPoints[4]
let Ar = hypotf(Float(p1r.x - p2r.x), Float(p1r.y - p2r.y));
let Br = hypotf(Float(p3r.x - p4r.x), Float(p3r.y - p4r.y));
let Cr = hypotf(Float(p5r.x - p6r.x), Float(p5r.y - p6r.y));
let rightEAR = (Ar + Br) / (2.0 * Cr)
print("Right EAR", rightEAR);
let EAR = (Float(leftEAR) + Float(rightEAR)) / 2.0
print("EAR:", EAR)
let threshold = Float(0.25)
let noOfFrames = 2
if EAR < threshold {
counter += 1;
}
if EAR > threshold {
counter -= 1;
}
if counter > noOfFrames {
print("Wake up Sid!")
AudioServicesPlayAlertSound(SystemSoundID(1005))
counter = 0
}
}
let coloredImg : UIImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
return coloredImg
}
}

View File

@ -0,0 +1,83 @@
//
// FatigueDetection.swift
// AutoSafe
//
// Created by Navan Chauhan on 26/05/19.
// Copyright © 2019 Navan Chauhan. All rights reserved.
//
import UIKit
import AVFoundation
import Vision
class FatigueViewController: UIViewController {
let faceDetector = FaceLandmarksDetector()
let captureSession = AVCaptureSession()
@IBOutlet weak var imageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
configureDevice()
}
private func getDevice() -> AVCaptureDevice? {
let discoverSession = AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInDualCamera, .builtInTelephotoCamera, .builtInWideAngleCamera], mediaType: .video, position: .front)
return discoverSession.devices.first
}
private func configureDevice() {
if let device = getDevice() {
do {
try device.lockForConfiguration()
if device.isFocusModeSupported(.continuousAutoFocus) {
device.focusMode = .continuousAutoFocus
}
device.unlockForConfiguration()
} catch { print("failed to lock config") }
do {
let input = try AVCaptureDeviceInput(device: device)
captureSession.addInput(input)
} catch { print("failed to create AVCaptureDeviceInput") }
captureSession.startRunning()
let videoOutput = AVCaptureVideoDataOutput()
videoOutput.videoSettings = [String(kCVPixelBufferPixelFormatTypeKey): Int(kCVPixelFormatType_32BGRA)]
videoOutput.alwaysDiscardsLateVideoFrames = true
videoOutput.setSampleBufferDelegate(self, queue: DispatchQueue.global(qos: .utility))
if captureSession.canAddOutput(videoOutput) {
captureSession.addOutput(videoOutput)
}
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
extension FatigueViewController: AVCaptureVideoDataOutputSampleBufferDelegate {
func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
// Scale image to process it faster
let maxSize = CGSize(width: 1024, height: 1024)
if let image = UIImage(sampleBuffer: sampleBuffer)?.flipped()?.imageWithAspectFit(size: maxSize) {
faceDetector.highlightFaces(for: image) { (resultImage) in
DispatchQueue.main.async {
self.imageView?.image = resultImage
}
}
}
}
}

View File

@ -0,0 +1,57 @@
<?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>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>NSCameraUsageDescription</key>
<string>For Fatigue Detection</string>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>armv7</string>
</array>
<key>UIStatusBarTintParameters</key>
<dict>
<key>UINavigationBar</key>
<dict>
<key>Style</key>
<string>UIBarStyleDefault</string>
<key>Translucent</key>
<false/>
</dict>
</dict>
<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>

View File

@ -0,0 +1,20 @@
//
// SecondViewController.swift
// AutoSafe
//
// Created by Navan Chauhan on 26/05/19.
// Copyright © 2019 Navan Chauhan. All rights reserved.
//
import UIKit
class SecondViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
}

View File

@ -0,0 +1,86 @@
//
// UIImage+Scale.swift
// AutoSafe
//
// Created by Navan Chauhan on 26/05/19.
// Copyright © 2019 Navan Chauhan. All rights reserved.
//
import UIKit
import CoreMedia
extension UIImage {
convenience init?(sampleBuffer: CMSampleBuffer) {
guard let imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else { return nil }
CVPixelBufferLockBaseAddress(imageBuffer, CVPixelBufferLockFlags.readOnly)
let baseAddress = CVPixelBufferGetBaseAddress(imageBuffer)
let bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer)
let width = CVPixelBufferGetWidth(imageBuffer)
let height = CVPixelBufferGetHeight(imageBuffer)
let colorSpace = CGColorSpaceCreateDeviceRGB()
let bitmapInfo: UInt32 = CGBitmapInfo.byteOrder32Little.rawValue | CGImageAlphaInfo.premultipliedFirst.rawValue & CGBitmapInfo.alphaInfoMask.rawValue
guard let context = CGContext(data: baseAddress, width: width, height: height, bitsPerComponent: 8, bytesPerRow: bytesPerRow, space: colorSpace, bitmapInfo: bitmapInfo) else { return nil }
let quartzImage = context.makeImage()
CVPixelBufferUnlockBaseAddress(imageBuffer, CVPixelBufferLockFlags.readOnly)
if let quartz = quartzImage {
self.init(cgImage: quartz, scale: 1.0, orientation: .right)
//self.init(cgImage: quartz)
} else {
return nil
}
}
func hasAlpha() -> Bool {
if let cgImage = self.cgImage {
let alpha = cgImage.alphaInfo
return alpha == .first || alpha == .last || alpha == .premultipliedFirst || alpha == .premultipliedLast
}
return false
}
func flipped() -> UIImage? {
UIGraphicsBeginImageContextWithOptions(self.size, !self.hasAlpha(), self.scale)
let context = UIGraphicsGetCurrentContext()!
context.translateBy(x: self.size.width, y: 0.0)
context.scaleBy(x: -1.0, y: 1.0)
let rect = CGRect(origin: .zero, size: self.size)
self.draw(in: rect)
let retVal = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return retVal
}
func imageWithAspectFit(size:CGSize) -> UIImage? {
let aspectFitSize = self.getAspectFitSize(destination: size)
let resizedImage = self.resize(size: aspectFitSize)
return resizedImage
}
private func getAspectFitSize(destination dst:CGSize) -> CGSize {
var result = CGSize.zero
var scaleRatio = CGPoint()
if (dst.width != 0) {scaleRatio.x = self.size.width / dst.width}
if (dst.height != 0) {scaleRatio.y = self.size.height / dst.height}
let scaleFactor = max(scaleRatio.x, scaleRatio.y)
result.width = scaleRatio.x * dst.width / scaleFactor
result.height = scaleRatio.y * dst.height / scaleFactor
return result
}
func resize(size:CGSize) -> UIImage? {
let imageRect = CGRect(origin: .zero, size: size);
UIGraphicsBeginImageContextWithOptions(size, false, 1.0);
self.draw(in: imageRect)
let scaled = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return scaled
}
}