diff --git a/Project-1/Part-2/Project 1-(Part-II)-IaaS.pdf b/Project-1/Part-2/Project 1-(Part-II)-IaaS.pdf new file mode 100644 index 0000000..ddb0015 Binary files /dev/null and b/Project-1/Part-2/Project 1-(Part-II)-IaaS.pdf differ diff --git a/Project-1/Part-2/get_info.py b/Project-1/Part-2/get_info.py new file mode 100644 index 0000000..e829b9a --- /dev/null +++ b/Project-1/Part-2/get_info.py @@ -0,0 +1,47 @@ +import boto3 +from pprint import pprint + +# creds from ~/.aws/credentials +session = boto3.Session(profile_name="dev") + +region1="us-east-1" +dev_ec2_client = session.client("ec2", region_name=region1) +dev_s3_client = session.client("s3", region_name=region1) +dev_sqs_client = session.client("sqs", region_name=region1) + +# Get all instances' information +all_instances = dev_ec2_client.describe_instances() +with open("output.txt", "w") as out_f: + pprint(all_instances, stream=out_f) + +print("Capacity Reservations:", len(all_instances["Reservations"])) +for idx, reservation in enumerate(all_instances["Reservations"]): + print("Reservation", idx + 1, ":-") + print("\tGroups:", len(reservation["Groups"])) # TODO: add grp info logging + print("\tInstances:", len(reservation["Instances"])) + for inst_idx, instance in enumerate(reservation["Instances"]): + print("\tInstance", inst_idx + 1, ":-") + print("\t\tInstance ID:", instance["InstanceId"]) + print("\t\tInstance state:", instance["State"]["Name"]) + print(f"\t\t{instance["InstanceType"]} in {instance["Placement"]["AvailabilityZone"]}") + print(f"\t\t{instance["CpuOptions"]["CoreCount"]}vCPU, {instance["Hypervisor"]} hypervisor") + print(f"\t\t{instance["PlatformDetails"]} on {instance["RootDeviceType"]} volume") + print("\t\tPublic IP address:", instance["PublicIpAddress"] if "PublicIpAddress" in instance else "N/A") + +# Get all buckets' information +all_buckets = dev_s3_client.list_buckets() +with open("output.txt", "a") as out_f: + pprint(all_buckets, stream=out_f) + +print("Buckets:", len(all_buckets["Buckets"])) +for bucket in all_buckets["Buckets"]: + print("\tName:", bucket["Name"]) + +# Get all queues' information +all_queues = dev_sqs_client.list_queues() +with open("output.txt", "a") as out_f: + pprint(all_queues, stream=out_f) + +print("Queues:", len(all_queues["QueueUrls"])) +for queue in all_queues["QueueUrls"]: + print("\tQueue URL:", queue) diff --git a/Project-1/Part-2/output.txt b/Project-1/Part-2/output.txt new file mode 100644 index 0000000..c9407be --- /dev/null +++ b/Project-1/Part-2/output.txt @@ -0,0 +1,221 @@ +{'Reservations': [{'Groups': [], + 'Instances': [{'AmiLaunchIndex': 0, + 'Architecture': 'x86_64', + 'BlockDeviceMappings': [{'DeviceName': '/dev/sda1', + 'Ebs': {'AttachTime': datetime.datetime(2024, 3, 17, 23, 57, 30, tzinfo=tzutc()), + 'DeleteOnTermination': True, + 'Status': 'attached', + 'VolumeId': 'vol-0b9d38863d1b6a517'}}], + 'CapacityReservationSpecification': {'CapacityReservationPreference': 'open'}, + 'ClientToken': '2460e820-09e2-47f0-b6a2-2bead38887bc', + 'CpuOptions': {'CoreCount': 1, + 'ThreadsPerCore': 1}, + 'CurrentInstanceBootMode': 'legacy-bios', + 'EbsOptimized': False, + 'EnaSupport': True, + 'EnclaveOptions': {'Enabled': False}, + 'HibernationOptions': {'Configured': False}, + 'Hypervisor': 'xen', + 'ImageId': 'ami-05afaa0d246abf7cf', + 'InstanceId': 'i-000668a9b8c594d20', + 'InstanceType': 't2.micro', + 'KeyName': 'cse546-dev', + 'LaunchTime': datetime.datetime(2024, 3, 17, 23, 57, 30, tzinfo=tzutc()), + 'MaintenanceOptions': {'AutoRecovery': 'default'}, + 'MetadataOptions': {'HttpEndpoint': 'enabled', + 'HttpProtocolIpv6': 'disabled', + 'HttpPutResponseHopLimit': 1, + 'HttpTokens': 'optional', + 'InstanceMetadataTags': 'disabled', + 'State': 'pending'}, + 'Monitoring': {'State': 'disabled'}, + 'NetworkInterfaces': [{'Association': {'IpOwnerId': 'amazon', + 'PublicDnsName': 'ec2-54-226-176-42.compute-1.amazonaws.com', + 'PublicIp': '54.226.176.42'}, + 'Attachment': {'AttachTime': datetime.datetime(2024, 3, 17, 23, 57, 30, tzinfo=tzutc()), + 'AttachmentId': 'eni-attach-07debb5dda48fe9e1', + 'DeleteOnTermination': True, + 'DeviceIndex': 0, + 'NetworkCardIndex': 0, + 'Status': 'attached'}, + 'Description': '', + 'Groups': [{'GroupId': 'sg-019686b391a1be806', + 'GroupName': 'default'}], + 'InterfaceType': 'interface', + 'Ipv6Addresses': [], + 'MacAddress': '0a:ff:f3:35:32:df', + 'NetworkInterfaceId': 'eni-061ec190f81f40db0', + 'OwnerId': '146064153251', + 'PrivateDnsName': 'ip-172-31-30-6.ec2.internal', + 'PrivateIpAddress': '172.31.30.6', + 'PrivateIpAddresses': [{'Association': {'IpOwnerId': 'amazon', + 'PublicDnsName': 'ec2-54-226-176-42.compute-1.amazonaws.com', + 'PublicIp': '54.226.176.42'}, + 'Primary': True, + 'PrivateDnsName': 'ip-172-31-30-6.ec2.internal', + 'PrivateIpAddress': '172.31.30.6'}], + 'SourceDestCheck': True, + 'Status': 'in-use', + 'SubnetId': 'subnet-08c8975406f48de21', + 'VpcId': 'vpc-0248a892aa9493bd8'}], + 'Placement': {'AvailabilityZone': 'us-east-1b', + 'GroupName': '', + 'Tenancy': 'default'}, + 'PlatformDetails': 'Linux/UNIX', + 'PrivateDnsName': 'ip-172-31-30-6.ec2.internal', + 'PrivateDnsNameOptions': {'EnableResourceNameDnsAAAARecord': False, + 'EnableResourceNameDnsARecord': False, + 'HostnameType': 'ip-name'}, + 'PrivateIpAddress': '172.31.30.6', + 'ProductCodes': [], + 'PublicDnsName': 'ec2-54-226-176-42.compute-1.amazonaws.com', + 'PublicIpAddress': '54.226.176.42', + 'RootDeviceName': '/dev/sda1', + 'RootDeviceType': 'ebs', + 'SecurityGroups': [{'GroupId': 'sg-019686b391a1be806', + 'GroupName': 'default'}], + 'SourceDestCheck': True, + 'State': {'Code': 32, + 'Name': 'shutting-down'}, + 'StateReason': {'Code': 'Client.UserInitiatedShutdown', + 'Message': 'Client.UserInitiatedShutdown: ' + 'User initiated ' + 'shutdown'}, + 'StateTransitionReason': 'User initiated ' + '(2024-03-18 ' + '05:12:55 GMT)', + 'SubnetId': 'subnet-08c8975406f48de21', + 'Tags': [{'Key': 'Name', + 'Value': 'app-tier-instance'}], + 'UsageOperation': 'RunInstances', + 'UsageOperationUpdateTime': datetime.datetime(2024, 3, 17, 23, 57, 30, tzinfo=tzutc()), + 'VirtualizationType': 'hvm', + 'VpcId': 'vpc-0248a892aa9493bd8'}], + 'OwnerId': '146064153251', + 'ReservationId': 'r-037c5b8ea7529f040'}, + {'Groups': [], + 'Instances': [{'AmiLaunchIndex': 0, + 'Architecture': 'x86_64', + 'BlockDeviceMappings': [{'DeviceName': '/dev/sda1', + 'Ebs': {'AttachTime': datetime.datetime(2024, 3, 18, 5, 13, 9, tzinfo=tzutc()), + 'DeleteOnTermination': True, + 'Status': 'attaching', + 'VolumeId': 'vol-09f549973ead49491'}}], + 'CapacityReservationSpecification': {'CapacityReservationPreference': 'open'}, + 'ClientToken': '303fb65a-631d-468a-aea3-77a34152b976', + 'CpuOptions': {'CoreCount': 1, + 'ThreadsPerCore': 1}, + 'CurrentInstanceBootMode': 'legacy-bios', + 'EbsOptimized': False, + 'EnaSupport': True, + 'EnclaveOptions': {'Enabled': False}, + 'HibernationOptions': {'Configured': False}, + 'Hypervisor': 'xen', + 'ImageId': 'ami-0c7217cdde317cfec', + 'InstanceId': 'i-001fcad9b4bda4cbe', + 'InstanceType': 't2.micro', + 'KeyName': 'cse546-dev', + 'LaunchTime': datetime.datetime(2024, 3, 18, 5, 13, 8, tzinfo=tzutc()), + 'MaintenanceOptions': {'AutoRecovery': 'default'}, + 'MetadataOptions': {'HttpEndpoint': 'enabled', + 'HttpProtocolIpv6': 'disabled', + 'HttpPutResponseHopLimit': 1, + 'HttpTokens': 'optional', + 'InstanceMetadataTags': 'disabled', + 'State': 'pending'}, + 'Monitoring': {'State': 'disabled'}, + 'NetworkInterfaces': [{'Association': {'IpOwnerId': 'amazon', + 'PublicDnsName': 'ec2-54-167-113-39.compute-1.amazonaws.com', + 'PublicIp': '54.167.113.39'}, + 'Attachment': {'AttachTime': datetime.datetime(2024, 3, 18, 5, 13, 8, tzinfo=tzutc()), + 'AttachmentId': 'eni-attach-0aac12b5548bcf9fc', + 'DeleteOnTermination': True, + 'DeviceIndex': 0, + 'NetworkCardIndex': 0, + 'Status': 'attaching'}, + 'Description': '', + 'Groups': [{'GroupId': 'sg-019686b391a1be806', + 'GroupName': 'default'}], + 'InterfaceType': 'interface', + 'Ipv6Addresses': [], + 'MacAddress': '0a:ff:d6:7b:8c:b7', + 'NetworkInterfaceId': 'eni-073f511c623a388ac', + 'OwnerId': '146064153251', + 'PrivateDnsName': 'ip-172-31-31-11.ec2.internal', + 'PrivateIpAddress': '172.31.31.11', + 'PrivateIpAddresses': [{'Association': {'IpOwnerId': 'amazon', + 'PublicDnsName': 'ec2-54-167-113-39.compute-1.amazonaws.com', + 'PublicIp': '54.167.113.39'}, + 'Primary': True, + 'PrivateDnsName': 'ip-172-31-31-11.ec2.internal', + 'PrivateIpAddress': '172.31.31.11'}], + 'SourceDestCheck': True, + 'Status': 'in-use', + 'SubnetId': 'subnet-08c8975406f48de21', + 'VpcId': 'vpc-0248a892aa9493bd8'}], + 'Placement': {'AvailabilityZone': 'us-east-1b', + 'GroupName': '', + 'Tenancy': 'default'}, + 'PlatformDetails': 'Linux/UNIX', + 'PrivateDnsName': 'ip-172-31-31-11.ec2.internal', + 'PrivateDnsNameOptions': {'EnableResourceNameDnsAAAARecord': False, + 'EnableResourceNameDnsARecord': False, + 'HostnameType': 'ip-name'}, + 'PrivateIpAddress': '172.31.31.11', + 'ProductCodes': [], + 'PublicDnsName': 'ec2-54-167-113-39.compute-1.amazonaws.com', + 'PublicIpAddress': '54.167.113.39', + 'RootDeviceName': '/dev/sda1', + 'RootDeviceType': 'ebs', + 'SecurityGroups': [{'GroupId': 'sg-019686b391a1be806', + 'GroupName': 'default'}], + 'SourceDestCheck': True, + 'State': {'Code': 0, 'Name': 'pending'}, + 'StateTransitionReason': '', + 'SubnetId': 'subnet-08c8975406f48de21', + 'Tags': [{'Key': 'Name', + 'Value': 'web-instance'}], + 'UsageOperation': 'RunInstances', + 'UsageOperationUpdateTime': datetime.datetime(2024, 3, 18, 5, 13, 8, tzinfo=tzutc()), + 'VirtualizationType': 'hvm', + 'VpcId': 'vpc-0248a892aa9493bd8'}], + 'OwnerId': '146064153251', + 'ReservationId': 'r-0678419e9bba10da6'}], + 'ResponseMetadata': {'HTTPHeaders': {'cache-control': 'no-cache, no-store', + 'content-type': 'text/xml;charset=UTF-8', + 'date': 'Mon, 18 Mar 2024 05:13:14 GMT', + 'server': 'AmazonEC2', + 'strict-transport-security': 'max-age=31536000; ' + 'includeSubDomains', + 'transfer-encoding': 'chunked', + 'vary': 'accept-encoding', + 'x-amzn-requestid': 'a1fff5d0-40e6-4c66-b06a-3d2a3f22800c'}, + 'HTTPStatusCode': 200, + 'RequestId': 'a1fff5d0-40e6-4c66-b06a-3d2a3f22800c', + 'RetryAttempts': 0}} +{'Buckets': [{'CreationDate': datetime.datetime(2024, 3, 17, 23, 17, 37, tzinfo=tzutc()), + 'Name': '1229569564-in-bucket'}, + {'CreationDate': datetime.datetime(2024, 3, 17, 23, 18, 24, tzinfo=tzutc()), + 'Name': '1229569564-out-bucket'}], + 'Owner': {'DisplayName': 'rknarayan02', + 'ID': 'd9dd1c35ead8c3223e43ab9d0c96cce689c3295fd2799e8c9076d272a36d85a8'}, + 'ResponseMetadata': {'HTTPHeaders': {'content-type': 'application/xml', + 'date': 'Mon, 18 Mar 2024 05:13:17 GMT', + 'server': 'AmazonS3', + 'transfer-encoding': 'chunked', + 'x-amz-id-2': '7gCwSENarAQMBf7ShdAXTiB5NDX/k5uydWL9nivR9D/23H2Ps8nDJVIzh34dJfxPGCEC3X5LpXg=', + 'x-amz-request-id': 'EEDAR281YM3D3SEC'}, + 'HTTPStatusCode': 200, + 'HostId': '7gCwSENarAQMBf7ShdAXTiB5NDX/k5uydWL9nivR9D/23H2Ps8nDJVIzh34dJfxPGCEC3X5LpXg=', + 'RequestId': 'EEDAR281YM3D3SEC', + 'RetryAttempts': 0}} +{'QueueUrls': ['https://sqs.us-east-1.amazonaws.com/146064153251/1229569564-req-queue', + 'https://sqs.us-east-1.amazonaws.com/146064153251/1229569564-resp-queue'], + 'ResponseMetadata': {'HTTPHeaders': {'connection': 'keep-alive', + 'content-length': '427', + 'content-type': 'text/xml', + 'date': 'Mon, 18 Mar 2024 05:13:17 GMT', + 'x-amzn-requestid': 'ab25ecea-b352-5c95-a779-b29b7cffb16a'}, + 'HTTPStatusCode': 200, + 'RequestId': 'ab25ecea-b352-5c95-a779-b29b7cffb16a', + 'RetryAttempts': 0}} diff --git a/Project-1/Part-2/requirements.txt b/Project-1/Part-2/requirements.txt new file mode 100644 index 0000000..015641e --- /dev/null +++ b/Project-1/Part-2/requirements.txt @@ -0,0 +1,4 @@ +boto3 +numpy +pandas +requests \ No newline at end of file diff --git a/Project-1/Part-2/run_single_app_tier.py b/Project-1/Part-2/run_single_app_tier.py new file mode 100644 index 0000000..7e90b18 --- /dev/null +++ b/Project-1/Part-2/run_single_app_tier.py @@ -0,0 +1,24 @@ +import boto3 +from pathlib import Path + + +# creds from ~/.aws/credentials +session = boto3.Session(profile_name="dev") +dev_ec2_client = session.client("ec2", region_name="us-east-1") + +# Ubuntu Server 22.04 LTS, 8GB SSD on EBS, 64-bit (x86) 1vCPU +# pip installed, torch installed, model loaded +app_tier_ami_id = "ami-05afaa0d246abf7cf" +reservation = dev_ec2_client.run_instances( + ImageId=app_tier_ami_id, + InstanceType="t2.micro", + KeyName='cse546-dev', + MinCount=1, + MaxCount=1, + TagSpecifications=[ + {"ResourceType": "instance", "Tags": [{"Key": "Name", "Value": "app-tier-instance"}]} + ], + # UserData=user_data +) + +print("Instances allocated successfully:", "Yes" if reservation else "No") diff --git a/Project-1/Part-2/run_web_tier.py b/Project-1/Part-2/run_web_tier.py new file mode 100644 index 0000000..baa12e2 --- /dev/null +++ b/Project-1/Part-2/run_web_tier.py @@ -0,0 +1,44 @@ +import boto3 +import argparse +from pathlib import Path + +parser = argparse.ArgumentParser() +parser.add_argument("--eip-id", type=str,help="Allocation ID of elastic IP address") +args = vars(parser.parse_args()) +eip_id = str(args["eip-id"]) if args.get("eip-id") else None + +# creds from ~/.aws/credentials +session = boto3.Session(profile_name="dev") +dev_ec2_client = session.client("ec2", region_name="us-east-1") + +with open(Path(__file__) / ".." / "web_tier_instance_run", "r") as setup_f: + user_data = setup_f.read() + +# Create capacity reservation of instances +ami_id = "ami-0c7217cdde317cfec" # Ubuntu Server 22.04 LTS, 8GB SSD on EBS, 64-bit (x86) 1vCPU +reservation = dev_ec2_client.run_instances( + ImageId=ami_id, + InstanceType="t2.micro", + KeyName='cse546-dev', + MinCount=1, # if available instances are less than min_count, abort with no allocation + MaxCount=1, # try to allocate max_count instances. we only need one for now + TagSpecifications=[ + {"ResourceType": "instance", "Tags": [{"Key": "Name", "Value": "web-instance"}]} + ], + # UserData=user_data +) + +print("Instances allocated successfully:", "Yes" if reservation else "No") +new_inst_id = '' + +# Allocate EIP on successful instance launch +if reservation and eip_id is not None: + print("Waiting for instance to start running...") + waiter = dev_ec2_client.get_waiter('instance_running') + waiter.wait(InstanceIds=[new_inst_id]) + assoc = dev_ec2_client.associate_address( + AllocationId=eip_id, + InstanceId=new_inst_id + ) + if assoc["ResponseMetadata"]["HTTPStatusCode"] == 200: + print("Allocated EIP successfully") diff --git a/Project-1/Part-2/terminate_setup.py b/Project-1/Part-2/terminate_setup.py new file mode 100644 index 0000000..a4a77d1 --- /dev/null +++ b/Project-1/Part-2/terminate_setup.py @@ -0,0 +1,94 @@ +import boto3 +import botocore +import argparse + +parser = argparse.ArgumentParser() +parser.add_argument( + "--web-instance-name", + type=str, + help="Value of 'Name' tag of the web tier instance to be terminated", +) +parser.add_argument( + "--in-bucket-name", + type=str, + help="Value of 'Name' tag of the S3 input bucket to be terminated", +) +parser.add_argument( + "--out-bucket-name", + type=str, + help="Value of 'Name' tag of the S3 output bucket to be terminated", +) +parser.add_argument( + "--in-queue-name", + type=str, + help="Value of 'Name' tag of the SQS request queue to be terminated", +) +parser.add_argument( + "--out-queue-name", + type=str, + help="Value of 'Name' tag of the SQS response queue to be terminated", +) +args = vars(parser.parse_args()) + + +def noneparser(obj, key): + return str(obj[key]) if obj.get(key) else None + + +target_web_instance_name = noneparser(args, "web_instance_name") +target_in_bucket_name = noneparser(args, "in_bucket_name") +target_out_bucket_name = noneparser(args, "out_bucket_name") +target_in_queue_name = noneparser(args, "in_queue_name") +target_out_queue_name = noneparser(args, "out_queue_name") + +print( + target_web_instance_name, + target_in_bucket_name, + target_out_bucket_name, + target_in_queue_name, + target_out_queue_name, +) + +# creds from ~/.aws/credentials +session = boto3.Session(profile_name="dev") + +region1 = "us-east-1" +dev_ec2_client = session.client("ec2", region_name=region1) +dev_s3_client = session.client("s3", region_name=region1) + + +def get_instance_id_by_name_tag(name): + all_instances = dev_ec2_client.describe_instances() + for reservation in all_instances["Reservations"]: + for instance in reservation["Instances"]: + for tag in instance["Tags"]: + if tag["Key"] == "Name" and tag["Value"] == name: + return instance["InstanceId"] + return -1 + +# web tier +if target_web_instance_name is not None: + target_inst_id = get_instance_id_by_name_tag(target_web_instance_name) + if target_inst_id == -1: + print("Instance does not exist") + else: + print("Found web-instance ID: ", target_inst_id) + response = dev_ec2_client.terminate_instances(InstanceIds=[target_inst_id]) + if response["ResponseMetadata"]["HTTPStatusCode"] == 200: + print("Terminated instance successfully") + +# buckets +if target_in_bucket_name is not None: + try: + response = dev_s3_client.delete_bucket(Bucket=target_in_bucket_name) + if response["ResponseMetadata"]["HTTPStatusCode"] == 204: + print("Deleted input bucket successfully") + except dev_s3_client.exceptions.NoSuchBucket as e: + print("Input bucket does not exist") +if target_out_bucket_name is not None: + try: + response = dev_s3_client.delete_bucket(Bucket=target_out_bucket_name) + if response["ResponseMetadata"]["HTTPStatusCode"] == 204: + print("Deleted output bucket successfully") + except dev_s3_client.exceptions.NoSuchBucket as e: + print("Output bucket does not exist") \ No newline at end of file diff --git a/Project-1/Part-2/web-tier-express/README.md b/Project-1/Part-2/web-tier-express/README.md new file mode 100644 index 0000000..be36e44 --- /dev/null +++ b/Project-1/Part-2/web-tier-express/README.md @@ -0,0 +1,4 @@ +# Web tier with ExpressJS + +- Run `npm i` to install all dependencies +- Start: `npm run dev` or `prod` diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_000.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_000.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_000.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_001.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_001.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_001.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_002.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_002.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_002.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_003.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_003.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_003.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_004.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_004.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_004.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_005.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_005.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_005.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_006.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_006.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_006.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_007.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_007.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_007.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_008.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_008.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_008.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_009.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_009.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_009.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_010.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_010.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_010.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_011.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_011.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_011.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_012.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_012.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_012.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_013.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_013.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_013.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_014.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_014.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_014.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_015.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_015.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_015.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_016.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_016.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_016.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_017.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_017.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_017.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_018.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_018.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_018.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_019.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_019.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_019.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_020.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_020.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_020.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_021.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_021.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_021.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_022.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_022.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_022.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_023.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_023.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_023.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_024.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_024.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_024.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_025.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_025.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_025.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_026.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_026.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_026.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_027.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_027.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_027.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_028.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_028.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_028.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_029.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_029.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_029.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_030.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_030.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_030.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_031.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_031.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_031.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_032.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_032.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_032.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_033.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_033.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_033.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_034.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_034.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_034.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_035.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_035.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_035.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_036.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_036.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_036.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_037.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_037.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_037.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_038.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_038.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_038.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_039.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_039.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_039.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_040.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_040.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_040.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_041.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_041.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_041.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_042.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_042.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_042.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_043.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_043.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_043.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_044.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_044.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_044.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_045.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_045.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_045.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_046.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_046.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_046.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_047.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_047.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_047.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_048.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_048.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_048.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_049.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_049.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_049.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_050.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_050.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_050.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_051.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_051.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_051.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_052.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_052.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_052.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_053.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_053.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_053.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_054.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_054.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_054.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_055.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_055.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_055.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_056.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_056.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_056.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_057.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_057.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_057.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_058.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_058.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_058.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_059.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_059.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_059.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_060.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_060.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_060.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_061.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_061.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_061.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_062.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_062.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_062.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_063.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_063.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_063.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_064.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_064.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_064.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_065.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_065.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_065.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_066.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_066.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_066.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_067.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_067.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_067.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_068.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_068.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_068.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_069.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_069.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_069.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_070.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_070.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_070.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_071.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_071.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_071.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_072.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_072.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_072.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_073.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_073.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_073.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_074.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_074.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_074.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_075.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_075.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_075.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_076.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_076.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_076.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_077.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_077.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_077.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_078.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_078.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_078.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_079.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_079.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_079.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_080.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_080.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_080.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_081.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_081.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_081.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_082.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_082.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_082.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_083.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_083.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_083.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_084.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_084.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_084.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_085.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_085.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_085.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_086.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_086.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_086.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_087.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_087.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_087.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_088.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_088.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_088.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_089.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_089.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_089.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_090.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_090.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_090.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_091.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_091.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_091.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_092.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_092.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_092.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_093.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_093.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_093.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_094.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_094.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_094.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_095.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_095.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_095.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_096.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_096.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_096.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_097.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_097.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_097.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_098.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_098.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_098.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_099.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_099.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_099.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_100.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_100.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_100.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_101.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_101.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_101.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_102.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_102.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_102.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_103.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_103.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_103.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_104.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_104.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_104.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_105.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_105.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_105.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_106.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_106.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_106.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_107.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_107.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_107.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_108.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_108.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_108.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_109.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_109.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_109.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_110.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_110.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_110.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_111.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_111.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_111.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_112.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_112.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_112.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_113.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_113.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_113.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_114.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_114.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_114.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_115.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_115.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_115.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_116.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_116.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_116.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_117.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_117.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_117.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_118.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_118.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_118.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_119.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_119.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_119.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_120.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_120.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_120.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_121.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_121.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_121.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_122.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_122.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_122.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_123.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_123.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_123.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_124.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_124.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_124.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_125.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_125.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_125.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_126.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_126.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_126.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_127.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_127.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_127.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_128.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_128.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_128.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_129.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_129.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_129.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_130.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_130.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_130.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_131.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_131.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_131.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_132.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_132.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_132.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_133.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_133.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_133.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_134.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_134.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_134.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_135.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_135.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_135.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_136.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_136.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_136.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_137.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_137.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_137.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_138.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_138.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_138.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_139.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_139.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_139.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_140.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_140.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_140.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_141.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_141.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_141.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_142.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_142.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_142.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_143.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_143.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_143.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_144.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_144.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_144.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_145.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_145.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_145.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_146.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_146.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_146.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_147.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_147.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_147.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_148.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_148.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_148.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_149.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_149.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_149.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_150.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_150.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_150.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_151.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_151.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_151.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_152.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_152.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_152.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_153.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_153.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_153.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_154.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_154.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_154.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_155.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_155.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_155.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_156.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_156.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_156.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_157.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_157.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_157.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_158.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_158.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_158.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_159.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_159.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_159.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_160.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_160.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_160.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_161.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_161.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_161.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_162.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_162.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_162.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_163.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_163.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_163.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_164.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_164.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_164.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_165.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_165.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_165.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_166.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_166.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_166.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_167.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_167.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_167.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_168.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_168.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_168.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_169.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_169.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_169.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_170.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_170.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_170.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_171.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_171.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_171.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_172.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_172.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_172.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_173.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_173.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_173.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_174.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_174.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_174.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_175.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_175.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_175.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_176.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_176.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_176.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_177.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_177.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_177.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_178.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_178.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_178.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_179.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_179.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_179.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_180.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_180.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_180.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_181.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_181.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_181.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_182.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_182.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_182.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_183.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_183.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_183.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_184.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_184.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_184.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_185.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_185.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_185.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_186.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_186.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_186.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_187.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_187.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_187.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_188.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_188.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_188.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_189.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_189.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_189.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_190.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_190.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_190.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_191.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_191.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_191.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_192.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_192.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_192.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_193.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_193.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_193.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_194.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_194.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_194.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_195.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_195.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_195.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_196.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_196.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_196.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_197.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_197.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_197.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_198.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_198.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_198.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_199.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_199.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_199.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_200.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_200.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_200.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_201.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_201.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_201.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_202.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_202.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_202.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_203.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_203.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_203.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_204.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_204.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_204.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_205.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_205.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_205.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_206.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_206.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_206.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_207.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_207.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_207.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_208.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_208.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_208.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_209.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_209.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_209.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_210.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_210.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_210.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_211.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_211.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_211.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_212.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_212.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_212.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_213.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_213.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_213.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_214.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_214.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_214.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_215.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_215.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_215.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_216.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_216.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_216.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_217.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_217.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_217.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_218.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_218.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_218.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_219.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_219.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_219.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_220.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_220.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_220.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_221.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_221.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_221.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_222.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_222.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_222.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_223.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_223.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_223.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_224.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_224.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_224.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_225.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_225.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_225.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_226.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_226.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_226.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_227.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_227.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_227.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_228.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_228.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_228.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_229.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_229.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_229.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_230.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_230.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_230.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_231.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_231.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_231.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_232.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_232.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_232.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_233.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_233.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_233.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_234.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_234.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_234.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_235.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_235.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_235.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_236.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_236.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_236.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_237.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_237.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_237.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_238.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_238.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_238.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_239.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_239.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_239.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_240.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_240.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_240.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_241.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_241.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_241.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_242.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_242.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_242.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_243.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_243.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_243.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_244.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_244.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_244.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_245.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_245.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_245.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_246.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_246.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_246.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_247.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_247.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_247.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_248.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_248.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_248.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_249.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_249.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_249.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_250.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_250.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_250.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_251.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_251.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_251.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_252.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_252.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_252.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_253.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_253.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_253.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_254.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_254.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_254.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_255.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_255.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_255.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_256.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_256.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_256.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_257.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_257.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_257.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_258.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_258.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_258.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_259.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_259.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_259.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_260.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_260.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_260.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_261.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_261.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_261.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_262.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_262.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_262.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_263.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_263.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_263.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_264.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_264.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_264.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_265.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_265.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_265.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_266.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_266.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_266.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_267.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_267.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_267.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_268.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_268.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_268.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_269.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_269.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_269.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_270.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_270.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_270.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_271.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_271.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_271.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_272.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_272.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_272.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_273.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_273.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_273.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_274.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_274.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_274.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_275.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_275.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_275.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_276.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_276.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_276.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_277.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_277.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_277.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_278.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_278.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_278.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_279.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_279.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_279.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_280.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_280.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_280.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_281.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_281.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_281.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_282.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_282.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_282.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_283.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_283.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_283.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_284.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_284.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_284.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_285.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_285.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_285.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_286.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_286.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_286.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_287.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_287.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_287.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_288.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_288.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_288.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_289.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_289.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_289.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_290.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_290.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_290.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_291.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_291.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_291.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_292.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_292.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_292.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_293.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_293.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_293.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_294.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_294.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_294.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_295.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_295.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_295.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_296.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_296.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_296.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_297.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_297.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_297.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_298.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_298.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_298.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_299.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_299.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_299.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_300.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_300.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_300.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_301.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_301.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_301.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_302.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_302.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_302.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_303.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_303.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_303.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_304.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_304.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_304.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_305.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_305.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_305.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_306.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_306.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_306.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_307.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_307.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_307.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_308.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_308.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_308.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_309.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_309.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_309.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_310.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_310.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_310.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_311.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_311.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_311.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_312.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_312.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_312.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_313.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_313.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_313.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_314.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_314.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_314.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_315.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_315.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_315.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_316.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_316.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_316.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_317.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_317.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_317.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_318.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_318.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_318.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_319.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_319.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_319.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_320.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_320.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_320.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_321.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_321.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_321.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_322.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_322.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_322.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_323.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_323.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_323.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_324.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_324.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_324.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_325.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_325.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_325.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_326.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_326.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_326.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_327.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_327.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_327.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_328.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_328.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_328.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_329.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_329.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_329.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_330.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_330.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_330.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_331.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_331.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_331.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_332.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_332.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_332.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_333.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_333.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_333.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_334.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_334.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_334.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_335.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_335.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_335.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_336.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_336.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_336.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_337.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_337.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_337.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_338.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_338.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_338.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_339.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_339.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_339.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_340.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_340.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_340.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_341.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_341.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_341.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_342.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_342.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_342.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_343.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_343.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_343.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_344.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_344.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_344.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_345.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_345.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_345.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_346.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_346.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_346.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_347.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_347.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_347.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_348.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_348.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_348.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_349.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_349.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_349.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_350.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_350.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_350.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_351.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_351.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_351.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_352.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_352.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_352.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_353.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_353.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_353.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_354.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_354.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_354.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_355.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_355.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_355.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_356.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_356.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_356.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_357.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_357.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_357.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_358.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_358.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_358.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_359.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_359.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_359.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_360.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_360.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_360.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_361.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_361.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_361.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_362.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_362.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_362.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_363.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_363.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_363.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_364.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_364.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_364.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_365.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_365.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_365.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_366.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_366.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_366.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_367.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_367.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_367.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_368.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_368.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_368.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_369.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_369.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_369.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_370.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_370.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_370.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_371.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_371.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_371.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_372.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_372.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_372.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_373.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_373.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_373.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_374.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_374.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_374.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_375.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_375.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_375.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_376.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_376.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_376.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_377.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_377.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_377.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_378.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_378.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_378.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_379.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_379.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_379.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_380.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_380.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_380.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_381.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_381.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_381.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_382.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_382.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_382.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_383.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_383.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_383.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_384.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_384.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_384.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_385.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_385.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_385.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_386.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_386.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_386.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_387.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_387.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_387.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_388.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_388.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_388.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_389.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_389.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_389.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_390.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_390.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_390.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_391.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_391.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_391.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_392.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_392.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_392.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_393.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_393.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_393.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_394.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_394.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_394.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_395.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_395.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_395.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_396.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_396.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_396.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_397.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_397.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_397.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_398.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_398.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_398.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_399.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_399.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_399.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_400.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_400.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_400.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_401.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_401.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_401.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_402.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_402.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_402.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_403.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_403.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_403.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_404.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_404.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_404.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_405.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_405.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_405.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_406.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_406.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_406.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_407.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_407.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_407.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_408.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_408.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_408.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_409.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_409.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_409.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_410.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_410.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_410.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_411.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_411.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_411.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_412.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_412.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_412.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_413.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_413.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_413.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_414.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_414.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_414.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_415.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_415.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_415.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_416.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_416.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_416.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_417.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_417.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_417.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_418.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_418.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_418.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_419.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_419.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_419.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_420.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_420.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_420.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_421.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_421.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_421.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_422.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_422.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_422.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_423.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_423.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_423.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_424.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_424.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_424.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_425.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_425.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_425.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_426.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_426.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_426.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_427.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_427.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_427.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_428.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_428.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_428.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_429.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_429.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_429.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_430.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_430.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_430.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_431.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_431.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_431.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_432.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_432.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_432.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_433.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_433.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_433.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_434.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_434.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_434.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_435.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_435.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_435.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_436.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_436.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_436.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_437.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_437.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_437.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_438.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_438.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_438.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_439.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_439.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_439.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_440.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_440.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_440.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_441.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_441.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_441.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_442.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_442.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_442.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_443.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_443.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_443.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_444.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_444.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_444.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_445.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_445.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_445.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_446.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_446.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_446.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_447.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_447.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_447.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_448.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_448.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_448.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_449.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_449.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_449.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_450.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_450.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_450.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_451.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_451.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_451.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_452.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_452.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_452.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_453.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_453.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_453.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_454.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_454.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_454.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_455.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_455.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_455.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_456.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_456.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_456.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_457.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_457.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_457.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_458.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_458.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_458.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_459.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_459.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_459.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_460.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_460.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_460.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_461.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_461.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_461.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_462.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_462.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_462.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_463.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_463.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_463.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_464.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_464.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_464.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_465.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_465.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_465.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_466.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_466.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_466.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_467.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_467.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_467.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_468.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_468.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_468.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_469.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_469.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_469.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_470.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_470.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_470.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_471.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_471.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_471.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_472.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_472.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_472.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_473.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_473.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_473.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_474.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_474.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_474.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_475.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_475.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_475.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_476.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_476.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_476.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_477.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_477.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_477.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_478.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_478.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_478.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_479.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_479.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_479.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_480.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_480.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_480.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_481.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_481.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_481.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_482.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_482.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_482.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_483.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_483.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_483.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_484.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_484.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_484.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_485.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_485.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_485.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_486.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_486.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_486.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_487.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_487.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_487.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_488.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_488.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_488.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_489.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_489.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_489.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_490.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_490.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_490.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_491.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_491.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_491.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_492.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_492.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_492.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_493.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_493.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_493.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_494.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_494.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_494.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_495.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_495.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_495.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_496.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_496.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_496.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_497.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_497.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_497.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_498.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_498.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_498.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_499.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_499.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_499.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_500.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_500.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_500.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_501.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_501.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_501.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_502.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_502.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_502.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_503.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_503.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_503.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_504.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_504.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_504.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_505.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_505.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_505.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_506.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_506.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_506.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_507.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_507.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_507.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_508.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_508.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_508.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_509.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_509.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_509.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_510.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_510.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_510.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_511.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_511.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_511.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_512.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_512.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_512.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_513.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_513.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_513.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_514.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_514.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_514.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_515.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_515.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_515.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_516.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_516.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_516.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_517.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_517.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_517.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_518.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_518.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_518.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_519.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_519.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_519.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_520.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_520.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_520.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_521.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_521.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_521.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_522.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_522.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_522.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_523.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_523.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_523.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_524.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_524.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_524.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_525.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_525.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_525.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_526.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_526.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_526.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_527.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_527.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_527.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_528.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_528.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_528.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_529.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_529.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_529.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_530.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_530.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_530.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_531.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_531.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_531.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_532.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_532.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_532.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_533.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_533.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_533.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_534.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_534.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_534.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_535.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_535.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_535.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_536.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_536.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_536.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_537.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_537.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_537.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_538.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_538.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_538.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_539.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_539.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_539.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_540.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_540.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_540.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_541.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_541.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_541.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_542.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_542.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_542.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_543.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_543.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_543.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_544.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_544.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_544.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_545.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_545.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_545.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_546.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_546.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_546.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_547.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_547.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_547.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_548.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_548.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_548.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_549.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_549.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_549.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_550.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_550.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_550.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_551.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_551.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_551.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_552.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_552.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_552.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_553.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_553.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_553.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_554.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_554.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_554.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_555.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_555.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_555.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_556.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_556.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_556.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_557.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_557.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_557.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_558.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_558.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_558.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_559.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_559.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_559.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_560.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_560.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_560.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_561.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_561.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_561.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_562.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_562.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_562.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_563.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_563.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_563.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_564.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_564.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_564.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_565.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_565.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_565.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_566.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_566.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_566.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_567.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_567.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_567.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_568.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_568.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_568.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_569.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_569.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_569.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_570.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_570.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_570.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_571.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_571.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_571.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_572.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_572.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_572.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_573.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_573.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_573.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_574.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_574.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_574.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_575.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_575.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_575.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_576.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_576.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_576.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_577.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_577.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_577.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_578.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_578.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_578.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_579.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_579.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_579.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_580.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_580.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_580.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_581.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_581.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_581.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_582.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_582.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_582.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_583.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_583.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_583.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_584.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_584.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_584.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_585.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_585.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_585.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_586.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_586.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_586.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_587.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_587.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_587.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_588.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_588.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_588.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_589.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_589.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_589.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_590.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_590.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_590.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_591.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_591.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_591.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_592.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_592.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_592.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_593.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_593.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_593.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_594.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_594.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_594.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_595.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_595.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_595.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_596.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_596.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_596.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_597.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_597.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_597.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_598.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_598.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_598.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_599.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_599.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_599.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_600.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_600.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_600.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_601.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_601.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_601.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_602.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_602.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_602.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_603.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_603.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_603.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_604.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_604.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_604.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_605.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_605.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_605.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_606.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_606.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_606.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_607.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_607.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_607.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_608.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_608.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_608.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_609.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_609.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_609.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_610.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_610.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_610.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_611.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_611.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_611.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_612.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_612.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_612.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_613.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_613.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_613.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_614.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_614.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_614.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_615.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_615.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_615.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_616.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_616.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_616.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_617.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_617.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_617.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_618.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_618.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_618.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_619.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_619.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_619.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_620.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_620.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_620.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_621.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_621.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_621.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_622.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_622.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_622.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_623.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_623.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_623.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_624.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_624.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_624.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_625.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_625.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_625.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_626.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_626.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_626.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_627.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_627.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_627.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_628.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_628.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_628.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_629.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_629.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_629.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_630.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_630.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_630.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_631.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_631.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_631.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_632.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_632.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_632.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_633.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_633.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_633.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_634.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_634.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_634.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_635.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_635.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_635.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_636.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_636.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_636.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_637.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_637.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_637.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_638.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_638.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_638.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_639.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_639.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_639.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_640.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_640.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_640.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_641.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_641.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_641.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_642.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_642.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_642.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_643.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_643.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_643.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_644.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_644.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_644.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_645.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_645.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_645.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_646.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_646.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_646.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_647.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_647.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_647.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_648.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_648.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_648.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_649.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_649.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_649.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_650.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_650.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_650.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_651.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_651.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_651.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_652.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_652.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_652.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_653.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_653.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_653.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_654.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_654.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_654.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_655.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_655.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_655.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_656.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_656.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_656.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_657.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_657.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_657.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_658.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_658.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_658.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_659.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_659.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_659.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_660.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_660.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_660.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_661.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_661.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_661.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_662.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_662.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_662.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_663.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_663.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_663.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_664.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_664.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_664.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_665.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_665.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_665.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_666.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_666.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_666.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_667.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_667.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_667.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_668.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_668.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_668.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_669.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_669.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_669.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_670.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_670.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_670.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_671.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_671.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_671.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_672.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_672.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_672.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_673.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_673.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_673.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_674.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_674.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_674.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_675.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_675.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_675.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_676.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_676.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_676.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_677.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_677.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_677.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_678.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_678.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_678.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_679.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_679.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_679.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_680.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_680.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_680.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_681.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_681.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_681.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_682.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_682.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_682.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_683.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_683.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_683.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_684.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_684.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_684.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_685.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_685.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_685.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_686.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_686.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_686.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_687.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_687.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_687.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_688.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_688.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_688.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_689.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_689.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_689.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_690.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_690.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_690.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_691.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_691.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_691.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_692.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_692.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_692.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_693.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_693.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_693.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_694.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_694.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_694.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_695.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_695.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_695.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_696.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_696.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_696.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_697.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_697.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_697.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_698.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_698.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_698.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_699.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_699.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_699.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_700.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_700.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_700.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_701.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_701.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_701.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_702.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_702.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_702.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_703.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_703.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_703.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_704.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_704.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_704.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_705.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_705.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_705.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_706.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_706.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_706.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_707.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_707.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_707.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_708.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_708.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_708.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_709.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_709.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_709.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_710.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_710.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_710.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_711.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_711.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_711.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_712.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_712.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_712.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_713.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_713.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_713.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_714.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_714.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_714.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_715.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_715.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_715.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_716.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_716.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_716.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_717.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_717.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_717.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_718.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_718.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_718.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_719.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_719.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_719.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_720.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_720.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_720.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_721.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_721.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_721.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_722.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_722.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_722.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_723.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_723.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_723.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_724.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_724.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_724.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_725.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_725.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_725.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_726.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_726.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_726.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_727.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_727.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_727.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_728.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_728.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_728.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_729.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_729.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_729.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_730.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_730.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_730.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_731.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_731.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_731.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_732.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_732.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_732.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_733.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_733.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_733.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_734.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_734.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_734.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_735.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_735.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_735.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_736.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_736.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_736.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_737.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_737.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_737.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_738.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_738.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_738.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_739.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_739.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_739.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_740.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_740.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_740.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_741.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_741.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_741.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_742.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_742.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_742.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_743.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_743.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_743.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_744.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_744.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_744.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_745.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_745.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_745.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_746.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_746.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_746.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_747.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_747.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_747.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_748.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_748.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_748.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_749.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_749.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_749.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_750.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_750.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_750.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_751.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_751.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_751.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_752.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_752.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_752.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_753.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_753.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_753.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_754.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_754.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_754.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_755.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_755.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_755.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_756.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_756.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_756.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_757.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_757.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_757.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_758.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_758.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_758.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_759.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_759.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_759.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_760.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_760.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_760.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_761.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_761.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_761.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_762.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_762.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_762.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_763.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_763.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_763.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_764.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_764.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_764.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_765.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_765.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_765.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_766.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_766.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_766.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_767.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_767.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_767.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_768.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_768.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_768.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_769.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_769.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_769.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_770.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_770.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_770.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_771.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_771.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_771.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_772.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_772.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_772.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_773.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_773.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_773.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_774.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_774.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_774.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_775.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_775.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_775.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_776.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_776.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_776.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_777.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_777.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_777.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_778.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_778.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_778.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_779.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_779.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_779.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_780.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_780.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_780.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_781.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_781.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_781.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_782.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_782.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_782.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_783.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_783.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_783.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_784.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_784.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_784.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_785.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_785.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_785.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_786.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_786.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_786.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_787.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_787.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_787.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_788.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_788.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_788.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_789.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_789.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_789.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_790.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_790.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_790.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_791.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_791.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_791.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_792.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_792.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_792.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_793.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_793.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_793.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_794.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_794.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_794.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_795.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_795.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_795.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_796.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_796.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_796.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_797.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_797.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_797.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_798.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_798.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_798.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_799.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_799.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_799.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_800.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_800.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_800.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_801.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_801.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_801.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_802.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_802.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_802.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_803.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_803.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_803.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_804.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_804.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_804.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_805.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_805.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_805.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_806.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_806.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_806.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_807.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_807.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_807.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_808.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_808.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_808.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_809.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_809.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_809.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_810.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_810.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_810.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_811.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_811.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_811.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_812.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_812.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_812.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_813.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_813.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_813.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_814.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_814.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_814.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_815.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_815.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_815.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_816.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_816.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_816.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_817.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_817.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_817.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_818.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_818.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_818.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_819.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_819.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_819.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_820.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_820.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_820.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_821.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_821.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_821.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_822.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_822.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_822.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_823.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_823.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_823.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_824.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_824.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_824.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_825.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_825.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_825.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_826.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_826.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_826.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_827.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_827.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_827.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_828.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_828.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_828.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_829.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_829.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_829.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_830.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_830.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_830.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_831.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_831.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_831.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_832.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_832.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_832.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_833.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_833.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_833.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_834.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_834.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_834.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_835.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_835.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_835.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_836.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_836.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_836.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_837.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_837.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_837.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_838.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_838.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_838.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_839.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_839.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_839.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_840.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_840.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_840.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_841.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_841.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_841.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_842.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_842.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_842.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_843.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_843.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_843.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_844.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_844.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_844.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_845.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_845.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_845.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_846.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_846.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_846.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_847.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_847.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_847.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_848.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_848.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_848.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_849.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_849.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_849.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_850.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_850.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_850.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_851.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_851.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_851.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_852.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_852.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_852.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_853.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_853.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_853.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_854.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_854.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_854.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_855.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_855.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_855.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_856.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_856.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_856.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_857.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_857.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_857.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_858.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_858.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_858.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_859.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_859.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_859.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_860.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_860.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_860.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_861.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_861.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_861.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_862.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_862.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_862.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_863.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_863.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_863.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_864.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_864.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_864.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_865.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_865.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_865.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_866.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_866.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_866.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_867.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_867.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_867.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_868.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_868.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_868.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_869.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_869.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_869.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_870.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_870.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_870.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_871.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_871.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_871.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_872.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_872.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_872.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_873.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_873.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_873.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_874.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_874.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_874.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_875.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_875.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_875.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_876.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_876.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_876.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_877.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_877.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_877.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_878.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_878.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_878.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_879.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_879.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_879.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_880.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_880.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_880.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_881.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_881.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_881.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_882.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_882.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_882.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_883.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_883.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_883.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_884.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_884.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_884.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_885.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_885.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_885.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_886.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_886.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_886.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_887.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_887.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_887.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_888.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_888.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_888.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_889.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_889.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_889.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_890.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_890.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_890.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_891.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_891.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_891.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_892.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_892.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_892.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_893.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_893.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_893.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_894.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_894.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_894.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_895.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_895.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_895.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_896.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_896.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_896.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_897.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_897.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_897.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_898.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_898.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_898.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_899.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_899.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_899.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_900.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_900.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_900.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_901.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_901.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_901.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_902.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_902.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_902.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_903.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_903.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_903.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_904.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_904.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_904.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_905.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_905.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_905.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_906.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_906.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_906.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_907.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_907.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_907.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_908.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_908.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_908.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_909.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_909.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_909.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_910.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_910.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_910.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_911.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_911.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_911.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_912.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_912.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_912.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_913.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_913.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_913.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_914.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_914.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_914.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_915.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_915.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_915.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_916.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_916.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_916.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_917.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_917.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_917.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_918.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_918.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_918.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_919.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_919.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_919.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_920.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_920.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_920.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_921.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_921.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_921.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_922.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_922.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_922.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_923.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_923.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_923.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_924.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_924.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_924.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_925.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_925.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_925.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_926.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_926.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_926.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_927.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_927.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_927.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_928.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_928.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_928.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_929.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_929.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_929.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_930.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_930.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_930.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_931.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_931.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_931.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_932.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_932.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_932.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_933.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_933.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_933.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_934.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_934.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_934.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_935.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_935.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_935.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_936.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_936.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_936.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_937.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_937.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_937.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_938.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_938.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_938.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_939.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_939.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_939.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_940.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_940.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_940.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_941.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_941.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_941.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_942.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_942.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_942.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_943.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_943.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_943.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_944.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_944.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_944.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_945.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_945.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_945.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_946.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_946.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_946.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_947.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_947.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_947.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_948.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_948.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_948.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_949.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_949.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_949.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_950.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_950.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_950.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_951.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_951.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_951.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_952.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_952.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_952.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_953.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_953.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_953.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_954.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_954.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_954.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_955.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_955.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_955.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_956.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_956.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_956.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_957.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_957.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_957.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_958.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_958.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_958.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_959.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_959.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_959.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_960.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_960.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_960.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_961.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_961.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_961.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_962.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_962.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_962.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_963.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_963.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_963.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_964.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_964.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_964.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_965.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_965.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_965.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_966.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_966.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_966.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_967.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_967.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_967.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_968.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_968.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_968.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_969.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_969.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_969.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_970.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_970.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_970.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_971.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_971.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_971.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_972.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_972.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_972.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_973.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_973.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_973.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_974.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_974.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_974.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_975.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_975.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_975.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_976.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_976.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_976.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_977.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_977.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_977.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_978.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_978.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_978.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_979.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_979.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_979.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_980.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_980.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_980.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_981.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_981.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_981.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_982.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_982.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_982.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_983.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_983.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_983.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_984.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_984.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_984.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_985.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_985.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_985.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_986.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_986.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_986.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_987.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_987.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_987.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_988.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_988.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_988.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_989.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_989.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_989.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_990.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_990.jpg new file mode 100644 index 0000000..4eecc67 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_990.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_991.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_991.jpg new file mode 100644 index 0000000..29dc848 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_991.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_992.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_992.jpg new file mode 100644 index 0000000..2a82e31 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_992.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_993.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_993.jpg new file mode 100644 index 0000000..2e1cb0b Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_993.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_994.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_994.jpg new file mode 100644 index 0000000..2dc9870 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_994.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_995.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_995.jpg new file mode 100644 index 0000000..ed0aeee Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_995.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_996.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_996.jpg new file mode 100644 index 0000000..bc1107d Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_996.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_997.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_997.jpg new file mode 100644 index 0000000..e71e2cc Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_997.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_998.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_998.jpg new file mode 100644 index 0000000..6baf7b5 Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_998.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/face_images_1000/test_999.jpg b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_999.jpg new file mode 100644 index 0000000..9670a3e Binary files /dev/null and b/Project-1/Part-2/web-tier-express/data/face_images_1000/test_999.jpg differ diff --git a/Project-1/Part-2/web-tier-express/data/results.csv b/Project-1/Part-2/web-tier-express/data/results.csv new file mode 100644 index 0000000..2b8393c --- /dev/null +++ b/Project-1/Part-2/web-tier-express/data/results.csv @@ -0,0 +1,1001 @@ +Image,Results +test_000,Paul +test_001,Emily +test_002,Bob +test_003,German +test_004,Emily +test_005,Gerry +test_006,Gerry +test_007,Ranil +test_008,Bill +test_009,Wang +test_010,Paul +test_011,Emily +test_012,Bob +test_013,German +test_014,Emily +test_015,Gerry +test_016,Gerry +test_017,Ranil +test_018,Bill +test_019,Wang +test_020,Paul +test_021,Emily +test_022,Bob +test_023,German +test_024,Emily +test_025,Gerry +test_026,Gerry +test_027,Ranil +test_028,Bill +test_029,Wang +test_030,Paul +test_031,Emily +test_032,Bob +test_033,German +test_034,Emily +test_035,Gerry +test_036,Gerry +test_037,Ranil +test_038,Bill +test_039,Wang +test_040,Paul +test_041,Emily +test_042,Bob +test_043,German +test_044,Emily +test_045,Gerry +test_046,Gerry +test_047,Ranil +test_048,Bill +test_049,Wang +test_050,Paul +test_051,Emily +test_052,Bob +test_053,German +test_054,Emily +test_055,Gerry +test_056,Gerry +test_057,Ranil +test_058,Bill +test_059,Wang +test_060,Paul +test_061,Emily +test_062,Bob +test_063,German +test_064,Emily +test_065,Gerry +test_066,Gerry +test_067,Ranil +test_068,Bill +test_069,Wang +test_070,Paul +test_071,Emily +test_072,Bob +test_073,German +test_074,Emily +test_075,Gerry +test_076,Gerry +test_077,Ranil +test_078,Bill +test_079,Wang +test_080,Paul +test_081,Emily +test_082,Bob +test_083,German +test_084,Emily +test_085,Gerry +test_086,Gerry +test_087,Ranil +test_088,Bill +test_089,Wang +test_090,Paul +test_091,Emily +test_092,Bob +test_093,German +test_094,Emily +test_095,Gerry +test_096,Gerry +test_097,Ranil +test_098,Bill +test_099,Wang +test_100,Paul +test_101,Emily +test_102,Bob +test_103,German +test_104,Emily +test_105,Gerry +test_106,Gerry +test_107,Ranil +test_108,Bill +test_109,Wang +test_110,Paul +test_111,Emily +test_112,Bob +test_113,German +test_114,Emily +test_115,Gerry +test_116,Gerry +test_117,Ranil +test_118,Bill +test_119,Wang +test_120,Paul +test_121,Emily +test_122,Bob +test_123,German +test_124,Emily +test_125,Gerry +test_126,Gerry +test_127,Ranil +test_128,Bill +test_129,Wang +test_130,Paul +test_131,Emily +test_132,Bob +test_133,German +test_134,Emily +test_135,Gerry +test_136,Gerry +test_137,Ranil +test_138,Bill +test_139,Wang +test_140,Paul +test_141,Emily +test_142,Bob +test_143,German +test_144,Emily +test_145,Gerry +test_146,Gerry +test_147,Ranil +test_148,Bill +test_149,Wang +test_150,Paul +test_151,Emily +test_152,Bob +test_153,German +test_154,Emily +test_155,Gerry +test_156,Gerry +test_157,Ranil +test_158,Bill +test_159,Wang +test_160,Paul +test_161,Emily +test_162,Bob +test_163,German +test_164,Emily +test_165,Gerry +test_166,Gerry +test_167,Ranil +test_168,Bill +test_169,Wang +test_170,Paul +test_171,Emily +test_172,Bob +test_173,German +test_174,Emily +test_175,Gerry +test_176,Gerry +test_177,Ranil +test_178,Bill +test_179,Wang +test_180,Paul +test_181,Emily +test_182,Bob +test_183,German +test_184,Emily +test_185,Gerry +test_186,Gerry +test_187,Ranil +test_188,Bill +test_189,Wang +test_190,Paul +test_191,Emily +test_192,Bob +test_193,German +test_194,Emily +test_195,Gerry +test_196,Gerry +test_197,Ranil +test_198,Bill +test_199,Wang +test_200,Paul +test_201,Emily +test_202,Bob +test_203,German +test_204,Emily +test_205,Gerry +test_206,Gerry +test_207,Ranil +test_208,Bill +test_209,Wang +test_210,Paul +test_211,Emily +test_212,Bob +test_213,German +test_214,Emily +test_215,Gerry +test_216,Gerry +test_217,Ranil +test_218,Bill +test_219,Wang +test_220,Paul +test_221,Emily +test_222,Bob +test_223,German +test_224,Emily +test_225,Gerry +test_226,Gerry +test_227,Ranil +test_228,Bill +test_229,Wang +test_230,Paul +test_231,Emily +test_232,Bob +test_233,German +test_234,Emily +test_235,Gerry +test_236,Gerry +test_237,Ranil +test_238,Bill +test_239,Wang +test_240,Paul +test_241,Emily +test_242,Bob +test_243,German +test_244,Emily +test_245,Gerry +test_246,Gerry +test_247,Ranil +test_248,Bill +test_249,Wang +test_250,Paul +test_251,Emily +test_252,Bob +test_253,German +test_254,Emily +test_255,Gerry +test_256,Gerry +test_257,Ranil +test_258,Bill +test_259,Wang +test_260,Paul +test_261,Emily +test_262,Bob +test_263,German +test_264,Emily +test_265,Gerry +test_266,Gerry +test_267,Ranil +test_268,Bill +test_269,Wang +test_270,Paul +test_271,Emily +test_272,Bob +test_273,German +test_274,Emily +test_275,Gerry +test_276,Gerry +test_277,Ranil +test_278,Bill +test_279,Wang +test_280,Paul +test_281,Emily +test_282,Bob +test_283,German +test_284,Emily +test_285,Gerry +test_286,Gerry +test_287,Ranil +test_288,Bill +test_289,Wang +test_290,Paul +test_291,Emily +test_292,Bob +test_293,German +test_294,Emily +test_295,Gerry +test_296,Gerry +test_297,Ranil +test_298,Bill +test_299,Wang +test_300,Paul +test_301,Emily +test_302,Bob +test_303,German +test_304,Emily +test_305,Gerry +test_306,Gerry +test_307,Ranil +test_308,Bill +test_309,Wang +test_310,Paul +test_311,Emily +test_312,Bob +test_313,German +test_314,Emily +test_315,Gerry +test_316,Gerry +test_317,Ranil +test_318,Bill +test_319,Wang +test_320,Paul +test_321,Emily +test_322,Bob +test_323,German +test_324,Emily +test_325,Gerry +test_326,Gerry +test_327,Ranil +test_328,Bill +test_329,Wang +test_330,Paul +test_331,Emily +test_332,Bob +test_333,German +test_334,Emily +test_335,Gerry +test_336,Gerry +test_337,Ranil +test_338,Bill +test_339,Wang +test_340,Paul +test_341,Emily +test_342,Bob +test_343,German +test_344,Emily +test_345,Gerry +test_346,Gerry +test_347,Ranil +test_348,Bill +test_349,Wang +test_350,Paul +test_351,Emily +test_352,Bob +test_353,German +test_354,Emily +test_355,Gerry +test_356,Gerry +test_357,Ranil +test_358,Bill +test_359,Wang +test_360,Paul +test_361,Emily +test_362,Bob +test_363,German +test_364,Emily +test_365,Gerry +test_366,Gerry +test_367,Ranil +test_368,Bill +test_369,Wang +test_370,Paul +test_371,Emily +test_372,Bob +test_373,German +test_374,Emily +test_375,Gerry +test_376,Gerry +test_377,Ranil +test_378,Bill +test_379,Wang +test_380,Paul +test_381,Emily +test_382,Bob +test_383,German +test_384,Emily +test_385,Gerry +test_386,Gerry +test_387,Ranil +test_388,Bill +test_389,Wang +test_390,Paul +test_391,Emily +test_392,Bob +test_393,German +test_394,Emily +test_395,Gerry +test_396,Gerry +test_397,Ranil +test_398,Bill +test_399,Wang +test_400,Paul +test_401,Emily +test_402,Bob +test_403,German +test_404,Emily +test_405,Gerry +test_406,Gerry +test_407,Ranil +test_408,Bill +test_409,Wang +test_410,Paul +test_411,Emily +test_412,Bob +test_413,German +test_414,Emily +test_415,Gerry +test_416,Gerry +test_417,Ranil +test_418,Bill +test_419,Wang +test_420,Paul +test_421,Emily +test_422,Bob +test_423,German +test_424,Emily +test_425,Gerry +test_426,Gerry +test_427,Ranil +test_428,Bill +test_429,Wang +test_430,Paul +test_431,Emily +test_432,Bob +test_433,German +test_434,Emily +test_435,Gerry +test_436,Gerry +test_437,Ranil +test_438,Bill +test_439,Wang +test_440,Paul +test_441,Emily +test_442,Bob +test_443,German +test_444,Emily +test_445,Gerry +test_446,Gerry +test_447,Ranil +test_448,Bill +test_449,Wang +test_450,Paul +test_451,Emily +test_452,Bob +test_453,German +test_454,Emily +test_455,Gerry +test_456,Gerry +test_457,Ranil +test_458,Bill +test_459,Wang +test_460,Paul +test_461,Emily +test_462,Bob +test_463,German +test_464,Emily +test_465,Gerry +test_466,Gerry +test_467,Ranil +test_468,Bill +test_469,Wang +test_470,Paul +test_471,Emily +test_472,Bob +test_473,German +test_474,Emily +test_475,Gerry +test_476,Gerry +test_477,Ranil +test_478,Bill +test_479,Wang +test_480,Paul +test_481,Emily +test_482,Bob +test_483,German +test_484,Emily +test_485,Gerry +test_486,Gerry +test_487,Ranil +test_488,Bill +test_489,Wang +test_490,Paul +test_491,Emily +test_492,Bob +test_493,German +test_494,Emily +test_495,Gerry +test_496,Gerry +test_497,Ranil +test_498,Bill +test_499,Wang +test_500,Paul +test_501,Emily +test_502,Bob +test_503,German +test_504,Emily +test_505,Gerry +test_506,Gerry +test_507,Ranil +test_508,Bill +test_509,Wang +test_510,Paul +test_511,Emily +test_512,Bob +test_513,German +test_514,Emily +test_515,Gerry +test_516,Gerry +test_517,Ranil +test_518,Bill +test_519,Wang +test_520,Paul +test_521,Emily +test_522,Bob +test_523,German +test_524,Emily +test_525,Gerry +test_526,Gerry +test_527,Ranil +test_528,Bill +test_529,Wang +test_530,Paul +test_531,Emily +test_532,Bob +test_533,German +test_534,Emily +test_535,Gerry +test_536,Gerry +test_537,Ranil +test_538,Bill +test_539,Wang +test_540,Paul +test_541,Emily +test_542,Bob +test_543,German +test_544,Emily +test_545,Gerry +test_546,Gerry +test_547,Ranil +test_548,Bill +test_549,Wang +test_550,Paul +test_551,Emily +test_552,Bob +test_553,German +test_554,Emily +test_555,Gerry +test_556,Gerry +test_557,Ranil +test_558,Bill +test_559,Wang +test_560,Paul +test_561,Emily +test_562,Bob +test_563,German +test_564,Emily +test_565,Gerry +test_566,Gerry +test_567,Ranil +test_568,Bill +test_569,Wang +test_570,Paul +test_571,Emily +test_572,Bob +test_573,German +test_574,Emily +test_575,Gerry +test_576,Gerry +test_577,Ranil +test_578,Bill +test_579,Wang +test_580,Paul +test_581,Emily +test_582,Bob +test_583,German +test_584,Emily +test_585,Gerry +test_586,Gerry +test_587,Ranil +test_588,Bill +test_589,Wang +test_590,Paul +test_591,Emily +test_592,Bob +test_593,German +test_594,Emily +test_595,Gerry +test_596,Gerry +test_597,Ranil +test_598,Bill +test_599,Wang +test_600,Paul +test_601,Emily +test_602,Bob +test_603,German +test_604,Emily +test_605,Gerry +test_606,Gerry +test_607,Ranil +test_608,Bill +test_609,Wang +test_610,Paul +test_611,Emily +test_612,Bob +test_613,German +test_614,Emily +test_615,Gerry +test_616,Gerry +test_617,Ranil +test_618,Bill +test_619,Wang +test_620,Paul +test_621,Emily +test_622,Bob +test_623,German +test_624,Emily +test_625,Gerry +test_626,Gerry +test_627,Ranil +test_628,Bill +test_629,Wang +test_630,Paul +test_631,Emily +test_632,Bob +test_633,German +test_634,Emily +test_635,Gerry +test_636,Gerry +test_637,Ranil +test_638,Bill +test_639,Wang +test_640,Paul +test_641,Emily +test_642,Bob +test_643,German +test_644,Emily +test_645,Gerry +test_646,Gerry +test_647,Ranil +test_648,Bill +test_649,Wang +test_650,Paul +test_651,Emily +test_652,Bob +test_653,German +test_654,Emily +test_655,Gerry +test_656,Gerry +test_657,Ranil +test_658,Bill +test_659,Wang +test_660,Paul +test_661,Emily +test_662,Bob +test_663,German +test_664,Emily +test_665,Gerry +test_666,Gerry +test_667,Ranil +test_668,Bill +test_669,Wang +test_670,Paul +test_671,Emily +test_672,Bob +test_673,German +test_674,Emily +test_675,Gerry +test_676,Gerry +test_677,Ranil +test_678,Bill +test_679,Wang +test_680,Paul +test_681,Emily +test_682,Bob +test_683,German +test_684,Emily +test_685,Gerry +test_686,Gerry +test_687,Ranil +test_688,Bill +test_689,Wang +test_690,Paul +test_691,Emily +test_692,Bob +test_693,German +test_694,Emily +test_695,Gerry +test_696,Gerry +test_697,Ranil +test_698,Bill +test_699,Wang +test_700,Paul +test_701,Emily +test_702,Bob +test_703,German +test_704,Emily +test_705,Gerry +test_706,Gerry +test_707,Ranil +test_708,Bill +test_709,Wang +test_710,Paul +test_711,Emily +test_712,Bob +test_713,German +test_714,Emily +test_715,Gerry +test_716,Gerry +test_717,Ranil +test_718,Bill +test_719,Wang +test_720,Paul +test_721,Emily +test_722,Bob +test_723,German +test_724,Emily +test_725,Gerry +test_726,Gerry +test_727,Ranil +test_728,Bill +test_729,Wang +test_730,Paul +test_731,Emily +test_732,Bob +test_733,German +test_734,Emily +test_735,Gerry +test_736,Gerry +test_737,Ranil +test_738,Bill +test_739,Wang +test_740,Paul +test_741,Emily +test_742,Bob +test_743,German +test_744,Emily +test_745,Gerry +test_746,Gerry +test_747,Ranil +test_748,Bill +test_749,Wang +test_750,Paul +test_751,Emily +test_752,Bob +test_753,German +test_754,Emily +test_755,Gerry +test_756,Gerry +test_757,Ranil +test_758,Bill +test_759,Wang +test_760,Paul +test_761,Emily +test_762,Bob +test_763,German +test_764,Emily +test_765,Gerry +test_766,Gerry +test_767,Ranil +test_768,Bill +test_769,Wang +test_770,Paul +test_771,Emily +test_772,Bob +test_773,German +test_774,Emily +test_775,Gerry +test_776,Gerry +test_777,Ranil +test_778,Bill +test_779,Wang +test_780,Paul +test_781,Emily +test_782,Bob +test_783,German +test_784,Emily +test_785,Gerry +test_786,Gerry +test_787,Ranil +test_788,Bill +test_789,Wang +test_790,Paul +test_791,Emily +test_792,Bob +test_793,German +test_794,Emily +test_795,Gerry +test_796,Gerry +test_797,Ranil +test_798,Bill +test_799,Wang +test_800,Paul +test_801,Emily +test_802,Bob +test_803,German +test_804,Emily +test_805,Gerry +test_806,Gerry +test_807,Ranil +test_808,Bill +test_809,Wang +test_810,Paul +test_811,Emily +test_812,Bob +test_813,German +test_814,Emily +test_815,Gerry +test_816,Gerry +test_817,Ranil +test_818,Bill +test_819,Wang +test_820,Paul +test_821,Emily +test_822,Bob +test_823,German +test_824,Emily +test_825,Gerry +test_826,Gerry +test_827,Ranil +test_828,Bill +test_829,Wang +test_830,Paul +test_831,Emily +test_832,Bob +test_833,German +test_834,Emily +test_835,Gerry +test_836,Gerry +test_837,Ranil +test_838,Bill +test_839,Wang +test_840,Paul +test_841,Emily +test_842,Bob +test_843,German +test_844,Emily +test_845,Gerry +test_846,Gerry +test_847,Ranil +test_848,Bill +test_849,Wang +test_850,Paul +test_851,Emily +test_852,Bob +test_853,German +test_854,Emily +test_855,Gerry +test_856,Gerry +test_857,Ranil +test_858,Bill +test_859,Wang +test_860,Paul +test_861,Emily +test_862,Bob +test_863,German +test_864,Emily +test_865,Gerry +test_866,Gerry +test_867,Ranil +test_868,Bill +test_869,Wang +test_870,Paul +test_871,Emily +test_872,Bob +test_873,German +test_874,Emily +test_875,Gerry +test_876,Gerry +test_877,Ranil +test_878,Bill +test_879,Wang +test_880,Paul +test_881,Emily +test_882,Bob +test_883,German +test_884,Emily +test_885,Gerry +test_886,Gerry +test_887,Ranil +test_888,Bill +test_889,Wang +test_890,Paul +test_891,Emily +test_892,Bob +test_893,German +test_894,Emily +test_895,Gerry +test_896,Gerry +test_897,Ranil +test_898,Bill +test_899,Wang +test_900,Paul +test_901,Emily +test_902,Bob +test_903,German +test_904,Emily +test_905,Gerry +test_906,Gerry +test_907,Ranil +test_908,Bill +test_909,Wang +test_910,Paul +test_911,Emily +test_912,Bob +test_913,German +test_914,Emily +test_915,Gerry +test_916,Gerry +test_917,Ranil +test_918,Bill +test_919,Wang +test_920,Paul +test_921,Emily +test_922,Bob +test_923,German +test_924,Emily +test_925,Gerry +test_926,Gerry +test_927,Ranil +test_928,Bill +test_929,Wang +test_930,Paul +test_931,Emily +test_932,Bob +test_933,German +test_934,Emily +test_935,Gerry +test_936,Gerry +test_937,Ranil +test_938,Bill +test_939,Wang +test_940,Paul +test_941,Emily +test_942,Bob +test_943,German +test_944,Emily +test_945,Gerry +test_946,Gerry +test_947,Ranil +test_948,Bill +test_949,Wang +test_950,Paul +test_951,Emily +test_952,Bob +test_953,German +test_954,Emily +test_955,Gerry +test_956,Gerry +test_957,Ranil +test_958,Bill +test_959,Wang +test_960,Paul +test_961,Emily +test_962,Bob +test_963,German +test_964,Emily +test_965,Gerry +test_966,Gerry +test_967,Ranil +test_968,Bill +test_969,Wang +test_970,Paul +test_971,Emily +test_972,Bob +test_973,German +test_974,Emily +test_975,Gerry +test_976,Gerry +test_977,Ranil +test_978,Bill +test_979,Wang +test_980,Paul +test_981,Emily +test_982,Bob +test_983,German +test_984,Emily +test_985,Gerry +test_986,Gerry +test_987,Ranil +test_988,Bill +test_989,Wang +test_990,Paul +test_991,Emily +test_992,Bob +test_993,German +test_994,Emily +test_995,Gerry +test_996,Gerry +test_997,Ranil +test_998,Bill +test_999,Wang diff --git a/Project-1/Part-2/web-tier-express/index.js b/Project-1/Part-2/web-tier-express/index.js new file mode 100644 index 0000000..1e4372f --- /dev/null +++ b/Project-1/Part-2/web-tier-express/index.js @@ -0,0 +1,51 @@ +const fs = require("fs"); +const path = require("path"); +const express = require("express"); +const cors = require("cors"); +const multer = require("multer"); + +const logger = require("./utils/logger")(module); + +const app = express(); +const upload = multer({}); + +app.use(cors()); +app.disable("x-powered-by"); + +// Data loading +const fastCSV = require("fast-csv"); +let lookup = []; +fs.createReadStream(path.resolve(__dirname, "data", "results.csv")) + .pipe(fastCSV.parse({ headers: true })) + .on('error', error => console.error(error)) + .on('data', row => lookup.push(row)) + .on('end', (rowCount) => console.log(`Parsed ${rowCount} rows`)); + +// Controllers + +const imageRecognition = (req, res) => { + try { + const fileName = req.files.inputFile[0].originalname.split(".jpg")[0]; + return res.status(200).send( + fileName + ":" + lookup.filter((row) => row["Image"] === fileName)[0]["Results"] + ); + } catch (error) { + logger.error("imageRecognition", { error }); + return res.status(500).send({ message: "Server Error. Try again." }); + } +}; + +// Routes +app.post("/", upload.fields([ + { name: "inputFile", maxCount: 1 }, +]), imageRecognition); + +app.use((_req, res) => { + return res.status(200).send("Web tier on ExpressJS."); +}); + +const port = process.env.PORT || 5000; + +app.listen(port, () => { + logger.info(`App Listening on port ${port}`); +}); diff --git a/Project-1/Part-2/web-tier-express/package-lock.json b/Project-1/Part-2/web-tier-express/package-lock.json new file mode 100644 index 0000000..2738667 --- /dev/null +++ b/Project-1/Part-2/web-tier-express/package-lock.json @@ -0,0 +1,1655 @@ +{ + "name": "web-tier-express", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "web-tier-express", + "version": "1.0.0", + "dependencies": { + "cors": "^2.8.5", + "dotenv-flow": "^3.2.0", + "express": "^4.18.2", + "express-validator": "^7.0.1", + "fast-csv": "^4.3.6", + "helmet": "^7.0.0", + "multer": "^1.4.5-lts.1", + "winston": "^3.8.2" + }, + "devDependencies": { + "cross-env": "^7.0.3", + "nodemon": "^2.0.20" + } + }, + "node_modules/@colors/colors": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@dabh/diagnostics": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", + "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", + "dependencies": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, + "node_modules/@fast-csv/format": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/@fast-csv/format/-/format-4.3.5.tgz", + "integrity": "sha512-8iRn6QF3I8Ak78lNAa+Gdl5MJJBM5vRHivFtMRUWINdevNo00K7OXxS2PshawLKTejVwieIlPmK5YlLu6w4u8A==", + "dependencies": { + "@types/node": "^14.0.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.isboolean": "^3.0.3", + "lodash.isequal": "^4.5.0", + "lodash.isfunction": "^3.0.9", + "lodash.isnil": "^4.0.0" + } + }, + "node_modules/@fast-csv/parse": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/@fast-csv/parse/-/parse-4.3.6.tgz", + "integrity": "sha512-uRsLYksqpbDmWaSmzvJcuApSEe38+6NQZBUsuAyMZKqHxH0g1wcJgsKUvN3WC8tewaqFjBMMGrkHmC+T7k8LvA==", + "dependencies": { + "@types/node": "^14.0.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.groupby": "^4.6.0", + "lodash.isfunction": "^3.0.9", + "lodash.isnil": "^4.0.0", + "lodash.isundefined": "^3.0.1", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/@types/node": { + "version": "14.18.63", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", + "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==" + }, + "node_modules/@types/triple-beam": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", + "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==" + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.6.tgz", + "integrity": "sha512-Mj50FLHtlsoVfRfnHaZvyrooHcrlceNZdL/QBvJJVd9Ta55qCQK0gs4ss2oZDeV9zFCs6ewzYgVE5yfVmfFpVg==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.3", + "set-function-length": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/colorspace": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", + "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", + "dependencies": { + "color": "^3.1.3", + "text-hex": "1.0.x" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/concat-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.2.tgz", + "integrity": "sha512-SRtsSqsDbgpJBbW3pABMCOt6rQyeM8s8RiyeSN8jYG8sYmt/kGJejbydttUsnDs1tadr19tvhT4ShwMyoqAm4g==", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.2", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "engines": { + "node": ">=10" + } + }, + "node_modules/dotenv-flow": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/dotenv-flow/-/dotenv-flow-3.3.0.tgz", + "integrity": "sha512-GLSvRqDZ1TGhloS6ZCZ5chdqqv/3XMqZxAnX9rliJiHn6uyJLguKeu+3M2kcagBkoVCnLWYfbR4rfFe1xSU39A==", + "dependencies": { + "dotenv": "^8.6.0" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express-validator": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/express-validator/-/express-validator-7.0.1.tgz", + "integrity": "sha512-oB+z9QOzQIE8FnlINqyIFA8eIckahC6qc8KtqLdLJcU3/phVyuhXH3bA4qzcrhme+1RYaCSwrq+TlZ/kAKIARA==", + "dependencies": { + "lodash": "^4.17.21", + "validator": "^13.9.0" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/fast-csv": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/fast-csv/-/fast-csv-4.3.6.tgz", + "integrity": "sha512-2RNSpuwwsJGP0frGsOmTb9oUF+VkFSM4SyLTDgwf2ciHWTarN0lQTC+F2f/t5J9QjW+c65VFIAAu85GsvMIusw==", + "dependencies": { + "@fast-csv/format": "4.3.5", + "@fast-csv/parse": "4.3.6" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dependencies": { + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/helmet": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/helmet/-/helmet-7.1.0.tgz", + "integrity": "sha512-g+HZqgfbpXdCkme/Cd/mZkV0aV3BZZZSugecH03kl38m/Kmdx8jKjBikpDj2cr+Iynv4KpYEviojNdTJActJAg==", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/kuler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.escaperegexp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", + "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==" + }, + "node_modules/lodash.groupby": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz", + "integrity": "sha512-5dcWxm23+VAoz+awKmBaiBvzox8+RqMgFhi7UvX9DHZr2HdxHXM/Wrf8cfKpsW37RNrvtPn6hSwNqurSILbmJw==" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" + }, + "node_modules/lodash.isfunction": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", + "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==" + }, + "node_modules/lodash.isnil": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/lodash.isnil/-/lodash.isnil-4.0.0.tgz", + "integrity": "sha512-up2Mzq3545mwVnMhTDMdfoG1OurpA/s5t88JmQX809eH3C8491iu2sfKhTfhQtKY78oPNhiaHJUpT/dUDAAtng==" + }, + "node_modules/lodash.isundefined": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz", + "integrity": "sha512-MXB1is3s899/cD8jheYYE2V9qTHwKvt+npCwpD+1Sxm3Q3cECXCiYHjeHWXNwr6Q0SOBPrYUDxendrO6goVTEA==" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" + }, + "node_modules/logform": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.6.0.tgz", + "integrity": "sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ==", + "dependencies": { + "@colors/colors": "1.6.0", + "@types/triple-beam": "^1.3.2", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/logform/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/multer": { + "version": "1.4.5-lts.1", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.5-lts.1.tgz", + "integrity": "sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==", + "dependencies": { + "append-field": "^1.0.0", + "busboy": "^1.0.0", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.4", + "object-assign": "^4.1.1", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/nodemon": { + "version": "2.0.22", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz", + "integrity": "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^5.7.1", + "simple-update-notifier": "^1.0.7", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/nodemon/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/nodemon/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "dependencies": { + "fn.name": "1.x.x" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-stable-stringify": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", + "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", + "engines": { + "node": ">=10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", + "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", + "dependencies": { + "define-data-property": "^1.1.2", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz", + "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-update-notifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", + "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", + "dev": true, + "dependencies": { + "semver": "~7.0.0" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/simple-update-notifier/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", + "engines": { + "node": "*" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/touch/node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "node_modules/touch/node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/triple-beam": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", + "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/validator": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", + "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/winston": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.11.0.tgz", + "integrity": "sha512-L3yR6/MzZAOl0DsysUXHVjOwv8mKZ71TrA/41EIduGpOOV5LQVodqN+QdQ6BS6PJ/RdIshZhq84P/fStEZkk7g==", + "dependencies": { + "@colors/colors": "^1.6.0", + "@dabh/diagnostics": "^2.0.2", + "async": "^3.2.3", + "is-stream": "^2.0.0", + "logform": "^2.4.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "safe-stable-stringify": "^2.3.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.5.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/winston-transport": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.7.0.tgz", + "integrity": "sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg==", + "dependencies": { + "logform": "^2.3.2", + "readable-stream": "^3.6.0", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + } + } +} diff --git a/Project-1/Part-2/web-tier-express/package.json b/Project-1/Part-2/web-tier-express/package.json new file mode 100644 index 0000000..899c6d8 --- /dev/null +++ b/Project-1/Part-2/web-tier-express/package.json @@ -0,0 +1,27 @@ +{ + "name": "web-tier-express", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "dev": "cross-env NODE_ENV=development nodemon --exitcrash index.js", + "staging": "cross-env NODE_ENV=staging node index.js", + "prod": "cross-env NODE_ENV=production node index.js" + }, + "author": "Kaushik Ravishankar ", + "license": "", + "dependencies": { + "cors": "^2.8.5", + "dotenv-flow": "^3.2.0", + "express": "^4.18.2", + "express-validator": "^7.0.1", + "fast-csv": "^4.3.6", + "helmet": "^7.0.0", + "multer": "^1.4.5-lts.1", + "winston": "^3.8.2" + }, + "devDependencies": { + "cross-env": "^7.0.3", + "nodemon": "^2.0.20" + } +} diff --git a/Project-1/Part-2/web-tier-express/typedefs.js b/Project-1/Part-2/web-tier-express/typedefs.js new file mode 100644 index 0000000..20044de --- /dev/null +++ b/Project-1/Part-2/web-tier-express/typedefs.js @@ -0,0 +1,13 @@ +// Type definitions to enable better auto-complete features. + +/** + * @typedef {import("module")} Module + * + * @typedef {import("express").Request} Req + * @typedef {import("express").Response} Res + * @typedef {import("express").NextFunction} Next + * + * @typedef {import("winston").Logger} Logger + */ + +exports.unused = {}; \ No newline at end of file diff --git a/Project-1/Part-2/web-tier-express/utils/README.md b/Project-1/Part-2/web-tier-express/utils/README.md new file mode 100644 index 0000000..5747518 --- /dev/null +++ b/Project-1/Part-2/web-tier-express/utils/README.md @@ -0,0 +1 @@ +## General, reusable functionalities unrelated to API diff --git a/Project-1/Part-2/web-tier-express/utils/logger.js b/Project-1/Part-2/web-tier-express/utils/logger.js new file mode 100644 index 0000000..3241387 --- /dev/null +++ b/Project-1/Part-2/web-tier-express/utils/logger.js @@ -0,0 +1,57 @@ +// Whole thing is winston logger stuff, if you want to learn read the docs + +const path = require("path"); + +const { createLogger, transports, config, format } = require("winston"); +const { combine, label, timestamp, printf } = format; + + +const getLabel = (callingModule) => { + const parts = callingModule.filename.split(path.sep); + return path.join(parts[parts.length - 2], parts.pop()); +}; + +const logMetaReplacer = (key, value) => { + if (key === "error") { + return value.name + ": " + value.message; + } + return value; +} + +const metaFormat = (meta) => { + if (Object.keys(meta).length > 0) + return "\n" + JSON.stringify(meta, logMetaReplacer) + "\n"; + return "\n"; +} + +const logFormat = printf(({ level, message, label, timestamp, ...meta }) => { + if (meta.error) { + for (const key in meta.error) { + if (typeof key !== "symbol" && key !== "message" && key !== "name") { + delete meta.error[key] + } + } + } + return `${timestamp} [${label}] ${level}: ${message}${metaFormat(meta)}`; +}); + +/** + * Creates a curried function, and call it with the module in use to get logs with filename + */ +const logger = (callingModule) => { + return createLogger({ + levels: config.npm.levels, + format: combine( + label({ label: getLabel(callingModule) }), + timestamp({ format: "YYYY-MM-DD HH:mm:ss" }), + logFormat, + ), + transports: [ + new transports.Console(), + new transports.File({ filename: __dirname + "/../logs/common.log" }), + new transports.File({ filename: __dirname + "/../logs/error.log", level: "error" }), + ] + }); +} + +module.exports = logger; diff --git a/Project-1/Part-2/web_tier_instance_run b/Project-1/Part-2/web_tier_instance_run new file mode 100644 index 0000000..c196264 --- /dev/null +++ b/Project-1/Part-2/web_tier_instance_run @@ -0,0 +1,29 @@ +#!/bin/bash +# https://stackoverflow.com/a/71648116/7630441 +sudo -u ubuntu -i <<'EOF' + +# initializing instance +cd ~ +sudo apt-get update +sudo apt-get install python3-pip +sudo apt-get upgrade -y + +# Project specific setup +curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash +echo -e '\nexport NVM_DIR="$HOME/.nvm"\n[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm \n[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion\n' >> .bashrc +source ~/.bashrc +export NVM_DIR="$HOME/.nvm" +[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm +[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion +nvm install v20.11.0 + +npm i -g pm2 +git clone https://github.com/20kaushik02/CSE546_Cloud_Computing_Projects repo +cd repo/Project-1/Part-2/web-tier-express +npm i + +# Start +pm2 start npm --name webTier -- run prod +pm2 save + +EOF diff --git a/Tooling/LICENSE b/Tooling/LICENSE new file mode 100644 index 0000000..b541651 --- /dev/null +++ b/Tooling/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 visa-lab + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Tooling/README.md b/Tooling/README.md new file mode 100644 index 0000000..7d52aff --- /dev/null +++ b/Tooling/README.md @@ -0,0 +1,2 @@ +# CSE546-Cloud-Computing +This is a public repository to facilitate project development for CSE546 Cloud Computing students. diff --git a/Tooling/dataset/Classification Results on Face Dataset (100 images).csv b/Tooling/dataset/Classification Results on Face Dataset (100 images).csv new file mode 100644 index 0000000..6d4a91e --- /dev/null +++ b/Tooling/dataset/Classification Results on Face Dataset (100 images).csv @@ -0,0 +1,101 @@ +Image,Results +test_00,Paul +test_01,Emily +test_02,Bob +test_03,German +test_04,Emily +test_05,Gerry +test_06,Gerry +test_07,Ranil +test_08,Bill +test_09,Wang +test_10,Paul +test_11,Emily +test_12,Bob +test_13,German +test_14,Emily +test_15,Gerry +test_16,Gerry +test_17,Ranil +test_18,Bill +test_19,Wang +test_20,Paul +test_21,Emily +test_22,Bob +test_23,German +test_24,Emily +test_25,Gerry +test_26,Gerry +test_27,Ranil +test_28,Bill +test_29,Wang +test_30,Paul +test_31,Emily +test_32,Bob +test_33,German +test_34,Emily +test_35,Gerry +test_36,Gerry +test_37,Ranil +test_38,Bill +test_39,Wang +test_40,Paul +test_41,Emily +test_42,Bob +test_43,German +test_44,Emily +test_45,Gerry +test_46,Gerry +test_47,Ranil +test_48,Bill +test_49,Wang +test_50,Paul +test_51,Emily +test_52,Bob +test_53,German +test_54,Emily +test_55,Gerry +test_56,Gerry +test_57,Ranil +test_58,Bill +test_59,Wang +test_60,Paul +test_61,Emily +test_62,Bob +test_63,German +test_64,Emily +test_65,Gerry +test_66,Gerry +test_67,Ranil +test_68,Bill +test_69,Wang +test_70,Paul +test_71,Emily +test_72,Bob +test_73,German +test_74,Emily +test_75,Gerry +test_76,Gerry +test_77,Ranil +test_78,Bill +test_79,Wang +test_80,Paul +test_81,Emily +test_82,Bob +test_83,German +test_84,Emily +test_85,Gerry +test_86,Gerry +test_87,Ranil +test_88,Bill +test_89,Wang +test_90,Paul +test_91,Emily +test_92,Bob +test_93,German +test_94,Emily +test_95,Gerry +test_96,Gerry +test_97,Ranil +test_98,Bill +test_99,Wang \ No newline at end of file diff --git a/Tooling/dataset/Classification Results on Face Dataset (1000 images).csv b/Tooling/dataset/Classification Results on Face Dataset (1000 images).csv new file mode 100644 index 0000000..2b8393c --- /dev/null +++ b/Tooling/dataset/Classification Results on Face Dataset (1000 images).csv @@ -0,0 +1,1001 @@ +Image,Results +test_000,Paul +test_001,Emily +test_002,Bob +test_003,German +test_004,Emily +test_005,Gerry +test_006,Gerry +test_007,Ranil +test_008,Bill +test_009,Wang +test_010,Paul +test_011,Emily +test_012,Bob +test_013,German +test_014,Emily +test_015,Gerry +test_016,Gerry +test_017,Ranil +test_018,Bill +test_019,Wang +test_020,Paul +test_021,Emily +test_022,Bob +test_023,German +test_024,Emily +test_025,Gerry +test_026,Gerry +test_027,Ranil +test_028,Bill +test_029,Wang +test_030,Paul +test_031,Emily +test_032,Bob +test_033,German +test_034,Emily +test_035,Gerry +test_036,Gerry +test_037,Ranil +test_038,Bill +test_039,Wang +test_040,Paul +test_041,Emily +test_042,Bob +test_043,German +test_044,Emily +test_045,Gerry +test_046,Gerry +test_047,Ranil +test_048,Bill +test_049,Wang +test_050,Paul +test_051,Emily +test_052,Bob +test_053,German +test_054,Emily +test_055,Gerry +test_056,Gerry +test_057,Ranil +test_058,Bill +test_059,Wang +test_060,Paul +test_061,Emily +test_062,Bob +test_063,German +test_064,Emily +test_065,Gerry +test_066,Gerry +test_067,Ranil +test_068,Bill +test_069,Wang +test_070,Paul +test_071,Emily +test_072,Bob +test_073,German +test_074,Emily +test_075,Gerry +test_076,Gerry +test_077,Ranil +test_078,Bill +test_079,Wang +test_080,Paul +test_081,Emily +test_082,Bob +test_083,German +test_084,Emily +test_085,Gerry +test_086,Gerry +test_087,Ranil +test_088,Bill +test_089,Wang +test_090,Paul +test_091,Emily +test_092,Bob +test_093,German +test_094,Emily +test_095,Gerry +test_096,Gerry +test_097,Ranil +test_098,Bill +test_099,Wang +test_100,Paul +test_101,Emily +test_102,Bob +test_103,German +test_104,Emily +test_105,Gerry +test_106,Gerry +test_107,Ranil +test_108,Bill +test_109,Wang +test_110,Paul +test_111,Emily +test_112,Bob +test_113,German +test_114,Emily +test_115,Gerry +test_116,Gerry +test_117,Ranil +test_118,Bill +test_119,Wang +test_120,Paul +test_121,Emily +test_122,Bob +test_123,German +test_124,Emily +test_125,Gerry +test_126,Gerry +test_127,Ranil +test_128,Bill +test_129,Wang +test_130,Paul +test_131,Emily +test_132,Bob +test_133,German +test_134,Emily +test_135,Gerry +test_136,Gerry +test_137,Ranil +test_138,Bill +test_139,Wang +test_140,Paul +test_141,Emily +test_142,Bob +test_143,German +test_144,Emily +test_145,Gerry +test_146,Gerry +test_147,Ranil +test_148,Bill +test_149,Wang +test_150,Paul +test_151,Emily +test_152,Bob +test_153,German +test_154,Emily +test_155,Gerry +test_156,Gerry +test_157,Ranil +test_158,Bill +test_159,Wang +test_160,Paul +test_161,Emily +test_162,Bob +test_163,German +test_164,Emily +test_165,Gerry +test_166,Gerry +test_167,Ranil +test_168,Bill +test_169,Wang +test_170,Paul +test_171,Emily +test_172,Bob +test_173,German +test_174,Emily +test_175,Gerry +test_176,Gerry +test_177,Ranil +test_178,Bill +test_179,Wang +test_180,Paul +test_181,Emily +test_182,Bob +test_183,German +test_184,Emily +test_185,Gerry +test_186,Gerry +test_187,Ranil +test_188,Bill +test_189,Wang +test_190,Paul +test_191,Emily +test_192,Bob +test_193,German +test_194,Emily +test_195,Gerry +test_196,Gerry +test_197,Ranil +test_198,Bill +test_199,Wang +test_200,Paul +test_201,Emily +test_202,Bob +test_203,German +test_204,Emily +test_205,Gerry +test_206,Gerry +test_207,Ranil +test_208,Bill +test_209,Wang +test_210,Paul +test_211,Emily +test_212,Bob +test_213,German +test_214,Emily +test_215,Gerry +test_216,Gerry +test_217,Ranil +test_218,Bill +test_219,Wang +test_220,Paul +test_221,Emily +test_222,Bob +test_223,German +test_224,Emily +test_225,Gerry +test_226,Gerry +test_227,Ranil +test_228,Bill +test_229,Wang +test_230,Paul +test_231,Emily +test_232,Bob +test_233,German +test_234,Emily +test_235,Gerry +test_236,Gerry +test_237,Ranil +test_238,Bill +test_239,Wang +test_240,Paul +test_241,Emily +test_242,Bob +test_243,German +test_244,Emily +test_245,Gerry +test_246,Gerry +test_247,Ranil +test_248,Bill +test_249,Wang +test_250,Paul +test_251,Emily +test_252,Bob +test_253,German +test_254,Emily +test_255,Gerry +test_256,Gerry +test_257,Ranil +test_258,Bill +test_259,Wang +test_260,Paul +test_261,Emily +test_262,Bob +test_263,German +test_264,Emily +test_265,Gerry +test_266,Gerry +test_267,Ranil +test_268,Bill +test_269,Wang +test_270,Paul +test_271,Emily +test_272,Bob +test_273,German +test_274,Emily +test_275,Gerry +test_276,Gerry +test_277,Ranil +test_278,Bill +test_279,Wang +test_280,Paul +test_281,Emily +test_282,Bob +test_283,German +test_284,Emily +test_285,Gerry +test_286,Gerry +test_287,Ranil +test_288,Bill +test_289,Wang +test_290,Paul +test_291,Emily +test_292,Bob +test_293,German +test_294,Emily +test_295,Gerry +test_296,Gerry +test_297,Ranil +test_298,Bill +test_299,Wang +test_300,Paul +test_301,Emily +test_302,Bob +test_303,German +test_304,Emily +test_305,Gerry +test_306,Gerry +test_307,Ranil +test_308,Bill +test_309,Wang +test_310,Paul +test_311,Emily +test_312,Bob +test_313,German +test_314,Emily +test_315,Gerry +test_316,Gerry +test_317,Ranil +test_318,Bill +test_319,Wang +test_320,Paul +test_321,Emily +test_322,Bob +test_323,German +test_324,Emily +test_325,Gerry +test_326,Gerry +test_327,Ranil +test_328,Bill +test_329,Wang +test_330,Paul +test_331,Emily +test_332,Bob +test_333,German +test_334,Emily +test_335,Gerry +test_336,Gerry +test_337,Ranil +test_338,Bill +test_339,Wang +test_340,Paul +test_341,Emily +test_342,Bob +test_343,German +test_344,Emily +test_345,Gerry +test_346,Gerry +test_347,Ranil +test_348,Bill +test_349,Wang +test_350,Paul +test_351,Emily +test_352,Bob +test_353,German +test_354,Emily +test_355,Gerry +test_356,Gerry +test_357,Ranil +test_358,Bill +test_359,Wang +test_360,Paul +test_361,Emily +test_362,Bob +test_363,German +test_364,Emily +test_365,Gerry +test_366,Gerry +test_367,Ranil +test_368,Bill +test_369,Wang +test_370,Paul +test_371,Emily +test_372,Bob +test_373,German +test_374,Emily +test_375,Gerry +test_376,Gerry +test_377,Ranil +test_378,Bill +test_379,Wang +test_380,Paul +test_381,Emily +test_382,Bob +test_383,German +test_384,Emily +test_385,Gerry +test_386,Gerry +test_387,Ranil +test_388,Bill +test_389,Wang +test_390,Paul +test_391,Emily +test_392,Bob +test_393,German +test_394,Emily +test_395,Gerry +test_396,Gerry +test_397,Ranil +test_398,Bill +test_399,Wang +test_400,Paul +test_401,Emily +test_402,Bob +test_403,German +test_404,Emily +test_405,Gerry +test_406,Gerry +test_407,Ranil +test_408,Bill +test_409,Wang +test_410,Paul +test_411,Emily +test_412,Bob +test_413,German +test_414,Emily +test_415,Gerry +test_416,Gerry +test_417,Ranil +test_418,Bill +test_419,Wang +test_420,Paul +test_421,Emily +test_422,Bob +test_423,German +test_424,Emily +test_425,Gerry +test_426,Gerry +test_427,Ranil +test_428,Bill +test_429,Wang +test_430,Paul +test_431,Emily +test_432,Bob +test_433,German +test_434,Emily +test_435,Gerry +test_436,Gerry +test_437,Ranil +test_438,Bill +test_439,Wang +test_440,Paul +test_441,Emily +test_442,Bob +test_443,German +test_444,Emily +test_445,Gerry +test_446,Gerry +test_447,Ranil +test_448,Bill +test_449,Wang +test_450,Paul +test_451,Emily +test_452,Bob +test_453,German +test_454,Emily +test_455,Gerry +test_456,Gerry +test_457,Ranil +test_458,Bill +test_459,Wang +test_460,Paul +test_461,Emily +test_462,Bob +test_463,German +test_464,Emily +test_465,Gerry +test_466,Gerry +test_467,Ranil +test_468,Bill +test_469,Wang +test_470,Paul +test_471,Emily +test_472,Bob +test_473,German +test_474,Emily +test_475,Gerry +test_476,Gerry +test_477,Ranil +test_478,Bill +test_479,Wang +test_480,Paul +test_481,Emily +test_482,Bob +test_483,German +test_484,Emily +test_485,Gerry +test_486,Gerry +test_487,Ranil +test_488,Bill +test_489,Wang +test_490,Paul +test_491,Emily +test_492,Bob +test_493,German +test_494,Emily +test_495,Gerry +test_496,Gerry +test_497,Ranil +test_498,Bill +test_499,Wang +test_500,Paul +test_501,Emily +test_502,Bob +test_503,German +test_504,Emily +test_505,Gerry +test_506,Gerry +test_507,Ranil +test_508,Bill +test_509,Wang +test_510,Paul +test_511,Emily +test_512,Bob +test_513,German +test_514,Emily +test_515,Gerry +test_516,Gerry +test_517,Ranil +test_518,Bill +test_519,Wang +test_520,Paul +test_521,Emily +test_522,Bob +test_523,German +test_524,Emily +test_525,Gerry +test_526,Gerry +test_527,Ranil +test_528,Bill +test_529,Wang +test_530,Paul +test_531,Emily +test_532,Bob +test_533,German +test_534,Emily +test_535,Gerry +test_536,Gerry +test_537,Ranil +test_538,Bill +test_539,Wang +test_540,Paul +test_541,Emily +test_542,Bob +test_543,German +test_544,Emily +test_545,Gerry +test_546,Gerry +test_547,Ranil +test_548,Bill +test_549,Wang +test_550,Paul +test_551,Emily +test_552,Bob +test_553,German +test_554,Emily +test_555,Gerry +test_556,Gerry +test_557,Ranil +test_558,Bill +test_559,Wang +test_560,Paul +test_561,Emily +test_562,Bob +test_563,German +test_564,Emily +test_565,Gerry +test_566,Gerry +test_567,Ranil +test_568,Bill +test_569,Wang +test_570,Paul +test_571,Emily +test_572,Bob +test_573,German +test_574,Emily +test_575,Gerry +test_576,Gerry +test_577,Ranil +test_578,Bill +test_579,Wang +test_580,Paul +test_581,Emily +test_582,Bob +test_583,German +test_584,Emily +test_585,Gerry +test_586,Gerry +test_587,Ranil +test_588,Bill +test_589,Wang +test_590,Paul +test_591,Emily +test_592,Bob +test_593,German +test_594,Emily +test_595,Gerry +test_596,Gerry +test_597,Ranil +test_598,Bill +test_599,Wang +test_600,Paul +test_601,Emily +test_602,Bob +test_603,German +test_604,Emily +test_605,Gerry +test_606,Gerry +test_607,Ranil +test_608,Bill +test_609,Wang +test_610,Paul +test_611,Emily +test_612,Bob +test_613,German +test_614,Emily +test_615,Gerry +test_616,Gerry +test_617,Ranil +test_618,Bill +test_619,Wang +test_620,Paul +test_621,Emily +test_622,Bob +test_623,German +test_624,Emily +test_625,Gerry +test_626,Gerry +test_627,Ranil +test_628,Bill +test_629,Wang +test_630,Paul +test_631,Emily +test_632,Bob +test_633,German +test_634,Emily +test_635,Gerry +test_636,Gerry +test_637,Ranil +test_638,Bill +test_639,Wang +test_640,Paul +test_641,Emily +test_642,Bob +test_643,German +test_644,Emily +test_645,Gerry +test_646,Gerry +test_647,Ranil +test_648,Bill +test_649,Wang +test_650,Paul +test_651,Emily +test_652,Bob +test_653,German +test_654,Emily +test_655,Gerry +test_656,Gerry +test_657,Ranil +test_658,Bill +test_659,Wang +test_660,Paul +test_661,Emily +test_662,Bob +test_663,German +test_664,Emily +test_665,Gerry +test_666,Gerry +test_667,Ranil +test_668,Bill +test_669,Wang +test_670,Paul +test_671,Emily +test_672,Bob +test_673,German +test_674,Emily +test_675,Gerry +test_676,Gerry +test_677,Ranil +test_678,Bill +test_679,Wang +test_680,Paul +test_681,Emily +test_682,Bob +test_683,German +test_684,Emily +test_685,Gerry +test_686,Gerry +test_687,Ranil +test_688,Bill +test_689,Wang +test_690,Paul +test_691,Emily +test_692,Bob +test_693,German +test_694,Emily +test_695,Gerry +test_696,Gerry +test_697,Ranil +test_698,Bill +test_699,Wang +test_700,Paul +test_701,Emily +test_702,Bob +test_703,German +test_704,Emily +test_705,Gerry +test_706,Gerry +test_707,Ranil +test_708,Bill +test_709,Wang +test_710,Paul +test_711,Emily +test_712,Bob +test_713,German +test_714,Emily +test_715,Gerry +test_716,Gerry +test_717,Ranil +test_718,Bill +test_719,Wang +test_720,Paul +test_721,Emily +test_722,Bob +test_723,German +test_724,Emily +test_725,Gerry +test_726,Gerry +test_727,Ranil +test_728,Bill +test_729,Wang +test_730,Paul +test_731,Emily +test_732,Bob +test_733,German +test_734,Emily +test_735,Gerry +test_736,Gerry +test_737,Ranil +test_738,Bill +test_739,Wang +test_740,Paul +test_741,Emily +test_742,Bob +test_743,German +test_744,Emily +test_745,Gerry +test_746,Gerry +test_747,Ranil +test_748,Bill +test_749,Wang +test_750,Paul +test_751,Emily +test_752,Bob +test_753,German +test_754,Emily +test_755,Gerry +test_756,Gerry +test_757,Ranil +test_758,Bill +test_759,Wang +test_760,Paul +test_761,Emily +test_762,Bob +test_763,German +test_764,Emily +test_765,Gerry +test_766,Gerry +test_767,Ranil +test_768,Bill +test_769,Wang +test_770,Paul +test_771,Emily +test_772,Bob +test_773,German +test_774,Emily +test_775,Gerry +test_776,Gerry +test_777,Ranil +test_778,Bill +test_779,Wang +test_780,Paul +test_781,Emily +test_782,Bob +test_783,German +test_784,Emily +test_785,Gerry +test_786,Gerry +test_787,Ranil +test_788,Bill +test_789,Wang +test_790,Paul +test_791,Emily +test_792,Bob +test_793,German +test_794,Emily +test_795,Gerry +test_796,Gerry +test_797,Ranil +test_798,Bill +test_799,Wang +test_800,Paul +test_801,Emily +test_802,Bob +test_803,German +test_804,Emily +test_805,Gerry +test_806,Gerry +test_807,Ranil +test_808,Bill +test_809,Wang +test_810,Paul +test_811,Emily +test_812,Bob +test_813,German +test_814,Emily +test_815,Gerry +test_816,Gerry +test_817,Ranil +test_818,Bill +test_819,Wang +test_820,Paul +test_821,Emily +test_822,Bob +test_823,German +test_824,Emily +test_825,Gerry +test_826,Gerry +test_827,Ranil +test_828,Bill +test_829,Wang +test_830,Paul +test_831,Emily +test_832,Bob +test_833,German +test_834,Emily +test_835,Gerry +test_836,Gerry +test_837,Ranil +test_838,Bill +test_839,Wang +test_840,Paul +test_841,Emily +test_842,Bob +test_843,German +test_844,Emily +test_845,Gerry +test_846,Gerry +test_847,Ranil +test_848,Bill +test_849,Wang +test_850,Paul +test_851,Emily +test_852,Bob +test_853,German +test_854,Emily +test_855,Gerry +test_856,Gerry +test_857,Ranil +test_858,Bill +test_859,Wang +test_860,Paul +test_861,Emily +test_862,Bob +test_863,German +test_864,Emily +test_865,Gerry +test_866,Gerry +test_867,Ranil +test_868,Bill +test_869,Wang +test_870,Paul +test_871,Emily +test_872,Bob +test_873,German +test_874,Emily +test_875,Gerry +test_876,Gerry +test_877,Ranil +test_878,Bill +test_879,Wang +test_880,Paul +test_881,Emily +test_882,Bob +test_883,German +test_884,Emily +test_885,Gerry +test_886,Gerry +test_887,Ranil +test_888,Bill +test_889,Wang +test_890,Paul +test_891,Emily +test_892,Bob +test_893,German +test_894,Emily +test_895,Gerry +test_896,Gerry +test_897,Ranil +test_898,Bill +test_899,Wang +test_900,Paul +test_901,Emily +test_902,Bob +test_903,German +test_904,Emily +test_905,Gerry +test_906,Gerry +test_907,Ranil +test_908,Bill +test_909,Wang +test_910,Paul +test_911,Emily +test_912,Bob +test_913,German +test_914,Emily +test_915,Gerry +test_916,Gerry +test_917,Ranil +test_918,Bill +test_919,Wang +test_920,Paul +test_921,Emily +test_922,Bob +test_923,German +test_924,Emily +test_925,Gerry +test_926,Gerry +test_927,Ranil +test_928,Bill +test_929,Wang +test_930,Paul +test_931,Emily +test_932,Bob +test_933,German +test_934,Emily +test_935,Gerry +test_936,Gerry +test_937,Ranil +test_938,Bill +test_939,Wang +test_940,Paul +test_941,Emily +test_942,Bob +test_943,German +test_944,Emily +test_945,Gerry +test_946,Gerry +test_947,Ranil +test_948,Bill +test_949,Wang +test_950,Paul +test_951,Emily +test_952,Bob +test_953,German +test_954,Emily +test_955,Gerry +test_956,Gerry +test_957,Ranil +test_958,Bill +test_959,Wang +test_960,Paul +test_961,Emily +test_962,Bob +test_963,German +test_964,Emily +test_965,Gerry +test_966,Gerry +test_967,Ranil +test_968,Bill +test_969,Wang +test_970,Paul +test_971,Emily +test_972,Bob +test_973,German +test_974,Emily +test_975,Gerry +test_976,Gerry +test_977,Ranil +test_978,Bill +test_979,Wang +test_980,Paul +test_981,Emily +test_982,Bob +test_983,German +test_984,Emily +test_985,Gerry +test_986,Gerry +test_987,Ranil +test_988,Bill +test_989,Wang +test_990,Paul +test_991,Emily +test_992,Bob +test_993,German +test_994,Emily +test_995,Gerry +test_996,Gerry +test_997,Ranil +test_998,Bill +test_999,Wang diff --git a/Tooling/model/Readme.md b/Tooling/model/Readme.md new file mode 100644 index 0000000..8f9d89b --- /dev/null +++ b/Tooling/model/Readme.md @@ -0,0 +1,19 @@ +## Face Recognition Model Repository with Inference Code and Pretrained Weights + +### Folder structure: + - facenet_pytorch: This is a repository for Inception Resnet (V1) models in pytorch, pretrained on VGGFace2 and CASIA-Webface. + - face_recognition.py: Model Inference code + - data.pt: Saved model weights + +### Prerequisites + - You need to install the PyTorch CPU version to use the code. + ``` + pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu + ``` + +### Sample Output: + +``` +(cse546) kjha9@en4113732l:~/git/Project-1/part-2/model$ python3 face_recognition.py ../../face_images_1000/test_000.jpg +Paul +(cse546) kjha9@en4113732l:~/git/Project-1/part-2/model$ diff --git a/Tooling/model/data.pt b/Tooling/model/data.pt new file mode 100644 index 0000000..066b55a Binary files /dev/null and b/Tooling/model/data.pt differ diff --git a/Tooling/model/face_recognition.py b/Tooling/model/face_recognition.py new file mode 100644 index 0000000..2fb326c --- /dev/null +++ b/Tooling/model/face_recognition.py @@ -0,0 +1,36 @@ +__copyright__ = "Copyright 2024, VISA Lab" +__license__ = "MIT" + +import os +import csv +import sys +import torch +from PIL import Image +from facenet_pytorch import MTCNN, InceptionResnetV1 +from torchvision import datasets +from torch.utils.data import DataLoader + +mtcnn = MTCNN(image_size=240, margin=0, min_face_size=20) # initializing mtcnn for face detection +resnet = InceptionResnetV1(pretrained='vggface2').eval() # initializing resnet for face img to embeding conversion +test_image = sys.argv[1] + +def face_match(img_path, data_path): # img_path= location of photo, data_path= location of data.pt + # getting embedding matrix of the given img + img = Image.open(img_path) + face, prob = mtcnn(img, return_prob=True) # returns cropped face and probability + emb = resnet(face.unsqueeze(0)).detach() # detech is to make required gradient false + + saved_data = torch.load('data.pt') # loading data.pt file + embedding_list = saved_data[0] # getting embedding data + name_list = saved_data[1] # getting list of names + dist_list = [] # list of matched distances, minimum distance is used to identify the person + + for idx, emb_db in enumerate(embedding_list): + dist = torch.dist(emb, emb_db).item() + dist_list.append(dist) + + idx_min = dist_list.index(min(dist_list)) + return (name_list[idx_min], min(dist_list)) + +result = face_match(test_image, 'data.pt') +print(result[0]) diff --git a/Tooling/model/facenet_pytorch/.gitignore b/Tooling/model/facenet_pytorch/.gitignore new file mode 100644 index 0000000..62acda3 --- /dev/null +++ b/Tooling/model/facenet_pytorch/.gitignore @@ -0,0 +1,14 @@ +__pycache__ +.vscode +.ipynb_checkpoints +runs +build +dist +*.egg-info +*tmp* +.coverage +htmlcov +test.py +.cache +.ipython +.local diff --git a/Tooling/model/facenet_pytorch/.travis.yml b/Tooling/model/facenet_pytorch/.travis.yml new file mode 100644 index 0000000..4eab7f9 --- /dev/null +++ b/Tooling/model/facenet_pytorch/.travis.yml @@ -0,0 +1,25 @@ +language: python +matrix: + include: + + - name: "Python 3.7 on Linux" + python: 3.7 + dist: xenial + + - name: "Python 3.6 on Linux" + python: 3.6 + dist: xenial + + - name: "Python 3.5 on Linux" + python: 3.5 + dist: xenial + +install: pip3 install -r tests/travis_requirements.txt || pip3 install --user -r tests/travis_requirements.txt +script: + - python3 --version || python --version + - echo "import tests.travis_test" > test.py + - coverage run --source models,examples test.py && coverage report + +after_success: + - codecov + diff --git a/Tooling/model/facenet_pytorch/LICENSE.md b/Tooling/model/facenet_pytorch/LICENSE.md new file mode 100644 index 0000000..501bd49 --- /dev/null +++ b/Tooling/model/facenet_pytorch/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 Timothy Esler + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Tooling/model/facenet_pytorch/README.md b/Tooling/model/facenet_pytorch/README.md new file mode 100644 index 0000000..f185f18 --- /dev/null +++ b/Tooling/model/facenet_pytorch/README.md @@ -0,0 +1,246 @@ +# Face Recognition Using Pytorch +[![Downloads](https://pepy.tech/badge/facenet-pytorch)](https://pepy.tech/project/facenet-pytorch) + +[![Code Coverage](https://img.shields.io/codecov/c/github/timesler/facenet-pytorch.svg)](https://codecov.io/gh/timesler/facenet-pytorch) + +| Python | 3.7 | 3.6 | 3.5 | +| :---: | :---: | :---: | :---: | +| Status | [![Build Status](https://travis-ci.com/timesler/facenet-pytorch.svg?branch=master)](https://travis-ci.com/timesler/facenet-pytorch) | [![Build Status](https://travis-ci.com/timesler/facenet-pytorch.svg?branch=master)](https://travis-ci.com/timesler/facenet-pytorch) | [![Build Status](https://travis-ci.com/timesler/facenet-pytorch.svg?branch=master)](https://travis-ci.com/timesler/facenet-pytorch) | + +[![xscode](https://img.shields.io/badge/Available%20on-xs%3Acode-blue?style=?style=plastic&logo=appveyor&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAZQTFRF////////VXz1bAAAAAJ0Uk5T/wDltzBKAAAAlUlEQVR42uzXSwqAMAwE0Mn9L+3Ggtgkk35QwcnSJo9S+yGwM9DCooCbgn4YrJ4CIPUcQF7/XSBbx2TEz4sAZ2q1RAECBAiYBlCtvwN+KiYAlG7UDGj59MViT9hOwEqAhYCtAsUZvL6I6W8c2wcbd+LIWSCHSTeSAAECngN4xxIDSK9f4B9t377Wd7H5Nt7/Xz8eAgwAvesLRjYYPuUAAAAASUVORK5CYII=)](https://xscode.com/timesler/facenet-pytorch) + +This is a repository for Inception Resnet (V1) models in pytorch, pretrained on VGGFace2 and CASIA-Webface. + +Pytorch model weights were initialized using parameters ported from David Sandberg's [tensorflow facenet repo](https://github.com/davidsandberg/facenet). + +Also included in this repo is an efficient pytorch implementation of MTCNN for face detection prior to inference. These models are also pretrained. To our knowledge, this is the fastest MTCNN implementation available. + +## Table of contents + +* [Table of contents](#table-of-contents) +* [Quick start](#quick-start) +* [Pretrained models](#pretrained-models) +* [Example notebooks](#example-notebooks) + + [*Complete detection and recognition pipeline*](#complete-detection-and-recognition-pipeline) + + [*Face tracking in video streams*](#face-tracking-in-video-streams) + + [*Finetuning pretrained models with new data*](#finetuning-pretrained-models-with-new-data) + + [*Guide to MTCNN in facenet-pytorch*](#guide-to-mtcnn-in-facenet-pytorch) + + [*Performance comparison of face detection packages*](#performance-comparison-of-face-detection-packages) + + [*The FastMTCNN algorithm*](#the-fastmtcnn-algorithm) +* [Running with docker](#running-with-docker) +* [Use this repo in your own git project](#use-this-repo-in-your-own-git-project) +* [Conversion of parameters from Tensorflow to Pytorch](#conversion-of-parameters-from-tensorflow-to-pytorch) +* [References](#references) + +## Quick start + +1. Install: + + ```bash + # With pip: + pip install facenet-pytorch + + # or clone this repo, removing the '-' to allow python imports: + git clone https://github.com/timesler/facenet-pytorch.git facenet_pytorch + + # or use a docker container (see https://github.com/timesler/docker-jupyter-dl-gpu): + docker run -it --rm timesler/jupyter-dl-gpu pip install facenet-pytorch && ipython + ``` + +1. In python, import facenet-pytorch and instantiate models: + + ```python + from facenet_pytorch import MTCNN, InceptionResnetV1 + + # If required, create a face detection pipeline using MTCNN: + mtcnn = MTCNN(image_size=, margin=) + + # Create an inception resnet (in eval mode): + resnet = InceptionResnetV1(pretrained='vggface2').eval() + ``` + +1. Process an image: + + ```python + from PIL import Image + + img = Image.open() + + # Get cropped and prewhitened image tensor + img_cropped = mtcnn(img, save_path=) + + # Calculate embedding (unsqueeze to add batch dimension) + img_embedding = resnet(img_cropped.unsqueeze(0)) + + # Or, if using for VGGFace2 classification + resnet.classify = True + img_probs = resnet(img_cropped.unsqueeze(0)) + ``` + +See `help(MTCNN)` and `help(InceptionResnetV1)` for usage and implementation details. + +## Pretrained models + +See: [models/inception_resnet_v1.py](models/inception_resnet_v1.py) + +The following models have been ported to pytorch (with links to download pytorch state_dict's): + +|Model name|LFW accuracy (as listed [here](https://github.com/davidsandberg/facenet))|Training dataset| +| :- | :-: | -: | +|[20180408-102900](https://github.com/timesler/facenet-pytorch/releases/download/v2.2.9/20180408-102900-casia-webface.pt) (111MB)|0.9905|CASIA-Webface| +|[20180402-114759](https://github.com/timesler/facenet-pytorch/releases/download/v2.2.9/20180402-114759-vggface2.pt) (107MB)|0.9965|VGGFace2| + +There is no need to manually download the pretrained state_dict's; they are downloaded automatically on model instantiation and cached for future use in the torch cache. To use an Inception Resnet (V1) model for facial recognition/identification in pytorch, use: + +```python +from facenet_pytorch import InceptionResnetV1 + +# For a model pretrained on VGGFace2 +model = InceptionResnetV1(pretrained='vggface2').eval() + +# For a model pretrained on CASIA-Webface +model = InceptionResnetV1(pretrained='casia-webface').eval() + +# For an untrained model with 100 classes +model = InceptionResnetV1(num_classes=100).eval() + +# For an untrained 1001-class classifier +model = InceptionResnetV1(classify=True, num_classes=1001).eval() +``` + +Both pretrained models were trained on 160x160 px images, so will perform best if applied to images resized to this shape. For best results, images should also be cropped to the face using MTCNN (see below). + +By default, the above models will return 512-dimensional embeddings of images. To enable classification instead, either pass `classify=True` to the model constructor, or you can set the object attribute afterwards with `model.classify = True`. For VGGFace2, the pretrained model will output logit vectors of length 8631, and for CASIA-Webface logit vectors of length 10575. + +## Example notebooks + +### *Complete detection and recognition pipeline* + +Face recognition can be easily applied to raw images by first detecting faces using MTCNN before calculating embedding or probabilities using an Inception Resnet model. The example code at [examples/infer.ipynb](examples/infer.ipynb) provides a complete example pipeline utilizing datasets, dataloaders, and optional GPU processing. + +### *Face tracking in video streams* + +MTCNN can be used to build a face tracking system (using the `MTCNN.detect()` method). A full face tracking example can be found at [examples/face_tracking.ipynb](examples/face_tracking.ipynb). + +![](examples/tracked.gif) + +### *Finetuning pretrained models with new data* + +In most situations, the best way to implement face recognition is to use the pretrained models directly, with either a clustering algorithm or a simple distance metrics to determine the identity of a face. However, if finetuning is required (i.e., if you want to select identity based on the model's output logits), an example can be found at [examples/finetune.ipynb](examples/finetune.ipynb). + +### *Guide to MTCNN in facenet-pytorch* + +This guide demonstrates the functionality of the MTCNN module. Topics covered are: + +* Basic usage +* Image normalization +* Face margins +* Multiple faces in a single image +* Batched detection +* Bounding boxes and facial landmarks +* Saving face datasets + +See the [notebook on kaggle](https://www.kaggle.com/timesler/guide-to-mtcnn-in-facenet-pytorch). + +### *Performance comparison of face detection packages* + +This notebook demonstrates the use of three face detection packages: + +1. facenet-pytorch +1. mtcnn +1. dlib + +Each package is tested for its speed in detecting the faces in a set of 300 images (all frames from one video), with GPU support enabled. Performance is based on Kaggle's P100 notebook kernel. Results are summarized below. + +|Package|FPS (1080x1920)|FPS (720x1280)|FPS (540x960)| +|---|---|---|---| +|facenet-pytorch|12.97|20.32|25.50| +|facenet-pytorch (non-batched)|9.75|14.81|19.68| +|dlib|3.80|8.39|14.53| +|mtcnn|3.04|5.70|8.23| + +![](examples/performance-comparison.png) + +See the [notebook on kaggle](https://www.kaggle.com/timesler/comparison-of-face-detection-packages). + +### *The FastMTCNN algorithm* + +This algorithm demonstrates how to achieve extremely efficient face detection specifically in videos, by taking advantage of similarities between adjacent frames. + +See the [notebook on kaggle](https://www.kaggle.com/timesler/fast-mtcnn-detector-55-fps-at-full-resolution). + +## Running with docker + +The package and any of the example notebooks can be run with docker (or nvidia-docker) using: + +```bash +docker run --rm -p 8888:8888 + -v ./facenet-pytorch:/home/jovyan timesler/jupyter-dl-gpu \ + -v :/home/jovyan/data + pip install facenet-pytorch && jupyter lab +``` + +Navigate to the examples/ directory and run any of the ipython notebooks. + +See [timesler/jupyter-dl-gpu](https://github.com/timesler/docker-jupyter-dl-gpu) for docker container details. + +## Use this repo in your own git project + +To use this code in your own git repo, I recommend first adding this repo as a submodule. Note that the dash ('-') in the repo name should be removed when cloning as a submodule as it will break python when importing: + +`git submodule add https://github.com/timesler/facenet-pytorch.git facenet_pytorch` + +Alternatively, the code can be installed as a package using pip: + +`pip install facenet-pytorch` + +## Conversion of parameters from Tensorflow to Pytorch + +See: [models/utils/tensorflow2pytorch.py](models/tensorflow2pytorch.py) + +Note that this functionality is not needed to use the models in this repo, which depend only on the saved pytorch `state_dict`'s. + +Following instantiation of the pytorch model, each layer's weights were loaded from equivalent layers in the pretrained tensorflow models from [davidsandberg/facenet](https://github.com/davidsandberg/facenet). + +The equivalence of the outputs from the original tensorflow models and the pytorch-ported models have been tested and are identical: + +--- + +`>>> compare_model_outputs(mdl, sess, torch.randn(5, 160, 160, 3).detach())` + +``` +Passing test data through TF model + +tensor([[-0.0142, 0.0615, 0.0057, ..., 0.0497, 0.0375, -0.0838], + [-0.0139, 0.0611, 0.0054, ..., 0.0472, 0.0343, -0.0850], + [-0.0238, 0.0619, 0.0124, ..., 0.0598, 0.0334, -0.0852], + [-0.0089, 0.0548, 0.0032, ..., 0.0506, 0.0337, -0.0881], + [-0.0173, 0.0630, -0.0042, ..., 0.0487, 0.0295, -0.0791]]) + +Passing test data through PT model + +tensor([[-0.0142, 0.0615, 0.0057, ..., 0.0497, 0.0375, -0.0838], + [-0.0139, 0.0611, 0.0054, ..., 0.0472, 0.0343, -0.0850], + [-0.0238, 0.0619, 0.0124, ..., 0.0598, 0.0334, -0.0852], + [-0.0089, 0.0548, 0.0032, ..., 0.0506, 0.0337, -0.0881], + [-0.0173, 0.0630, -0.0042, ..., 0.0487, 0.0295, -0.0791]], + grad_fn=) + +Distance 1.2874517096861382e-06 +``` + +--- + +In order to re-run the conversion of tensorflow parameters into the pytorch model, ensure you clone this repo _with submodules_, as the davidsandberg/facenet repo is included as a submodule and parts of it are required for the conversion. + +## References + +1. David Sandberg's facenet repo: [https://github.com/davidsandberg/facenet](https://github.com/davidsandberg/facenet) + +1. F. Schroff, D. Kalenichenko, J. Philbin. _FaceNet: A Unified Embedding for Face Recognition and Clustering_, arXiv:1503.03832, 2015. [PDF](https://arxiv.org/pdf/1503.03832) + +1. Q. Cao, L. Shen, W. Xie, O. M. Parkhi, A. Zisserman. _VGGFace2: A dataset for recognising face across pose and age_, International Conference on Automatic Face and Gesture Recognition, 2018. [PDF](http://www.robots.ox.ac.uk/~vgg/publications/2018/Cao18/cao18.pdf) + +1. D. Yi, Z. Lei, S. Liao and S. Z. Li. _CASIAWebface: Learning Face Representation from Scratch_, arXiv:1411.7923, 2014. [PDF](https://arxiv.org/pdf/1411.7923) + +1. K. Zhang, Z. Zhang, Z. Li and Y. Qiao. _Joint Face Detection and Alignment Using Multitask Cascaded Convolutional Networks_, IEEE Signal Processing Letters, 2016. [PDF](https://kpzhang93.github.io/MTCNN_face_detection_alignment/paper/spl.pdf) diff --git a/Tooling/model/facenet_pytorch/__init__.py b/Tooling/model/facenet_pytorch/__init__.py new file mode 100644 index 0000000..2c00284 --- /dev/null +++ b/Tooling/model/facenet_pytorch/__init__.py @@ -0,0 +1,11 @@ +from .models.inception_resnet_v1 import InceptionResnetV1 +from .models.mtcnn import MTCNN, PNet, RNet, ONet, prewhiten, fixed_image_standardization +from .models.utils.detect_face import extract_face +from .models.utils import training + +import warnings +warnings.filterwarnings( + action="ignore", + message="This overload of nonzero is deprecated:\n\tnonzero()", + category=UserWarning +) \ No newline at end of file diff --git a/Tooling/model/facenet_pytorch/codecov.yml b/Tooling/model/facenet_pytorch/codecov.yml new file mode 100644 index 0000000..35cde5c --- /dev/null +++ b/Tooling/model/facenet_pytorch/codecov.yml @@ -0,0 +1,4 @@ +coverage: + status: + project: off + patch: off diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_0.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_0.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_0.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_1.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_1.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_1.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_10.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_10.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_10.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_11.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_11.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_11.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_12.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_12.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_12.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_13.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_13.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_13.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_14.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_14.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_14.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_15.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_15.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_15.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_16.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_16.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_16.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_17.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_17.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_17.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_18.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_18.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_18.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_19.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_19.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_19.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_2.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_2.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_2.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_20.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_20.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_20.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_21.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_21.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_21.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_22.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_22.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_22.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_23.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_23.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_23.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_24.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_24.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_24.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_25.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_25.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_25.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_26.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_26.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_26.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_27.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_27.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_27.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_28.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_28.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_28.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_29.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_29.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_29.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_3.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_3.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_3.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_30.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_30.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_30.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_31.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_31.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_31.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_32.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_32.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_32.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_33.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_33.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_33.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_34.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_34.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_34.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_35.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_35.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_35.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_36.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_36.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_36.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_37.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_37.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_37.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_38.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_38.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_38.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_39.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_39.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_39.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_4.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_4.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_4.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_40.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_40.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_40.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_41.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_41.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_41.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_42.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_42.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_42.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_43.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_43.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_43.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_44.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_44.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_44.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_45.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_45.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_45.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_46.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_46.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_46.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_47.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_47.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_47.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_48.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_48.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_48.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_49.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_49.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_49.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_5.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_5.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_5.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_50.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_50.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_50.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_51.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_51.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_51.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_52.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_52.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_52.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_53.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_53.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_53.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_54.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_54.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_54.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_55.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_55.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_55.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_56.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_56.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_56.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_57.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_57.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_57.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_58.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_58.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_58.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_59.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_59.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_59.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_6.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_6.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_6.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_60.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_60.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_60.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_61.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_61.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_61.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_62.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_62.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_62.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_63.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_63.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_63.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_64.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_64.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_64.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_65.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_65.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_65.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_66.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_66.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_66.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_67.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_67.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_67.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_68.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_68.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_68.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_69.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_69.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_69.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_7.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_7.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_7.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_70.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_70.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_70.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_71.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_71.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_71.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_72.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_72.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_72.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_73.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_73.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_73.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_74.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_74.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_74.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_75.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_75.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_75.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_76.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_76.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_76.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_77.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_77.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_77.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_78.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_78.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_78.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_79.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_79.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_79.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_8.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_8.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_8.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_80.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_80.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_80.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_81.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_81.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_81.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_82.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_82.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_82.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_83.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_83.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_83.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_84.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_84.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_84.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_85.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_85.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_85.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_86.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_86.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_86.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_87.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_87.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_87.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_88.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_88.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_88.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_89.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_89.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_89.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_9.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_9.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_9.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_90.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_90.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_90.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_91.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_91.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_91.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_92.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_92.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_92.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_93.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_93.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_93.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_94.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_94.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_94.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_95.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_95.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_95.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_96.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_96.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_96.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_97.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_97.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_97.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_98.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_98.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_98.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_99.jpg b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_99.jpg new file mode 100644 index 0000000..bc96421 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/__MACOSX/face_images_100/._test_99.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/data.pt b/Tooling/model/facenet_pytorch/custom/data.pt new file mode 100644 index 0000000..69c2cc1 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/data.pt differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_0.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_0.jpg new file mode 100644 index 0000000..9f2798d Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_0.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_1.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_1.jpg new file mode 100644 index 0000000..ae2372a Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_1.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_10.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_10.jpg new file mode 100644 index 0000000..cd32a56 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_10.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_11.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_11.jpg new file mode 100644 index 0000000..dfe703f Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_11.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_12.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_12.jpg new file mode 100644 index 0000000..12ee6d8 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_12.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_13.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_13.jpg new file mode 100644 index 0000000..2d4148b Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_13.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_14.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_14.jpg new file mode 100644 index 0000000..4ef08b8 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_14.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_15.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_15.jpg new file mode 100644 index 0000000..02959e2 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_15.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_16.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_16.jpg new file mode 100644 index 0000000..dbd31b8 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_16.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_17.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_17.jpg new file mode 100644 index 0000000..9c19434 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_17.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_18.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_18.jpg new file mode 100644 index 0000000..9b9fbfa Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_18.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_19.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_19.jpg new file mode 100644 index 0000000..74dead3 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_19.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_2.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_2.jpg new file mode 100644 index 0000000..9047b93 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_2.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_20.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_20.jpg new file mode 100644 index 0000000..c0d4c43 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_20.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_21.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_21.jpg new file mode 100644 index 0000000..11c2cd2 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_21.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_22.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_22.jpg new file mode 100644 index 0000000..d105161 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_22.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_23.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_23.jpg new file mode 100644 index 0000000..b28a9ae Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_23.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_24.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_24.jpg new file mode 100644 index 0000000..ebe0faa Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_24.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_25.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_25.jpg new file mode 100644 index 0000000..b7b7bf9 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_25.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_26.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_26.jpg new file mode 100644 index 0000000..a135768 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_26.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_27.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_27.jpg new file mode 100644 index 0000000..bf5a5d3 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_27.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_28.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_28.jpg new file mode 100644 index 0000000..2452f7c Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_28.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_29.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_29.jpg new file mode 100644 index 0000000..9174ae3 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_29.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_3.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_3.jpg new file mode 100644 index 0000000..003d802 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_3.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_30.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_30.jpg new file mode 100644 index 0000000..11d4992 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_30.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_31.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_31.jpg new file mode 100644 index 0000000..f4fb76c Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_31.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_32.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_32.jpg new file mode 100644 index 0000000..bc98f69 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_32.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_33.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_33.jpg new file mode 100644 index 0000000..40df680 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_33.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_34.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_34.jpg new file mode 100644 index 0000000..b89c8bc Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_34.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_35.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_35.jpg new file mode 100644 index 0000000..9097cbf Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_35.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_36.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_36.jpg new file mode 100644 index 0000000..84d14b9 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_36.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_37.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_37.jpg new file mode 100644 index 0000000..33f0440 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_37.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_38.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_38.jpg new file mode 100644 index 0000000..c084eb8 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_38.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_39.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_39.jpg new file mode 100644 index 0000000..34c2238 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_39.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_4.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_4.jpg new file mode 100644 index 0000000..3683135 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_4.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_40.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_40.jpg new file mode 100644 index 0000000..9a1ae87 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_40.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_41.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_41.jpg new file mode 100644 index 0000000..4e28488 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_41.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_42.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_42.jpg new file mode 100644 index 0000000..9dbb970 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_42.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_43.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_43.jpg new file mode 100644 index 0000000..eb65e83 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_43.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_44.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_44.jpg new file mode 100644 index 0000000..f4aa754 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_44.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_45.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_45.jpg new file mode 100644 index 0000000..366179b Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_45.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_46.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_46.jpg new file mode 100644 index 0000000..77cf3cc Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_46.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_47.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_47.jpg new file mode 100644 index 0000000..8cb424d Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_47.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_48.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_48.jpg new file mode 100644 index 0000000..602f80a Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_48.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_49.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_49.jpg new file mode 100644 index 0000000..d1f3bd6 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_49.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_5.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_5.jpg new file mode 100644 index 0000000..daab303 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_5.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_50.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_50.jpg new file mode 100644 index 0000000..b1e3f73 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_50.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_51.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_51.jpg new file mode 100644 index 0000000..3fed427 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_51.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_52.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_52.jpg new file mode 100644 index 0000000..fb25ce4 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_52.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_53.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_53.jpg new file mode 100644 index 0000000..f961783 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_53.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_54.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_54.jpg new file mode 100644 index 0000000..4bc9835 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_54.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_55.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_55.jpg new file mode 100644 index 0000000..f3210ed Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_55.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_56.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_56.jpg new file mode 100644 index 0000000..a1c473b Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_56.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_57.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_57.jpg new file mode 100644 index 0000000..eab8015 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_57.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_58.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_58.jpg new file mode 100644 index 0000000..7620c7f Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_58.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_59.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_59.jpg new file mode 100644 index 0000000..e6fb2ac Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_59.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_6.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_6.jpg new file mode 100644 index 0000000..12944b6 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_6.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_60.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_60.jpg new file mode 100644 index 0000000..9b4b9b4 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_60.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_61.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_61.jpg new file mode 100644 index 0000000..f8d5610 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_61.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_62.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_62.jpg new file mode 100644 index 0000000..744457b Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_62.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_63.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_63.jpg new file mode 100644 index 0000000..747c347 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_63.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_64.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_64.jpg new file mode 100644 index 0000000..46a998f Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_64.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_65.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_65.jpg new file mode 100644 index 0000000..f806099 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_65.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_66.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_66.jpg new file mode 100644 index 0000000..d3c0918 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_66.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_67.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_67.jpg new file mode 100644 index 0000000..ed18a80 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_67.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_68.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_68.jpg new file mode 100644 index 0000000..b51ea09 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_68.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_69.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_69.jpg new file mode 100644 index 0000000..bb8b454 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_69.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_7.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_7.jpg new file mode 100644 index 0000000..c58d078 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_7.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_70.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_70.jpg new file mode 100644 index 0000000..2dcb39c Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_70.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_71.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_71.jpg new file mode 100644 index 0000000..cbe3fdd Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_71.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_72.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_72.jpg new file mode 100644 index 0000000..3841f98 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_72.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_73.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_73.jpg new file mode 100644 index 0000000..9affb1e Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_73.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_74.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_74.jpg new file mode 100644 index 0000000..d316a21 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_74.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_75.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_75.jpg new file mode 100644 index 0000000..8ffcf73 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_75.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_76.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_76.jpg new file mode 100644 index 0000000..9094a3b Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_76.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_77.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_77.jpg new file mode 100644 index 0000000..32ce005 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_77.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_78.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_78.jpg new file mode 100644 index 0000000..4e65ce8 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_78.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_79.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_79.jpg new file mode 100644 index 0000000..5bc1324 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_79.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_8.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_8.jpg new file mode 100644 index 0000000..5e1fa89 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_8.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_80.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_80.jpg new file mode 100644 index 0000000..a6b1605 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_80.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_81.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_81.jpg new file mode 100644 index 0000000..4bdf0ed Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_81.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_82.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_82.jpg new file mode 100644 index 0000000..bd27355 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_82.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_83.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_83.jpg new file mode 100644 index 0000000..9b55e9f Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_83.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_84.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_84.jpg new file mode 100644 index 0000000..6a05dc1 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_84.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_85.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_85.jpg new file mode 100644 index 0000000..ea64c56 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_85.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_86.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_86.jpg new file mode 100644 index 0000000..3b0ee17 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_86.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_87.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_87.jpg new file mode 100644 index 0000000..c8b7cc2 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_87.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_88.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_88.jpg new file mode 100644 index 0000000..72543cc Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_88.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_89.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_89.jpg new file mode 100644 index 0000000..006b817 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_89.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_9.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_9.jpg new file mode 100644 index 0000000..b66b67d Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_9.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_90.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_90.jpg new file mode 100644 index 0000000..a4093c4 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_90.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_91.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_91.jpg new file mode 100644 index 0000000..30b547e Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_91.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_92.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_92.jpg new file mode 100644 index 0000000..c15bdf1 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_92.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_93.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_93.jpg new file mode 100644 index 0000000..e63864d Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_93.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_94.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_94.jpg new file mode 100644 index 0000000..0a9363e Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_94.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_95.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_95.jpg new file mode 100644 index 0000000..9a24cb2 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_95.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_96.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_96.jpg new file mode 100644 index 0000000..76ac830 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_96.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_97.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_97.jpg new file mode 100644 index 0000000..8e54420 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_97.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_98.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_98.jpg new file mode 100644 index 0000000..132c92d Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_98.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/face_images_100/test_99.jpg b/Tooling/model/facenet_pytorch/custom/face_images_100/test_99.jpg new file mode 100644 index 0000000..6a2cfc5 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/face_images_100/test_99.jpg differ diff --git a/Tooling/model/facenet_pytorch/custom/temp.png b/Tooling/model/facenet_pytorch/custom/temp.png new file mode 100644 index 0000000..35089b9 Binary files /dev/null and b/Tooling/model/facenet_pytorch/custom/temp.png differ diff --git a/Tooling/model/facenet_pytorch/custom/test2.py b/Tooling/model/facenet_pytorch/custom/test2.py new file mode 100644 index 0000000..67b2f56 --- /dev/null +++ b/Tooling/model/facenet_pytorch/custom/test2.py @@ -0,0 +1,59 @@ +# importing libraries +from facenet_pytorch import MTCNN, InceptionResnetV1 +import torch +from torchvision import datasets +from torch.utils.data import DataLoader +from PIL import Image + +mtcnn = MTCNN(image_size=240, margin=0, min_face_size=20) # initializing mtcnn for face detection +resnet = InceptionResnetV1(pretrained='vggface2').eval() # initializing resnet for face img to embeding conversion + +dataset=datasets.ImageFolder('../data/test_images/') # photos folder path +idx_to_class = {i:c for c,i in dataset.class_to_idx.items()} # accessing names of peoples from folder names + +def collate_fn(x): + return x[0] + +loader = DataLoader(dataset, collate_fn=collate_fn) + +#face_list = [] # list of cropped faces from photos folder +#name_list = [] # list of names corrospoing to cropped photos +#embedding_list = [] # list of embeding matrix after conversion from cropped faces to embedding matrix using resnet + +#for img, idx in loader: +# face, prob = mtcnn(img, return_prob=True) +# if face is not None and prob>0.90: # if face detected and porbability > 90% +# emb = resnet(face.unsqueeze(0)) # passing cropped face into resnet model to get embedding matrix +# embedding_list.append(emb.detach()) # resulten embedding matrix is stored in a list +# name_list.append(idx_to_class[idx]) # names are stored in a list +# +# +#data = [embedding_list, name_list] +#torch.save(data, 'data.pt') # saving data.pt file + +def face_match(img_path, data_path): # img_path= location of photo, data_path= location of data.pt + # getting embedding matrix of the given img + img = Image.open(img_path) + face, prob = mtcnn(img, return_prob=True) # returns cropped face and probability + emb = resnet(face.unsqueeze(0)).detach() # detech is to make required gradient false + + saved_data = torch.load('data.pt') # loading data.pt file + embedding_list = saved_data[0] # getting embedding data + name_list = saved_data[1] # getting list of names + dist_list = [] # list of matched distances, minimum distance is used to identify the person + + for idx, emb_db in enumerate(embedding_list): + dist = torch.dist(emb, emb_db).item() + dist_list.append(dist) + + idx_min = dist_list.index(min(dist_list)) + return (name_list[idx_min], min(dist_list)) + + +#result = face_match('../data/test_images/angelina_jolie/1.jpg', 'data.pt') +result = face_match('face_images_100/test_1.jpg', 'data.pt') +#result = face_match('test_jolie.jpg', 'data.pt') +#result = face_match('test_paul.jpg', 'data.pt') + +print('Face matched with: ',result[0], 'With distance: ',result[1]) + diff --git a/Tooling/model/facenet_pytorch/custom/travis_test.py b/Tooling/model/facenet_pytorch/custom/travis_test.py new file mode 100644 index 0000000..47d503c --- /dev/null +++ b/Tooling/model/facenet_pytorch/custom/travis_test.py @@ -0,0 +1,88 @@ +from PIL import Image, ImageDraw +import torch +from torch.utils.data import DataLoader +from torchvision import transforms, datasets +import numpy as np +#import pandas as pd +from time import time +import sys, os +import glob + +from facenet_pytorch import MTCNN, InceptionResnetV1 + +# #### TEST MTCNN #### +# mtcnn = MTCNN() # Using default values for size and margin # AW +# resnet = InceptionResnetV1(pretrained='vggface2').eval() +# img = Image.open("../data/test_images/angelina_jolie/1.jpg") +# img_cropped = mtcnn(img, save_path="./temp.png") +# img_embedding = resnet(img_cropped.unsqueeze(0)) +# +# resnet.classify = True +# img_probs = resnet(img_cropped.unsqueeze(0)) +# print(img_probs) +# print(img_probs.shape) +# +# +# # Prediction output +# idx_to_class = {i:c for c,i in dataset.class_to_idx.items()} # accessing names of peoples from folder names +# +mtcnn = MTCNN(image_size=240, margin=0, min_face_size=20) # initializing mtcnn for face detection +resnet = InceptionResnetV1(pretrained='vggface2').eval() # initializing resnet for face img to embeding conversion +print("1") +dataset=datasets.ImageFolder('../data/test_images/') # photos folder path +idx_to_class = {i:c for c,i in dataset.class_to_idx.items()} # accessing names of peoples from folder names + +print("2") +def collate_fn(x): + return x[0] + +loader = DataLoader(dataset, collate_fn=collate_fn) + +face_list = [] # list of cropped faces from photos folder +name_list = [] # list of names corrospoing to cropped photos +embedding_list = [] # list of embeding matrix after conversion from cropped faces to embedding matrix using resnet + +print("3") +for img, idx in loader: + face, prob = mtcnn(img, return_prob=True) + if face is not None and prob>0.90: # if face detected and porbability > 90% + emb = resnet(face.unsqueeze(0)) # passing cropped face into resnet model to get embedding matrix + embedding_list.append(emb.detach()) # resulten embedding matrix is stored in a list + name_list.append(idx_to_class[idx]) # names are stored in a list + + +print("4") + + +data = [embedding_list, name_list] +torch.save(data, 'data.pt') # saving data.pt file + + + +def face_match(img_path, data_path): # img_path= location of photo, data_path= location of data.pt + # getting embedding matrix of the given img + img = Image.open(img_path) + face, prob = mtcnn(img, return_prob=True) # returns cropped face and probability + emb = resnet(face.unsqueeze(0)).detach() # detech is to make required gradient false + + saved_data = torch.load('data.pt') # loading data.pt file + embedding_list = saved_data[0] # getting embedding data + name_list = saved_data[1] # getting list of names + dist_list = [] # list of matched distances, minimum distance is used to identify the person + + for idx, emb_db in enumerate(embedding_list): + dist = torch.dist(emb, emb_db).item() + dist_list.append(dist) + + idx_min = dist_list.index(min(dist_list)) + return (name_list[idx_min], min(dist_list)) + + +result = face_match('../data/test_images/angelina_jolie/1.jpg', 'data.pt') + +print('Face matched with: ',result[0], 'With distance: ',result[1]) + + + + + diff --git a/Tooling/model/facenet_pytorch/data/.gitignore b/Tooling/model/facenet_pytorch/data/.gitignore new file mode 100644 index 0000000..832aeb8 --- /dev/null +++ b/Tooling/model/facenet_pytorch/data/.gitignore @@ -0,0 +1,3 @@ +2018* +*.json +profile.txt diff --git a/Tooling/model/facenet_pytorch/data/facenet-pytorch-banner.png b/Tooling/model/facenet_pytorch/data/facenet-pytorch-banner.png new file mode 100644 index 0000000..fee9118 Binary files /dev/null and b/Tooling/model/facenet_pytorch/data/facenet-pytorch-banner.png differ diff --git a/Tooling/model/facenet_pytorch/data/multiface.jpg b/Tooling/model/facenet_pytorch/data/multiface.jpg new file mode 100644 index 0000000..c0571ef Binary files /dev/null and b/Tooling/model/facenet_pytorch/data/multiface.jpg differ diff --git a/Tooling/model/facenet_pytorch/data/multiface_detected.png b/Tooling/model/facenet_pytorch/data/multiface_detected.png new file mode 100644 index 0000000..5ba8f6d Binary files /dev/null and b/Tooling/model/facenet_pytorch/data/multiface_detected.png differ diff --git a/Tooling/model/facenet_pytorch/data/onet.pt b/Tooling/model/facenet_pytorch/data/onet.pt new file mode 100644 index 0000000..367bdbe Binary files /dev/null and b/Tooling/model/facenet_pytorch/data/onet.pt differ diff --git a/Tooling/model/facenet_pytorch/data/pnet.pt b/Tooling/model/facenet_pytorch/data/pnet.pt new file mode 100644 index 0000000..b411873 Binary files /dev/null and b/Tooling/model/facenet_pytorch/data/pnet.pt differ diff --git a/Tooling/model/facenet_pytorch/data/rnet.pt b/Tooling/model/facenet_pytorch/data/rnet.pt new file mode 100644 index 0000000..e7dddc4 Binary files /dev/null and b/Tooling/model/facenet_pytorch/data/rnet.pt differ diff --git a/Tooling/model/facenet_pytorch/data/test_images/angelina_jolie/1.jpg b/Tooling/model/facenet_pytorch/data/test_images/angelina_jolie/1.jpg new file mode 100644 index 0000000..9ca6a5a Binary files /dev/null and b/Tooling/model/facenet_pytorch/data/test_images/angelina_jolie/1.jpg differ diff --git a/Tooling/model/facenet_pytorch/data/test_images/bradley_cooper/1.jpg b/Tooling/model/facenet_pytorch/data/test_images/bradley_cooper/1.jpg new file mode 100644 index 0000000..edf9fdc Binary files /dev/null and b/Tooling/model/facenet_pytorch/data/test_images/bradley_cooper/1.jpg differ diff --git a/Tooling/model/facenet_pytorch/data/test_images/kate_siegel/1.jpg b/Tooling/model/facenet_pytorch/data/test_images/kate_siegel/1.jpg new file mode 100644 index 0000000..c7af3eb Binary files /dev/null and b/Tooling/model/facenet_pytorch/data/test_images/kate_siegel/1.jpg differ diff --git a/Tooling/model/facenet_pytorch/data/test_images/paul_rudd/1.jpg b/Tooling/model/facenet_pytorch/data/test_images/paul_rudd/1.jpg new file mode 100644 index 0000000..dee6499 Binary files /dev/null and b/Tooling/model/facenet_pytorch/data/test_images/paul_rudd/1.jpg differ diff --git a/Tooling/model/facenet_pytorch/data/test_images/shea_whigham/1.jpg b/Tooling/model/facenet_pytorch/data/test_images/shea_whigham/1.jpg new file mode 100644 index 0000000..be3af6e Binary files /dev/null and b/Tooling/model/facenet_pytorch/data/test_images/shea_whigham/1.jpg differ diff --git a/Tooling/model/facenet_pytorch/data/test_images_aligned/angelina_jolie/1.png b/Tooling/model/facenet_pytorch/data/test_images_aligned/angelina_jolie/1.png new file mode 100644 index 0000000..645f538 Binary files /dev/null and b/Tooling/model/facenet_pytorch/data/test_images_aligned/angelina_jolie/1.png differ diff --git a/Tooling/model/facenet_pytorch/data/test_images_aligned/bradley_cooper/1.png b/Tooling/model/facenet_pytorch/data/test_images_aligned/bradley_cooper/1.png new file mode 100644 index 0000000..3e7830b Binary files /dev/null and b/Tooling/model/facenet_pytorch/data/test_images_aligned/bradley_cooper/1.png differ diff --git a/Tooling/model/facenet_pytorch/data/test_images_aligned/kate_siegel/1.png b/Tooling/model/facenet_pytorch/data/test_images_aligned/kate_siegel/1.png new file mode 100644 index 0000000..959c32f Binary files /dev/null and b/Tooling/model/facenet_pytorch/data/test_images_aligned/kate_siegel/1.png differ diff --git a/Tooling/model/facenet_pytorch/data/test_images_aligned/paul_rudd/1.png b/Tooling/model/facenet_pytorch/data/test_images_aligned/paul_rudd/1.png new file mode 100644 index 0000000..3d95ba6 Binary files /dev/null and b/Tooling/model/facenet_pytorch/data/test_images_aligned/paul_rudd/1.png differ diff --git a/Tooling/model/facenet_pytorch/data/test_images_aligned/shea_whigham/1.png b/Tooling/model/facenet_pytorch/data/test_images_aligned/shea_whigham/1.png new file mode 100644 index 0000000..9c67fc2 Binary files /dev/null and b/Tooling/model/facenet_pytorch/data/test_images_aligned/shea_whigham/1.png differ diff --git a/Tooling/model/facenet_pytorch/examples/face_tracking.ipynb b/Tooling/model/facenet_pytorch/examples/face_tracking.ipynb new file mode 100644 index 0000000..06d4ed1 --- /dev/null +++ b/Tooling/model/facenet_pytorch/examples/face_tracking.ipynb @@ -0,0 +1,231 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Face tracking pipeline\n", + "\n", + "The following example illustrates how to use the `facenet_pytorch` python package to perform face detection and tracking on an image dataset using MTCNN." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from facenet_pytorch import MTCNN\n", + "import torch\n", + "import numpy as np\n", + "import mmcv, cv2\n", + "from PIL import Image, ImageDraw\n", + "from IPython import display" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Determine if an nvidia GPU is available" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Running on device: cuda:0\n" + ] + } + ], + "source": [ + "device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')\n", + "print('Running on device: {}'.format(device))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Define MTCNN module\n", + "\n", + "Note that, since MTCNN is a collection of neural nets and other code, the device must be passed in the following way to enable copying of objects when needed internally.\n", + "\n", + "See `help(MTCNN)` for more details." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "mtcnn = MTCNN(keep_all=True, device=device)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Get a sample video\n", + "\n", + "We begin by loading a video with some faces in it. The `mmcv` PyPI package by mmlabs is used to read the video frames (it can be installed with `pip install mmcv`). Frames are then converted to PIL images." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "video = mmcv.VideoReader('video.mp4')\n", + "frames = [Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)) for frame in video]\n", + "\n", + "display.Video('video.mp4', width=640)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Run video through MTCNN\n", + "\n", + "We iterate through each frame, detect faces, and draw their bounding boxes on the video frames." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Tracking frame: 105\n", + "Done\n" + ] + } + ], + "source": [ + "frames_tracked = []\n", + "for i, frame in enumerate(frames):\n", + " print('\\rTracking frame: {}'.format(i + 1), end='')\n", + " \n", + " # Detect faces\n", + " boxes, _ = mtcnn.detect(frame)\n", + " \n", + " # Draw faces\n", + " frame_draw = frame.copy()\n", + " draw = ImageDraw.Draw(frame_draw)\n", + " for box in boxes:\n", + " draw.rectangle(box.tolist(), outline=(255, 0, 0), width=6)\n", + " \n", + " # Add to frame list\n", + " frames_tracked.append(frame_draw.resize((640, 360), Image.BILINEAR))\n", + "print('\\nDone')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Display detections" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "d = display.display(frames_tracked[0], display_id=True)\n", + "i = 1\n", + "try:\n", + " while True:\n", + " d.update(frames_tracked[i % len(frames_tracked)])\n", + " i += 1\n", + "except KeyboardInterrupt:\n", + " pass" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Save tracked video" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "dim = frames_tracked[0].size\n", + "fourcc = cv2.VideoWriter_fourcc(*'FMP4') \n", + "video_tracked = cv2.VideoWriter('video_tracked.mp4', fourcc, 25.0, dim)\n", + "for frame in frames_tracked:\n", + " video_tracked.write(cv2.cvtColor(np.array(frame), cv2.COLOR_RGB2BGR))\n", + "video_tracked.release()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Tooling/model/facenet_pytorch/examples/finetune.ipynb b/Tooling/model/facenet_pytorch/examples/finetune.ipynb new file mode 100644 index 0000000..4556684 --- /dev/null +++ b/Tooling/model/facenet_pytorch/examples/finetune.ipynb @@ -0,0 +1,279 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Face detection and recognition training pipeline\n", + "\n", + "The following example illustrates how to fine-tune an InceptionResnetV1 model on your own dataset. This will mostly follow standard pytorch training patterns." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from facenet_pytorch import MTCNN, InceptionResnetV1, fixed_image_standardization, training\n", + "import torch\n", + "from torch.utils.data import DataLoader, SubsetRandomSampler\n", + "from torch import optim\n", + "from torch.optim.lr_scheduler import MultiStepLR\n", + "from torch.utils.tensorboard import SummaryWriter\n", + "from torchvision import datasets, transforms\n", + "import numpy as np\n", + "import os" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Define run parameters\n", + "\n", + "The dataset should follow the VGGFace2/ImageNet-style directory layout. Modify `data_dir` to the location of the dataset on wish to finetune on." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "data_dir = '../data/test_images'\n", + "\n", + "batch_size = 32\n", + "epochs = 8\n", + "workers = 0 if os.name == 'nt' else 8" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Determine if an nvidia GPU is available" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')\n", + "print('Running on device: {}'.format(device))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Define MTCNN module\n", + "\n", + "See `help(MTCNN)` for more details." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "mtcnn = MTCNN(\n", + " image_size=160, margin=0, min_face_size=20,\n", + " thresholds=[0.6, 0.7, 0.7], factor=0.709, post_process=True,\n", + " device=device\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Perfom MTCNN facial detection\n", + "\n", + "Iterate through the DataLoader object and obtain cropped faces." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "dataset = datasets.ImageFolder(data_dir, transform=transforms.Resize((512, 512)))\n", + "dataset.samples = [\n", + " (p, p.replace(data_dir, data_dir + '_cropped'))\n", + " for p, _ in dataset.samples\n", + "]\n", + " \n", + "loader = DataLoader(\n", + " dataset,\n", + " num_workers=workers,\n", + " batch_size=batch_size,\n", + " collate_fn=training.collate_pil\n", + ")\n", + "\n", + "for i, (x, y) in enumerate(loader):\n", + " mtcnn(x, save_path=y)\n", + " print('\\rBatch {} of {}'.format(i + 1, len(loader)), end='')\n", + " \n", + "# Remove mtcnn to reduce GPU memory usage\n", + "del mtcnn" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Define Inception Resnet V1 module\n", + "\n", + "See `help(InceptionResnetV1)` for more details." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "resnet = InceptionResnetV1(\n", + " classify=True,\n", + " pretrained='vggface2',\n", + " num_classes=len(dataset.class_to_idx)\n", + ").to(device)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Define optimizer, scheduler, dataset, and dataloader" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "optimizer = optim.Adam(resnet.parameters(), lr=0.001)\n", + "scheduler = MultiStepLR(optimizer, [5, 10])\n", + "\n", + "trans = transforms.Compose([\n", + " np.float32,\n", + " transforms.ToTensor(),\n", + " fixed_image_standardization\n", + "])\n", + "dataset = datasets.ImageFolder(data_dir + '_cropped', transform=trans)\n", + "img_inds = np.arange(len(dataset))\n", + "np.random.shuffle(img_inds)\n", + "train_inds = img_inds[:int(0.8 * len(img_inds))]\n", + "val_inds = img_inds[int(0.8 * len(img_inds)):]\n", + "\n", + "train_loader = DataLoader(\n", + " dataset,\n", + " num_workers=workers,\n", + " batch_size=batch_size,\n", + " sampler=SubsetRandomSampler(train_inds)\n", + ")\n", + "val_loader = DataLoader(\n", + " dataset,\n", + " num_workers=workers,\n", + " batch_size=batch_size,\n", + " sampler=SubsetRandomSampler(val_inds)\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Define loss and evaluation functions" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "loss_fn = torch.nn.CrossEntropyLoss()\n", + "metrics = {\n", + " 'fps': training.BatchTimer(),\n", + " 'acc': training.accuracy\n", + "}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Train model" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "writer = SummaryWriter()\n", + "writer.iteration, writer.interval = 0, 10\n", + "\n", + "print('\\n\\nInitial')\n", + "print('-' * 10)\n", + "resnet.eval()\n", + "training.pass_epoch(\n", + " resnet, loss_fn, val_loader,\n", + " batch_metrics=metrics, show_running=True, device=device,\n", + " writer=writer\n", + ")\n", + "\n", + "for epoch in range(epochs):\n", + " print('\\nEpoch {}/{}'.format(epoch + 1, epochs))\n", + " print('-' * 10)\n", + "\n", + " resnet.train()\n", + " training.pass_epoch(\n", + " resnet, loss_fn, train_loader, optimizer, scheduler,\n", + " batch_metrics=metrics, show_running=True, device=device,\n", + " writer=writer\n", + " )\n", + "\n", + " resnet.eval()\n", + " training.pass_epoch(\n", + " resnet, loss_fn, val_loader,\n", + " batch_metrics=metrics, show_running=True, device=device,\n", + " writer=writer\n", + " )\n", + "\n", + "writer.close()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Tooling/model/facenet_pytorch/examples/infer.ipynb b/Tooling/model/facenet_pytorch/examples/infer.ipynb new file mode 100644 index 0000000..d36a056 --- /dev/null +++ b/Tooling/model/facenet_pytorch/examples/infer.ipynb @@ -0,0 +1,245 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Face detection and recognition inference pipeline\n", + "\n", + "The following example illustrates how to use the `facenet_pytorch` python package to perform face detection and recogition on an image dataset using an Inception Resnet V1 pretrained on the VGGFace2 dataset.\n", + "\n", + "The following Pytorch methods are included:\n", + "* Datasets\n", + "* Dataloaders\n", + "* GPU/CPU processing" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from facenet_pytorch import MTCNN, InceptionResnetV1\n", + "import torch\n", + "from torch.utils.data import DataLoader\n", + "from torchvision import datasets\n", + "import numpy as np\n", + "import pandas as pd\n", + "import os\n", + "\n", + "workers = 0 if os.name == 'nt' else 4" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Determine if an nvidia GPU is available" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Running on device: cuda:0\n" + ] + } + ], + "source": [ + "device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')\n", + "print('Running on device: {}'.format(device))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Define MTCNN module\n", + "\n", + "Default params shown for illustration, but not needed. Note that, since MTCNN is a collection of neural nets and other code, the device must be passed in the following way to enable copying of objects when needed internally.\n", + "\n", + "See `help(MTCNN)` for more details." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "mtcnn = MTCNN(\n", + " image_size=160, margin=0, min_face_size=20,\n", + " thresholds=[0.6, 0.7, 0.7], factor=0.709, post_process=True,\n", + " device=device\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Define Inception Resnet V1 module\n", + "\n", + "Set classify=True for pretrained classifier. For this example, we will use the model to output embeddings/CNN features. Note that for inference, it is important to set the model to `eval` mode.\n", + "\n", + "See `help(InceptionResnetV1)` for more details." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "resnet = InceptionResnetV1(pretrained='vggface2').eval().to(device)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Define a dataset and data loader\n", + "\n", + "We add the `idx_to_class` attribute to the dataset to enable easy recoding of label indices to identity names later one." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "def collate_fn(x):\n", + " return x[0]\n", + "\n", + "dataset = datasets.ImageFolder('../data/test_images')\n", + "dataset.idx_to_class = {i:c for c, i in dataset.class_to_idx.items()}\n", + "loader = DataLoader(dataset, collate_fn=collate_fn, num_workers=workers)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Perfom MTCNN facial detection\n", + "\n", + "Iterate through the DataLoader object and detect faces and associated detection probabilities for each. The `MTCNN` forward method returns images cropped to the detected face, if a face was detected. By default only a single detected face is returned - to have `MTCNN` return all detected faces, set `keep_all=True` when creating the MTCNN object above.\n", + "\n", + "To obtain bounding boxes rather than cropped face images, you can instead call the lower-level `mtcnn.detect()` function. See `help(mtcnn.detect)` for details." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Face detected with probability: 0.999957\n", + "Face detected with probability: 0.999927\n", + "Face detected with probability: 0.999662\n", + "Face detected with probability: 0.999873\n", + "Face detected with probability: 0.999991\n" + ] + } + ], + "source": [ + "aligned = []\n", + "names = []\n", + "for x, y in loader:\n", + " x_aligned, prob = mtcnn(x, return_prob=True)\n", + " if x_aligned is not None:\n", + " print('Face detected with probability: {:8f}'.format(prob))\n", + " aligned.append(x_aligned)\n", + " names.append(dataset.idx_to_class[y])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Calculate image embeddings\n", + "\n", + "MTCNN will return images of faces all the same size, enabling easy batch processing with the Resnet recognition module. Here, since we only have a few images, we build a single batch and perform inference on it. \n", + "\n", + "For real datasets, code should be modified to control batch sizes being passed to the Resnet, particularly if being processed on a GPU. For repeated testing, it is best to separate face detection (using MTCNN) from embedding or classification (using InceptionResnetV1), as calculation of cropped faces or bounding boxes can then be performed a single time and detected faces saved for future use." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "aligned = torch.stack(aligned).to(device)\n", + "embeddings = resnet(aligned).detach().cpu()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Print distance matrix for classes" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " angelina_jolie bradley_cooper kate_siegel paul_rudd \\\n", + "angelina_jolie 0.000000 1.344806 0.781201 1.425579 \n", + "bradley_cooper 1.344806 0.000000 1.256238 0.922126 \n", + "kate_siegel 0.781201 1.256238 0.000000 1.366423 \n", + "paul_rudd 1.425579 0.922126 1.366423 0.000000 \n", + "shea_whigham 1.448495 0.891145 1.416447 0.985438 \n", + "\n", + " shea_whigham \n", + "angelina_jolie 1.448495 \n", + "bradley_cooper 0.891145 \n", + "kate_siegel 1.416447 \n", + "paul_rudd 0.985438 \n", + "shea_whigham 0.000000 \n" + ] + } + ], + "source": [ + "dists = [[(e1 - e2).norm().item() for e2 in embeddings] for e1 in embeddings]\n", + "print(pd.DataFrame(dists, columns=names, index=names))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/Tooling/model/facenet_pytorch/examples/lfw_evaluate.ipynb b/Tooling/model/facenet_pytorch/examples/lfw_evaluate.ipynb new file mode 100644 index 0000000..7cde66e --- /dev/null +++ b/Tooling/model/facenet_pytorch/examples/lfw_evaluate.ipynb @@ -0,0 +1,522 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "### facenet-pytorch LFW evaluation\n", + "This notebook demonstrates how to evaluate performance against the LFW dataset." + ], + "metadata": { + "collapsed": false + } + }, + { + "cell_type": "code", + "execution_count": 1, + "outputs": [], + "source": [ + "from facenet_pytorch import MTCNN, InceptionResnetV1, fixed_image_standardization, training, extract_face\n", + "import torch\n", + "from torch.utils.data import DataLoader, SubsetRandomSampler, SequentialSampler\n", + "from torchvision import datasets, transforms\n", + "import numpy as np\n", + "import os" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 2, + "outputs": [], + "source": [ + "data_dir = 'data/lfw/lfw'\n", + "pairs_path = 'data/lfw/pairs.txt'\n", + "\n", + "batch_size = 16\n", + "epochs = 15\n", + "workers = 0 if os.name == 'nt' else 8" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 3, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Running on device: cuda:0\n" + ] + } + ], + "source": [ + "device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')\n", + "print('Running on device: {}'.format(device))" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 4, + "outputs": [], + "source": [ + "mtcnn = MTCNN(\n", + " image_size=160,\n", + " margin=14,\n", + " device=device,\n", + " selection_method='center_weighted_size'\n", + ")" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 5, + "outputs": [], + "source": [ + "# Define the data loader for the input set of images\n", + "orig_img_ds = datasets.ImageFolder(data_dir, transform=None)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 6, + "outputs": [], + "source": [ + "\n", + "# overwrites class labels in dataset with path so path can be used for saving output in mtcnn batches\n", + "orig_img_ds.samples = [\n", + " (p, p)\n", + " for p, _ in orig_img_ds.samples\n", + "]\n", + "\n", + "loader = DataLoader(\n", + " orig_img_ds,\n", + " num_workers=workers,\n", + " batch_size=batch_size,\n", + " collate_fn=training.collate_pil\n", + ")\n" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "crop_paths = []\n", + "box_probs = []\n", + "\n", + "for i, (x, b_paths) in enumerate(loader):\n", + " crops = [p.replace(data_dir, data_dir + '_cropped') for p in b_paths]\n", + " mtcnn(x, save_path=crops)\n", + " crop_paths.extend(crops)\n", + " print('\\rBatch {} of {}'.format(i + 1, len(loader)), end='')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "outputs": [], + "source": [ + "# Remove mtcnn to reduce GPU memory usage\n", + "del mtcnn\n", + "torch.cuda.empty_cache()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 9, + "outputs": [], + "source": [ + "# create dataset and data loaders from cropped images output from MTCNN\n", + "\n", + "trans = transforms.Compose([\n", + " np.float32,\n", + " transforms.ToTensor(),\n", + " fixed_image_standardization\n", + "])\n", + "\n", + "dataset = datasets.ImageFolder(data_dir + '_cropped', transform=trans)\n", + "\n", + "embed_loader = DataLoader(\n", + " dataset,\n", + " num_workers=workers,\n", + " batch_size=batch_size,\n", + " sampler=SequentialSampler(dataset)\n", + ")" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 10, + "outputs": [], + "source": [ + "# Load pretrained resnet model\n", + "resnet = InceptionResnetV1(\n", + " classify=False,\n", + " pretrained='vggface2'\n", + ").to(device)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 11, + "outputs": [], + "source": [ + "classes = []\n", + "embeddings = []\n", + "resnet.eval()\n", + "with torch.no_grad():\n", + " for xb, yb in embed_loader:\n", + " xb = xb.to(device)\n", + " b_embeddings = resnet(xb)\n", + " b_embeddings = b_embeddings.to('cpu').numpy()\n", + " classes.extend(yb.numpy())\n", + " embeddings.extend(b_embeddings)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 12, + "outputs": [], + "source": [ + "embeddings_dict = dict(zip(crop_paths,embeddings))\n", + "\n" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "markdown", + "source": [ + "#### Evaluate embeddings by using distance metrics to perform verification on the official LFW test set.\n", + "\n", + "The functions in the next block are copy pasted from `facenet.src.lfw`. Unfortunately that module has an absolute import from `facenet`, so can't be imported from the submodule\n", + "\n", + "added functionality to return false positive and false negatives" + ], + "metadata": { + "collapsed": false + } + }, + { + "cell_type": "code", + "execution_count": 13, + "outputs": [], + "source": [ + "from sklearn.model_selection import KFold\n", + "from scipy import interpolate\n", + "\n", + "# LFW functions taken from David Sandberg's FaceNet implementation\n", + "def distance(embeddings1, embeddings2, distance_metric=0):\n", + " if distance_metric==0:\n", + " # Euclidian distance\n", + " diff = np.subtract(embeddings1, embeddings2)\n", + " dist = np.sum(np.square(diff),1)\n", + " elif distance_metric==1:\n", + " # Distance based on cosine similarity\n", + " dot = np.sum(np.multiply(embeddings1, embeddings2), axis=1)\n", + " norm = np.linalg.norm(embeddings1, axis=1) * np.linalg.norm(embeddings2, axis=1)\n", + " similarity = dot / norm\n", + " dist = np.arccos(similarity) / math.pi\n", + " else:\n", + " raise 'Undefined distance metric %d' % distance_metric\n", + "\n", + " return dist\n", + "\n", + "def calculate_roc(thresholds, embeddings1, embeddings2, actual_issame, nrof_folds=10, distance_metric=0, subtract_mean=False):\n", + " assert(embeddings1.shape[0] == embeddings2.shape[0])\n", + " assert(embeddings1.shape[1] == embeddings2.shape[1])\n", + " nrof_pairs = min(len(actual_issame), embeddings1.shape[0])\n", + " nrof_thresholds = len(thresholds)\n", + " k_fold = KFold(n_splits=nrof_folds, shuffle=False)\n", + "\n", + " tprs = np.zeros((nrof_folds,nrof_thresholds))\n", + " fprs = np.zeros((nrof_folds,nrof_thresholds))\n", + " accuracy = np.zeros((nrof_folds))\n", + "\n", + " is_false_positive = []\n", + " is_false_negative = []\n", + "\n", + " indices = np.arange(nrof_pairs)\n", + "\n", + " for fold_idx, (train_set, test_set) in enumerate(k_fold.split(indices)):\n", + " if subtract_mean:\n", + " mean = np.mean(np.concatenate([embeddings1[train_set], embeddings2[train_set]]), axis=0)\n", + " else:\n", + " mean = 0.0\n", + " dist = distance(embeddings1-mean, embeddings2-mean, distance_metric)\n", + "\n", + " # Find the best threshold for the fold\n", + " acc_train = np.zeros((nrof_thresholds))\n", + " for threshold_idx, threshold in enumerate(thresholds):\n", + " _, _, acc_train[threshold_idx], _ ,_ = calculate_accuracy(threshold, dist[train_set], actual_issame[train_set])\n", + " best_threshold_index = np.argmax(acc_train)\n", + " for threshold_idx, threshold in enumerate(thresholds):\n", + " tprs[fold_idx,threshold_idx], fprs[fold_idx,threshold_idx], _, _, _ = calculate_accuracy(threshold, dist[test_set], actual_issame[test_set])\n", + " _, _, accuracy[fold_idx], is_fp, is_fn = calculate_accuracy(thresholds[best_threshold_index], dist[test_set], actual_issame[test_set])\n", + "\n", + " tpr = np.mean(tprs,0)\n", + " fpr = np.mean(fprs,0)\n", + " is_false_positive.extend(is_fp)\n", + " is_false_negative.extend(is_fn)\n", + "\n", + " return tpr, fpr, accuracy, is_false_positive, is_false_negative\n", + "\n", + "def calculate_accuracy(threshold, dist, actual_issame):\n", + " predict_issame = np.less(dist, threshold)\n", + " tp = np.sum(np.logical_and(predict_issame, actual_issame))\n", + " fp = np.sum(np.logical_and(predict_issame, np.logical_not(actual_issame)))\n", + " tn = np.sum(np.logical_and(np.logical_not(predict_issame), np.logical_not(actual_issame)))\n", + " fn = np.sum(np.logical_and(np.logical_not(predict_issame), actual_issame))\n", + "\n", + " is_fp = np.logical_and(predict_issame, np.logical_not(actual_issame))\n", + " is_fn = np.logical_and(np.logical_not(predict_issame), actual_issame)\n", + "\n", + " tpr = 0 if (tp+fn==0) else float(tp) / float(tp+fn)\n", + " fpr = 0 if (fp+tn==0) else float(fp) / float(fp+tn)\n", + " acc = float(tp+tn)/dist.size\n", + " return tpr, fpr, acc, is_fp, is_fn\n", + "\n", + "def calculate_val(thresholds, embeddings1, embeddings2, actual_issame, far_target, nrof_folds=10, distance_metric=0, subtract_mean=False):\n", + " assert(embeddings1.shape[0] == embeddings2.shape[0])\n", + " assert(embeddings1.shape[1] == embeddings2.shape[1])\n", + " nrof_pairs = min(len(actual_issame), embeddings1.shape[0])\n", + " nrof_thresholds = len(thresholds)\n", + " k_fold = KFold(n_splits=nrof_folds, shuffle=False)\n", + "\n", + " val = np.zeros(nrof_folds)\n", + " far = np.zeros(nrof_folds)\n", + "\n", + " indices = np.arange(nrof_pairs)\n", + "\n", + " for fold_idx, (train_set, test_set) in enumerate(k_fold.split(indices)):\n", + " if subtract_mean:\n", + " mean = np.mean(np.concatenate([embeddings1[train_set], embeddings2[train_set]]), axis=0)\n", + " else:\n", + " mean = 0.0\n", + " dist = distance(embeddings1-mean, embeddings2-mean, distance_metric)\n", + "\n", + " # Find the threshold that gives FAR = far_target\n", + " far_train = np.zeros(nrof_thresholds)\n", + " for threshold_idx, threshold in enumerate(thresholds):\n", + " _, far_train[threshold_idx] = calculate_val_far(threshold, dist[train_set], actual_issame[train_set])\n", + " if np.max(far_train)>=far_target:\n", + " f = interpolate.interp1d(far_train, thresholds, kind='slinear')\n", + " threshold = f(far_target)\n", + " else:\n", + " threshold = 0.0\n", + "\n", + " val[fold_idx], far[fold_idx] = calculate_val_far(threshold, dist[test_set], actual_issame[test_set])\n", + "\n", + " val_mean = np.mean(val)\n", + " far_mean = np.mean(far)\n", + " val_std = np.std(val)\n", + " return val_mean, val_std, far_mean\n", + "\n", + "def calculate_val_far(threshold, dist, actual_issame):\n", + " predict_issame = np.less(dist, threshold)\n", + " true_accept = np.sum(np.logical_and(predict_issame, actual_issame))\n", + " false_accept = np.sum(np.logical_and(predict_issame, np.logical_not(actual_issame)))\n", + " n_same = np.sum(actual_issame)\n", + " n_diff = np.sum(np.logical_not(actual_issame))\n", + " val = float(true_accept) / float(n_same)\n", + " far = float(false_accept) / float(n_diff)\n", + " return val, far\n", + "\n", + "\n", + "\n", + "def evaluate(embeddings, actual_issame, nrof_folds=10, distance_metric=0, subtract_mean=False):\n", + " # Calculate evaluation metrics\n", + " thresholds = np.arange(0, 4, 0.01)\n", + " embeddings1 = embeddings[0::2]\n", + " embeddings2 = embeddings[1::2]\n", + " tpr, fpr, accuracy, fp, fn = calculate_roc(thresholds, embeddings1, embeddings2,\n", + " np.asarray(actual_issame), nrof_folds=nrof_folds, distance_metric=distance_metric, subtract_mean=subtract_mean)\n", + " thresholds = np.arange(0, 4, 0.001)\n", + " val, val_std, far = calculate_val(thresholds, embeddings1, embeddings2,\n", + " np.asarray(actual_issame), 1e-3, nrof_folds=nrof_folds, distance_metric=distance_metric, subtract_mean=subtract_mean)\n", + " return tpr, fpr, accuracy, val, val_std, far, fp, fn\n", + "\n", + "def add_extension(path):\n", + " if os.path.exists(path+'.jpg'):\n", + " return path+'.jpg'\n", + " elif os.path.exists(path+'.png'):\n", + " return path+'.png'\n", + " else:\n", + " raise RuntimeError('No file \"%s\" with extension png or jpg.' % path)\n", + "\n", + "def get_paths(lfw_dir, pairs):\n", + " nrof_skipped_pairs = 0\n", + " path_list = []\n", + " issame_list = []\n", + " for pair in pairs:\n", + " if len(pair) == 3:\n", + " path0 = add_extension(os.path.join(lfw_dir, pair[0], pair[0] + '_' + '%04d' % int(pair[1])))\n", + " path1 = add_extension(os.path.join(lfw_dir, pair[0], pair[0] + '_' + '%04d' % int(pair[2])))\n", + " issame = True\n", + " elif len(pair) == 4:\n", + " path0 = add_extension(os.path.join(lfw_dir, pair[0], pair[0] + '_' + '%04d' % int(pair[1])))\n", + " path1 = add_extension(os.path.join(lfw_dir, pair[2], pair[2] + '_' + '%04d' % int(pair[3])))\n", + " issame = False\n", + " if os.path.exists(path0) and os.path.exists(path1): # Only add the pair if both paths exist\n", + " path_list += (path0,path1)\n", + " issame_list.append(issame)\n", + " else:\n", + " nrof_skipped_pairs += 1\n", + " if nrof_skipped_pairs>0:\n", + " print('Skipped %d image pairs' % nrof_skipped_pairs)\n", + "\n", + " return path_list, issame_list\n", + "\n", + "def read_pairs(pairs_filename):\n", + " pairs = []\n", + " with open(pairs_filename, 'r') as f:\n", + " for line in f.readlines()[1:]:\n", + " pair = line.strip().split()\n", + " pairs.append(pair)\n", + " return np.array(pairs, dtype=object)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 14, + "outputs": [], + "source": [ + "pairs = read_pairs(pairs_path)\n", + "path_list, issame_list = get_paths(data_dir+'_cropped', pairs)\n", + "embeddings = np.array([embeddings_dict[path] for path in path_list])\n", + "\n", + "tpr, fpr, accuracy, val, val_std, far, fp, fn = evaluate(embeddings, issame_list)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 15, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0.995 0.995 0.99166667 0.99 0.99 0.99666667\n", + " 0.99 0.995 0.99666667 0.99666667]\n" + ] + }, + { + "data": { + "text/plain": "0.9936666666666666" + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "print(accuracy)\n", + "np.mean(accuracy)\n", + "\n" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/Tooling/model/facenet_pytorch/examples/performance-comparison.png b/Tooling/model/facenet_pytorch/examples/performance-comparison.png new file mode 100644 index 0000000..593db86 Binary files /dev/null and b/Tooling/model/facenet_pytorch/examples/performance-comparison.png differ diff --git a/Tooling/model/facenet_pytorch/examples/tracked.gif b/Tooling/model/facenet_pytorch/examples/tracked.gif new file mode 100644 index 0000000..7b3861f Binary files /dev/null and b/Tooling/model/facenet_pytorch/examples/tracked.gif differ diff --git a/Tooling/model/facenet_pytorch/examples/video.mp4 b/Tooling/model/facenet_pytorch/examples/video.mp4 new file mode 100644 index 0000000..b963f40 Binary files /dev/null and b/Tooling/model/facenet_pytorch/examples/video.mp4 differ diff --git a/Tooling/model/facenet_pytorch/examples/video_tracked.mp4 b/Tooling/model/facenet_pytorch/examples/video_tracked.mp4 new file mode 100644 index 0000000..b23a25c Binary files /dev/null and b/Tooling/model/facenet_pytorch/examples/video_tracked.mp4 differ diff --git a/Tooling/model/facenet_pytorch/models/inception_resnet_v1.py b/Tooling/model/facenet_pytorch/models/inception_resnet_v1.py new file mode 100644 index 0000000..3b7de0d --- /dev/null +++ b/Tooling/model/facenet_pytorch/models/inception_resnet_v1.py @@ -0,0 +1,340 @@ +import os +import requests +from requests.adapters import HTTPAdapter + +import torch +from torch import nn +from torch.nn import functional as F + +from .utils.download import download_url_to_file + + +class BasicConv2d(nn.Module): + + def __init__(self, in_planes, out_planes, kernel_size, stride, padding=0): + super().__init__() + self.conv = nn.Conv2d( + in_planes, out_planes, + kernel_size=kernel_size, stride=stride, + padding=padding, bias=False + ) # verify bias false + self.bn = nn.BatchNorm2d( + out_planes, + eps=0.001, # value found in tensorflow + momentum=0.1, # default pytorch value + affine=True + ) + self.relu = nn.ReLU(inplace=False) + + def forward(self, x): + x = self.conv(x) + x = self.bn(x) + x = self.relu(x) + return x + + +class Block35(nn.Module): + + def __init__(self, scale=1.0): + super().__init__() + + self.scale = scale + + self.branch0 = BasicConv2d(256, 32, kernel_size=1, stride=1) + + self.branch1 = nn.Sequential( + BasicConv2d(256, 32, kernel_size=1, stride=1), + BasicConv2d(32, 32, kernel_size=3, stride=1, padding=1) + ) + + self.branch2 = nn.Sequential( + BasicConv2d(256, 32, kernel_size=1, stride=1), + BasicConv2d(32, 32, kernel_size=3, stride=1, padding=1), + BasicConv2d(32, 32, kernel_size=3, stride=1, padding=1) + ) + + self.conv2d = nn.Conv2d(96, 256, kernel_size=1, stride=1) + self.relu = nn.ReLU(inplace=False) + + def forward(self, x): + x0 = self.branch0(x) + x1 = self.branch1(x) + x2 = self.branch2(x) + out = torch.cat((x0, x1, x2), 1) + out = self.conv2d(out) + out = out * self.scale + x + out = self.relu(out) + return out + + +class Block17(nn.Module): + + def __init__(self, scale=1.0): + super().__init__() + + self.scale = scale + + self.branch0 = BasicConv2d(896, 128, kernel_size=1, stride=1) + + self.branch1 = nn.Sequential( + BasicConv2d(896, 128, kernel_size=1, stride=1), + BasicConv2d(128, 128, kernel_size=(1,7), stride=1, padding=(0,3)), + BasicConv2d(128, 128, kernel_size=(7,1), stride=1, padding=(3,0)) + ) + + self.conv2d = nn.Conv2d(256, 896, kernel_size=1, stride=1) + self.relu = nn.ReLU(inplace=False) + + def forward(self, x): + x0 = self.branch0(x) + x1 = self.branch1(x) + out = torch.cat((x0, x1), 1) + out = self.conv2d(out) + out = out * self.scale + x + out = self.relu(out) + return out + + +class Block8(nn.Module): + + def __init__(self, scale=1.0, noReLU=False): + super().__init__() + + self.scale = scale + self.noReLU = noReLU + + self.branch0 = BasicConv2d(1792, 192, kernel_size=1, stride=1) + + self.branch1 = nn.Sequential( + BasicConv2d(1792, 192, kernel_size=1, stride=1), + BasicConv2d(192, 192, kernel_size=(1,3), stride=1, padding=(0,1)), + BasicConv2d(192, 192, kernel_size=(3,1), stride=1, padding=(1,0)) + ) + + self.conv2d = nn.Conv2d(384, 1792, kernel_size=1, stride=1) + if not self.noReLU: + self.relu = nn.ReLU(inplace=False) + + def forward(self, x): + x0 = self.branch0(x) + x1 = self.branch1(x) + out = torch.cat((x0, x1), 1) + out = self.conv2d(out) + out = out * self.scale + x + if not self.noReLU: + out = self.relu(out) + return out + + +class Mixed_6a(nn.Module): + + def __init__(self): + super().__init__() + + self.branch0 = BasicConv2d(256, 384, kernel_size=3, stride=2) + + self.branch1 = nn.Sequential( + BasicConv2d(256, 192, kernel_size=1, stride=1), + BasicConv2d(192, 192, kernel_size=3, stride=1, padding=1), + BasicConv2d(192, 256, kernel_size=3, stride=2) + ) + + self.branch2 = nn.MaxPool2d(3, stride=2) + + def forward(self, x): + x0 = self.branch0(x) + x1 = self.branch1(x) + x2 = self.branch2(x) + out = torch.cat((x0, x1, x2), 1) + return out + + +class Mixed_7a(nn.Module): + + def __init__(self): + super().__init__() + + self.branch0 = nn.Sequential( + BasicConv2d(896, 256, kernel_size=1, stride=1), + BasicConv2d(256, 384, kernel_size=3, stride=2) + ) + + self.branch1 = nn.Sequential( + BasicConv2d(896, 256, kernel_size=1, stride=1), + BasicConv2d(256, 256, kernel_size=3, stride=2) + ) + + self.branch2 = nn.Sequential( + BasicConv2d(896, 256, kernel_size=1, stride=1), + BasicConv2d(256, 256, kernel_size=3, stride=1, padding=1), + BasicConv2d(256, 256, kernel_size=3, stride=2) + ) + + self.branch3 = nn.MaxPool2d(3, stride=2) + + def forward(self, x): + x0 = self.branch0(x) + x1 = self.branch1(x) + x2 = self.branch2(x) + x3 = self.branch3(x) + out = torch.cat((x0, x1, x2, x3), 1) + return out + + +class InceptionResnetV1(nn.Module): + """Inception Resnet V1 model with optional loading of pretrained weights. + + Model parameters can be loaded based on pretraining on the VGGFace2 or CASIA-Webface + datasets. Pretrained state_dicts are automatically downloaded on model instantiation if + requested and cached in the torch cache. Subsequent instantiations use the cache rather than + redownloading. + + Keyword Arguments: + pretrained {str} -- Optional pretraining dataset. Either 'vggface2' or 'casia-webface'. + (default: {None}) + classify {bool} -- Whether the model should output classification probabilities or feature + embeddings. (default: {False}) + num_classes {int} -- Number of output classes. If 'pretrained' is set and num_classes not + equal to that used for the pretrained model, the final linear layer will be randomly + initialized. (default: {None}) + dropout_prob {float} -- Dropout probability. (default: {0.6}) + """ + def __init__(self, pretrained=None, classify=False, num_classes=None, dropout_prob=0.6, device=None): + super().__init__() + + # Set simple attributes + self.pretrained = pretrained + self.classify = classify + self.num_classes = num_classes + + if pretrained == 'vggface2': + tmp_classes = 8631 + elif pretrained == 'casia-webface': + tmp_classes = 10575 + elif pretrained is None and self.classify and self.num_classes is None: + raise Exception('If "pretrained" is not specified and "classify" is True, "num_classes" must be specified') + + + # Define layers + self.conv2d_1a = BasicConv2d(3, 32, kernel_size=3, stride=2) + self.conv2d_2a = BasicConv2d(32, 32, kernel_size=3, stride=1) + self.conv2d_2b = BasicConv2d(32, 64, kernel_size=3, stride=1, padding=1) + self.maxpool_3a = nn.MaxPool2d(3, stride=2) + self.conv2d_3b = BasicConv2d(64, 80, kernel_size=1, stride=1) + self.conv2d_4a = BasicConv2d(80, 192, kernel_size=3, stride=1) + self.conv2d_4b = BasicConv2d(192, 256, kernel_size=3, stride=2) + self.repeat_1 = nn.Sequential( + Block35(scale=0.17), + Block35(scale=0.17), + Block35(scale=0.17), + Block35(scale=0.17), + Block35(scale=0.17), + ) + self.mixed_6a = Mixed_6a() + self.repeat_2 = nn.Sequential( + Block17(scale=0.10), + Block17(scale=0.10), + Block17(scale=0.10), + Block17(scale=0.10), + Block17(scale=0.10), + Block17(scale=0.10), + Block17(scale=0.10), + Block17(scale=0.10), + Block17(scale=0.10), + Block17(scale=0.10), + ) + self.mixed_7a = Mixed_7a() + self.repeat_3 = nn.Sequential( + Block8(scale=0.20), + Block8(scale=0.20), + Block8(scale=0.20), + Block8(scale=0.20), + Block8(scale=0.20), + ) + self.block8 = Block8(noReLU=True) + self.avgpool_1a = nn.AdaptiveAvgPool2d(1) + self.dropout = nn.Dropout(dropout_prob) + self.last_linear = nn.Linear(1792, 512, bias=False) + self.last_bn = nn.BatchNorm1d(512, eps=0.001, momentum=0.1, affine=True) + + if pretrained is not None: + self.logits = nn.Linear(512, tmp_classes) + load_weights(self, pretrained) + + if self.classify and self.num_classes is not None: + self.logits = nn.Linear(512, self.num_classes) + + self.device = torch.device('cpu') + if device is not None: + self.device = device + self.to(device) + + def forward(self, x): + """Calculate embeddings or logits given a batch of input image tensors. + + Arguments: + x {torch.tensor} -- Batch of image tensors representing faces. + + Returns: + torch.tensor -- Batch of embedding vectors or multinomial logits. + """ + x = self.conv2d_1a(x) + x = self.conv2d_2a(x) + x = self.conv2d_2b(x) + x = self.maxpool_3a(x) + x = self.conv2d_3b(x) + x = self.conv2d_4a(x) + x = self.conv2d_4b(x) + x = self.repeat_1(x) + x = self.mixed_6a(x) + x = self.repeat_2(x) + x = self.mixed_7a(x) + x = self.repeat_3(x) + x = self.block8(x) + x = self.avgpool_1a(x) + x = self.dropout(x) + x = self.last_linear(x.view(x.shape[0], -1)) + x = self.last_bn(x) + if self.classify: + x = self.logits(x) + else: + x = F.normalize(x, p=2, dim=1) + return x + + +def load_weights(mdl, name): + """Download pretrained state_dict and load into model. + + Arguments: + mdl {torch.nn.Module} -- Pytorch model. + name {str} -- Name of dataset that was used to generate pretrained state_dict. + + Raises: + ValueError: If 'pretrained' not equal to 'vggface2' or 'casia-webface'. + """ + if name == 'vggface2': + path = 'https://github.com/timesler/facenet-pytorch/releases/download/v2.2.9/20180402-114759-vggface2.pt' + elif name == 'casia-webface': + path = 'https://github.com/timesler/facenet-pytorch/releases/download/v2.2.9/20180408-102900-casia-webface.pt' + else: + raise ValueError('Pretrained models only exist for "vggface2" and "casia-webface"') + + model_dir = os.path.join(get_torch_home(), 'checkpoints') + os.makedirs(model_dir, exist_ok=True) + + cached_file = os.path.join(model_dir, os.path.basename(path)) + if not os.path.exists(cached_file): + download_url_to_file(path, cached_file) + + state_dict = torch.load(cached_file) + mdl.load_state_dict(state_dict) + + +def get_torch_home(): + torch_home = os.path.expanduser( + os.getenv( + 'TORCH_HOME', + os.path.join(os.getenv('XDG_CACHE_HOME', '~/.cache'), 'torch') + ) + ) + return torch_home diff --git a/Tooling/model/facenet_pytorch/models/mtcnn.py b/Tooling/model/facenet_pytorch/models/mtcnn.py new file mode 100644 index 0000000..e2a7c83 --- /dev/null +++ b/Tooling/model/facenet_pytorch/models/mtcnn.py @@ -0,0 +1,519 @@ +import torch +from torch import nn +import numpy as np +import os + +from .utils.detect_face import detect_face, extract_face + + +class PNet(nn.Module): + """MTCNN PNet. + + Keyword Arguments: + pretrained {bool} -- Whether or not to load saved pretrained weights (default: {True}) + """ + + def __init__(self, pretrained=True): + super().__init__() + + self.conv1 = nn.Conv2d(3, 10, kernel_size=3) + self.prelu1 = nn.PReLU(10) + self.pool1 = nn.MaxPool2d(2, 2, ceil_mode=True) + self.conv2 = nn.Conv2d(10, 16, kernel_size=3) + self.prelu2 = nn.PReLU(16) + self.conv3 = nn.Conv2d(16, 32, kernel_size=3) + self.prelu3 = nn.PReLU(32) + self.conv4_1 = nn.Conv2d(32, 2, kernel_size=1) + self.softmax4_1 = nn.Softmax(dim=1) + self.conv4_2 = nn.Conv2d(32, 4, kernel_size=1) + + self.training = False + + if pretrained: + state_dict_path = os.path.join(os.path.dirname(__file__), '../data/pnet.pt') + state_dict = torch.load(state_dict_path) + self.load_state_dict(state_dict) + + def forward(self, x): + x = self.conv1(x) + x = self.prelu1(x) + x = self.pool1(x) + x = self.conv2(x) + x = self.prelu2(x) + x = self.conv3(x) + x = self.prelu3(x) + a = self.conv4_1(x) + a = self.softmax4_1(a) + b = self.conv4_2(x) + return b, a + + +class RNet(nn.Module): + """MTCNN RNet. + + Keyword Arguments: + pretrained {bool} -- Whether or not to load saved pretrained weights (default: {True}) + """ + + def __init__(self, pretrained=True): + super().__init__() + + self.conv1 = nn.Conv2d(3, 28, kernel_size=3) + self.prelu1 = nn.PReLU(28) + self.pool1 = nn.MaxPool2d(3, 2, ceil_mode=True) + self.conv2 = nn.Conv2d(28, 48, kernel_size=3) + self.prelu2 = nn.PReLU(48) + self.pool2 = nn.MaxPool2d(3, 2, ceil_mode=True) + self.conv3 = nn.Conv2d(48, 64, kernel_size=2) + self.prelu3 = nn.PReLU(64) + self.dense4 = nn.Linear(576, 128) + self.prelu4 = nn.PReLU(128) + self.dense5_1 = nn.Linear(128, 2) + self.softmax5_1 = nn.Softmax(dim=1) + self.dense5_2 = nn.Linear(128, 4) + + self.training = False + + if pretrained: + state_dict_path = os.path.join(os.path.dirname(__file__), '../data/rnet.pt') + state_dict = torch.load(state_dict_path) + self.load_state_dict(state_dict) + + def forward(self, x): + x = self.conv1(x) + x = self.prelu1(x) + x = self.pool1(x) + x = self.conv2(x) + x = self.prelu2(x) + x = self.pool2(x) + x = self.conv3(x) + x = self.prelu3(x) + x = x.permute(0, 3, 2, 1).contiguous() + x = self.dense4(x.view(x.shape[0], -1)) + x = self.prelu4(x) + a = self.dense5_1(x) + a = self.softmax5_1(a) + b = self.dense5_2(x) + return b, a + + +class ONet(nn.Module): + """MTCNN ONet. + + Keyword Arguments: + pretrained {bool} -- Whether or not to load saved pretrained weights (default: {True}) + """ + + def __init__(self, pretrained=True): + super().__init__() + + self.conv1 = nn.Conv2d(3, 32, kernel_size=3) + self.prelu1 = nn.PReLU(32) + self.pool1 = nn.MaxPool2d(3, 2, ceil_mode=True) + self.conv2 = nn.Conv2d(32, 64, kernel_size=3) + self.prelu2 = nn.PReLU(64) + self.pool2 = nn.MaxPool2d(3, 2, ceil_mode=True) + self.conv3 = nn.Conv2d(64, 64, kernel_size=3) + self.prelu3 = nn.PReLU(64) + self.pool3 = nn.MaxPool2d(2, 2, ceil_mode=True) + self.conv4 = nn.Conv2d(64, 128, kernel_size=2) + self.prelu4 = nn.PReLU(128) + self.dense5 = nn.Linear(1152, 256) + self.prelu5 = nn.PReLU(256) + self.dense6_1 = nn.Linear(256, 2) + self.softmax6_1 = nn.Softmax(dim=1) + self.dense6_2 = nn.Linear(256, 4) + self.dense6_3 = nn.Linear(256, 10) + + self.training = False + + if pretrained: + state_dict_path = os.path.join(os.path.dirname(__file__), '../data/onet.pt') + state_dict = torch.load(state_dict_path) + self.load_state_dict(state_dict) + + def forward(self, x): + x = self.conv1(x) + x = self.prelu1(x) + x = self.pool1(x) + x = self.conv2(x) + x = self.prelu2(x) + x = self.pool2(x) + x = self.conv3(x) + x = self.prelu3(x) + x = self.pool3(x) + x = self.conv4(x) + x = self.prelu4(x) + x = x.permute(0, 3, 2, 1).contiguous() + x = self.dense5(x.view(x.shape[0], -1)) + x = self.prelu5(x) + a = self.dense6_1(x) + a = self.softmax6_1(a) + b = self.dense6_2(x) + c = self.dense6_3(x) + return b, c, a + + +class MTCNN(nn.Module): + """MTCNN face detection module. + + This class loads pretrained P-, R-, and O-nets and returns images cropped to include the face + only, given raw input images of one of the following types: + - PIL image or list of PIL images + - numpy.ndarray (uint8) representing either a single image (3D) or a batch of images (4D). + Cropped faces can optionally be saved to file + also. + + Keyword Arguments: + image_size {int} -- Output image size in pixels. The image will be square. (default: {160}) + margin {int} -- Margin to add to bounding box, in terms of pixels in the final image. + Note that the application of the margin differs slightly from the davidsandberg/facenet + repo, which applies the margin to the original image before resizing, making the margin + dependent on the original image size (this is a bug in davidsandberg/facenet). + (default: {0}) + min_face_size {int} -- Minimum face size to search for. (default: {20}) + thresholds {list} -- MTCNN face detection thresholds (default: {[0.6, 0.7, 0.7]}) + factor {float} -- Factor used to create a scaling pyramid of face sizes. (default: {0.709}) + post_process {bool} -- Whether or not to post process images tensors before returning. + (default: {True}) + select_largest {bool} -- If True, if multiple faces are detected, the largest is returned. + If False, the face with the highest detection probability is returned. + (default: {True}) + selection_method {string} -- Which heuristic to use for selection. Default None. If + specified, will override select_largest: + "probability": highest probability selected + "largest": largest box selected + "largest_over_threshold": largest box over a certain probability selected + "center_weighted_size": box size minus weighted squared offset from image center + (default: {None}) + keep_all {bool} -- If True, all detected faces are returned, in the order dictated by the + select_largest parameter. If a save_path is specified, the first face is saved to that + path and the remaining faces are saved to 1, 2 etc. + (default: {False}) + device {torch.device} -- The device on which to run neural net passes. Image tensors and + models are copied to this device before running forward passes. (default: {None}) + """ + + def __init__( + self, image_size=160, margin=0, min_face_size=20, + thresholds=[0.6, 0.7, 0.7], factor=0.709, post_process=True, + select_largest=True, selection_method=None, keep_all=False, device=None + ): + super().__init__() + + self.image_size = image_size + self.margin = margin + self.min_face_size = min_face_size + self.thresholds = thresholds + self.factor = factor + self.post_process = post_process + self.select_largest = select_largest + self.keep_all = keep_all + self.selection_method = selection_method + + self.pnet = PNet() + self.rnet = RNet() + self.onet = ONet() + + self.device = torch.device('cpu') + if device is not None: + self.device = device + self.to(device) + + if not self.selection_method: + self.selection_method = 'largest' if self.select_largest else 'probability' + + def forward(self, img, save_path=None, return_prob=False): + """Run MTCNN face detection on a PIL image or numpy array. This method performs both + detection and extraction of faces, returning tensors representing detected faces rather + than the bounding boxes. To access bounding boxes, see the MTCNN.detect() method below. + + Arguments: + img {PIL.Image, np.ndarray, or list} -- A PIL image, np.ndarray, torch.Tensor, or list. + + Keyword Arguments: + save_path {str} -- An optional save path for the cropped image. Note that when + self.post_process=True, although the returned tensor is post processed, the saved + face image is not, so it is a true representation of the face in the input image. + If `img` is a list of images, `save_path` should be a list of equal length. + (default: {None}) + return_prob {bool} -- Whether or not to return the detection probability. + (default: {False}) + + Returns: + Union[torch.Tensor, tuple(torch.tensor, float)] -- If detected, cropped image of a face + with dimensions 3 x image_size x image_size. Optionally, the probability that a + face was detected. If self.keep_all is True, n detected faces are returned in an + n x 3 x image_size x image_size tensor with an optional list of detection + probabilities. If `img` is a list of images, the item(s) returned have an extra + dimension (batch) as the first dimension. + + Example: + >>> from facenet_pytorch import MTCNN + >>> mtcnn = MTCNN() + >>> face_tensor, prob = mtcnn(img, save_path='face.png', return_prob=True) + """ + + # Detect faces + batch_boxes, batch_probs, batch_points = self.detect(img, landmarks=True) + # Select faces + if not self.keep_all: + batch_boxes, batch_probs, batch_points = self.select_boxes( + batch_boxes, batch_probs, batch_points, img, method=self.selection_method + ) + # Extract faces + faces = self.extract(img, batch_boxes, save_path) + + if return_prob: + return faces, batch_probs + else: + return faces + + def detect(self, img, landmarks=False): + """Detect all faces in PIL image and return bounding boxes and optional facial landmarks. + + This method is used by the forward method and is also useful for face detection tasks + that require lower-level handling of bounding boxes and facial landmarks (e.g., face + tracking). The functionality of the forward function can be emulated by using this method + followed by the extract_face() function. + + Arguments: + img {PIL.Image, np.ndarray, or list} -- A PIL image, np.ndarray, torch.Tensor, or list. + + Keyword Arguments: + landmarks {bool} -- Whether to return facial landmarks in addition to bounding boxes. + (default: {False}) + + Returns: + tuple(numpy.ndarray, list) -- For N detected faces, a tuple containing an + Nx4 array of bounding boxes and a length N list of detection probabilities. + Returned boxes will be sorted in descending order by detection probability if + self.select_largest=False, otherwise the largest face will be returned first. + If `img` is a list of images, the items returned have an extra dimension + (batch) as the first dimension. Optionally, a third item, the facial landmarks, + are returned if `landmarks=True`. + + Example: + >>> from PIL import Image, ImageDraw + >>> from facenet_pytorch import MTCNN, extract_face + >>> mtcnn = MTCNN(keep_all=True) + >>> boxes, probs, points = mtcnn.detect(img, landmarks=True) + >>> # Draw boxes and save faces + >>> img_draw = img.copy() + >>> draw = ImageDraw.Draw(img_draw) + >>> for i, (box, point) in enumerate(zip(boxes, points)): + ... draw.rectangle(box.tolist(), width=5) + ... for p in point: + ... draw.rectangle((p - 10).tolist() + (p + 10).tolist(), width=10) + ... extract_face(img, box, save_path='detected_face_{}.png'.format(i)) + >>> img_draw.save('annotated_faces.png') + """ + + with torch.no_grad(): + batch_boxes, batch_points = detect_face( + img, self.min_face_size, + self.pnet, self.rnet, self.onet, + self.thresholds, self.factor, + self.device + ) + + boxes, probs, points = [], [], [] + for box, point in zip(batch_boxes, batch_points): + box = np.array(box) + point = np.array(point) + if len(box) == 0: + boxes.append(None) + probs.append([None]) + points.append(None) + elif self.select_largest: + box_order = np.argsort((box[:, 2] - box[:, 0]) * (box[:, 3] - box[:, 1]))[::-1] + box = box[box_order] + point = point[box_order] + boxes.append(box[:, :4]) + probs.append(box[:, 4]) + points.append(point) + else: + boxes.append(box[:, :4]) + probs.append(box[:, 4]) + points.append(point) + boxes = np.array(boxes) + probs = np.array(probs) + points = np.array(points) + + if ( + not isinstance(img, (list, tuple)) and + not (isinstance(img, np.ndarray) and len(img.shape) == 4) and + not (isinstance(img, torch.Tensor) and len(img.shape) == 4) + ): + boxes = boxes[0] + probs = probs[0] + points = points[0] + + if landmarks: + return boxes, probs, points + + return boxes, probs + + def select_boxes( + self, all_boxes, all_probs, all_points, imgs, method='probability', threshold=0.9, + center_weight=2.0 + ): + """Selects a single box from multiple for a given image using one of multiple heuristics. + + Arguments: + all_boxes {np.ndarray} -- Ix0 ndarray where each element is a Nx4 ndarry of + bounding boxes for N detected faces in I images (output from self.detect). + all_probs {np.ndarray} -- Ix0 ndarray where each element is a Nx0 ndarry of + probabilities for N detected faces in I images (output from self.detect). + all_points {np.ndarray} -- Ix0 ndarray where each element is a Nx5x2 array of + points for N detected faces. (output from self.detect). + imgs {PIL.Image, np.ndarray, or list} -- A PIL image, np.ndarray, torch.Tensor, or list. + + Keyword Arguments: + method {str} -- Which heuristic to use for selection: + "probability": highest probability selected + "largest": largest box selected + "largest_over_theshold": largest box over a certain probability selected + "center_weighted_size": box size minus weighted squared offset from image center + (default: {'probability'}) + threshold {float} -- theshold for "largest_over_threshold" method. (default: {0.9}) + center_weight {float} -- weight for squared offset in center weighted size method. + (default: {2.0}) + + Returns: + tuple(numpy.ndarray, numpy.ndarray, numpy.ndarray) -- nx4 ndarray of bounding boxes + for n images. Ix0 array of probabilities for each box, array of landmark points. + """ + + #copying batch detection from extract, but would be easier to ensure detect creates consistent output. + batch_mode = True + if ( + not isinstance(imgs, (list, tuple)) and + not (isinstance(imgs, np.ndarray) and len(imgs.shape) == 4) and + not (isinstance(imgs, torch.Tensor) and len(imgs.shape) == 4) + ): + imgs = [imgs] + all_boxes = [all_boxes] + all_probs = [all_probs] + all_points = [all_points] + batch_mode = False + + selected_boxes, selected_probs, selected_points = [], [], [] + for boxes, points, probs, img in zip(all_boxes, all_points, all_probs, imgs): + + if boxes is None: + selected_boxes.append(None) + selected_probs.append([None]) + selected_points.append(None) + continue + + # If at least 1 box found + boxes = np.array(boxes) + probs = np.array(probs) + points = np.array(points) + + if method == 'largest': + box_order = np.argsort((boxes[:, 2] - boxes[:, 0]) * (boxes[:, 3] - boxes[:, 1]))[::-1] + elif method == 'probability': + box_order = np.argsort(probs)[::-1] + elif method == 'center_weighted_size': + box_sizes = (boxes[:, 2] - boxes[:, 0]) * (boxes[:, 3] - boxes[:, 1]) + img_center = (img.width / 2, img.height/2) + box_centers = np.array(list(zip((boxes[:, 0] + boxes[:, 2]) / 2, (boxes[:, 1] + boxes[:, 3]) / 2))) + offsets = box_centers - img_center + offset_dist_squared = np.sum(np.power(offsets, 2.0), 1) + box_order = np.argsort(box_sizes - offset_dist_squared * center_weight)[::-1] + elif method == 'largest_over_threshold': + box_mask = probs > threshold + boxes = boxes[box_mask] + box_order = np.argsort((boxes[:, 2] - boxes[:, 0]) * (boxes[:, 3] - boxes[:, 1]))[::-1] + if sum(box_mask) == 0: + selected_boxes.append(None) + selected_probs.append([None]) + selected_points.append(None) + continue + + box = boxes[box_order][[0]] + prob = probs[box_order][[0]] + point = points[box_order][[0]] + selected_boxes.append(box) + selected_probs.append(prob) + selected_points.append(point) + + if batch_mode: + selected_boxes = np.array(selected_boxes) + selected_probs = np.array(selected_probs) + selected_points = np.array(selected_points) + else: + selected_boxes = selected_boxes[0] + selected_probs = selected_probs[0][0] + selected_points = selected_points[0] + + return selected_boxes, selected_probs, selected_points + + def extract(self, img, batch_boxes, save_path): + # Determine if a batch or single image was passed + batch_mode = True + if ( + not isinstance(img, (list, tuple)) and + not (isinstance(img, np.ndarray) and len(img.shape) == 4) and + not (isinstance(img, torch.Tensor) and len(img.shape) == 4) + ): + img = [img] + batch_boxes = [batch_boxes] + batch_mode = False + + # Parse save path(s) + if save_path is not None: + if isinstance(save_path, str): + save_path = [save_path] + else: + save_path = [None for _ in range(len(img))] + + # Process all bounding boxes + faces = [] + for im, box_im, path_im in zip(img, batch_boxes, save_path): + if box_im is None: + faces.append(None) + continue + + if not self.keep_all: + box_im = box_im[[0]] + + faces_im = [] + for i, box in enumerate(box_im): + face_path = path_im + if path_im is not None and i > 0: + save_name, ext = os.path.splitext(path_im) + face_path = save_name + '_' + str(i + 1) + ext + + face = extract_face(im, box, self.image_size, self.margin, face_path) + if self.post_process: + face = fixed_image_standardization(face) + faces_im.append(face) + + if self.keep_all: + faces_im = torch.stack(faces_im) + else: + faces_im = faces_im[0] + + faces.append(faces_im) + + if not batch_mode: + faces = faces[0] + + return faces + + +def fixed_image_standardization(image_tensor): + processed_tensor = (image_tensor - 127.5) / 128.0 + return processed_tensor + + +def prewhiten(x): + mean = x.mean() + std = x.std() + std_adj = std.clamp(min=1.0/(float(x.numel())**0.5)) + y = (x - mean) / std_adj + return y + diff --git a/Tooling/model/facenet_pytorch/models/utils/detect_face.py b/Tooling/model/facenet_pytorch/models/utils/detect_face.py new file mode 100644 index 0000000..6c4a76d --- /dev/null +++ b/Tooling/model/facenet_pytorch/models/utils/detect_face.py @@ -0,0 +1,378 @@ +import torch +from torch.nn.functional import interpolate +from torchvision.transforms import functional as F +from torchvision.ops.boxes import batched_nms +from PIL import Image +import numpy as np +import os +import math + +# OpenCV is optional, but required if using numpy arrays instead of PIL +try: + import cv2 +except: + pass + +def fixed_batch_process(im_data, model): + batch_size = 512 + out = [] + for i in range(0, len(im_data), batch_size): + batch = im_data[i:(i+batch_size)] + out.append(model(batch)) + + return tuple(torch.cat(v, dim=0) for v in zip(*out)) + +def detect_face(imgs, minsize, pnet, rnet, onet, threshold, factor, device): + if isinstance(imgs, (np.ndarray, torch.Tensor)): + if isinstance(imgs,np.ndarray): + imgs = torch.as_tensor(imgs.copy(), device=device) + + if isinstance(imgs,torch.Tensor): + imgs = torch.as_tensor(imgs, device=device) + + if len(imgs.shape) == 3: + imgs = imgs.unsqueeze(0) + else: + if not isinstance(imgs, (list, tuple)): + imgs = [imgs] + if any(img.size != imgs[0].size for img in imgs): + raise Exception("MTCNN batch processing only compatible with equal-dimension images.") + imgs = np.stack([np.uint8(img) for img in imgs]) + imgs = torch.as_tensor(imgs.copy(), device=device) + + + + model_dtype = next(pnet.parameters()).dtype + imgs = imgs.permute(0, 3, 1, 2).type(model_dtype) + + batch_size = len(imgs) + h, w = imgs.shape[2:4] + m = 12.0 / minsize + minl = min(h, w) + minl = minl * m + + # Create scale pyramid + scale_i = m + scales = [] + while minl >= 12: + scales.append(scale_i) + scale_i = scale_i * factor + minl = minl * factor + + # First stage + boxes = [] + image_inds = [] + + scale_picks = [] + + all_i = 0 + offset = 0 + for scale in scales: + im_data = imresample(imgs, (int(h * scale + 1), int(w * scale + 1))) + im_data = (im_data - 127.5) * 0.0078125 + reg, probs = pnet(im_data) + + boxes_scale, image_inds_scale = generateBoundingBox(reg, probs[:, 1], scale, threshold[0]) + boxes.append(boxes_scale) + image_inds.append(image_inds_scale) + + pick = batched_nms(boxes_scale[:, :4], boxes_scale[:, 4], image_inds_scale, 0.5) + scale_picks.append(pick + offset) + offset += boxes_scale.shape[0] + + boxes = torch.cat(boxes, dim=0) + image_inds = torch.cat(image_inds, dim=0) + + scale_picks = torch.cat(scale_picks, dim=0) + + # NMS within each scale + image + boxes, image_inds = boxes[scale_picks], image_inds[scale_picks] + + + # NMS within each image + pick = batched_nms(boxes[:, :4], boxes[:, 4], image_inds, 0.7) + boxes, image_inds = boxes[pick], image_inds[pick] + + regw = boxes[:, 2] - boxes[:, 0] + regh = boxes[:, 3] - boxes[:, 1] + qq1 = boxes[:, 0] + boxes[:, 5] * regw + qq2 = boxes[:, 1] + boxes[:, 6] * regh + qq3 = boxes[:, 2] + boxes[:, 7] * regw + qq4 = boxes[:, 3] + boxes[:, 8] * regh + boxes = torch.stack([qq1, qq2, qq3, qq4, boxes[:, 4]]).permute(1, 0) + boxes = rerec(boxes) + y, ey, x, ex = pad(boxes, w, h) + + # Second stage + if len(boxes) > 0: + im_data = [] + for k in range(len(y)): + if ey[k] > (y[k] - 1) and ex[k] > (x[k] - 1): + img_k = imgs[image_inds[k], :, (y[k] - 1):ey[k], (x[k] - 1):ex[k]].unsqueeze(0) + im_data.append(imresample(img_k, (24, 24))) + im_data = torch.cat(im_data, dim=0) + im_data = (im_data - 127.5) * 0.0078125 + + # This is equivalent to out = rnet(im_data) to avoid GPU out of memory. + out = fixed_batch_process(im_data, rnet) + + out0 = out[0].permute(1, 0) + out1 = out[1].permute(1, 0) + score = out1[1, :] + ipass = score > threshold[1] + boxes = torch.cat((boxes[ipass, :4], score[ipass].unsqueeze(1)), dim=1) + image_inds = image_inds[ipass] + mv = out0[:, ipass].permute(1, 0) + + # NMS within each image + pick = batched_nms(boxes[:, :4], boxes[:, 4], image_inds, 0.7) + boxes, image_inds, mv = boxes[pick], image_inds[pick], mv[pick] + boxes = bbreg(boxes, mv) + boxes = rerec(boxes) + + # Third stage + points = torch.zeros(0, 5, 2, device=device) + if len(boxes) > 0: + y, ey, x, ex = pad(boxes, w, h) + im_data = [] + for k in range(len(y)): + if ey[k] > (y[k] - 1) and ex[k] > (x[k] - 1): + img_k = imgs[image_inds[k], :, (y[k] - 1):ey[k], (x[k] - 1):ex[k]].unsqueeze(0) + im_data.append(imresample(img_k, (48, 48))) + im_data = torch.cat(im_data, dim=0) + im_data = (im_data - 127.5) * 0.0078125 + + # This is equivalent to out = onet(im_data) to avoid GPU out of memory. + out = fixed_batch_process(im_data, onet) + + out0 = out[0].permute(1, 0) + out1 = out[1].permute(1, 0) + out2 = out[2].permute(1, 0) + score = out2[1, :] + points = out1 + ipass = score > threshold[2] + points = points[:, ipass] + boxes = torch.cat((boxes[ipass, :4], score[ipass].unsqueeze(1)), dim=1) + image_inds = image_inds[ipass] + mv = out0[:, ipass].permute(1, 0) + + w_i = boxes[:, 2] - boxes[:, 0] + 1 + h_i = boxes[:, 3] - boxes[:, 1] + 1 + points_x = w_i.repeat(5, 1) * points[:5, :] + boxes[:, 0].repeat(5, 1) - 1 + points_y = h_i.repeat(5, 1) * points[5:10, :] + boxes[:, 1].repeat(5, 1) - 1 + points = torch.stack((points_x, points_y)).permute(2, 1, 0) + boxes = bbreg(boxes, mv) + + # NMS within each image using "Min" strategy + # pick = batched_nms(boxes[:, :4], boxes[:, 4], image_inds, 0.7) + pick = batched_nms_numpy(boxes[:, :4], boxes[:, 4], image_inds, 0.7, 'Min') + boxes, image_inds, points = boxes[pick], image_inds[pick], points[pick] + + boxes = boxes.cpu().numpy() + points = points.cpu().numpy() + + image_inds = image_inds.cpu() + + batch_boxes = [] + batch_points = [] + for b_i in range(batch_size): + b_i_inds = np.where(image_inds == b_i) + batch_boxes.append(boxes[b_i_inds].copy()) + batch_points.append(points[b_i_inds].copy()) + + batch_boxes, batch_points = np.array(batch_boxes), np.array(batch_points) + + return batch_boxes, batch_points + + +def bbreg(boundingbox, reg): + if reg.shape[1] == 1: + reg = torch.reshape(reg, (reg.shape[2], reg.shape[3])) + + w = boundingbox[:, 2] - boundingbox[:, 0] + 1 + h = boundingbox[:, 3] - boundingbox[:, 1] + 1 + b1 = boundingbox[:, 0] + reg[:, 0] * w + b2 = boundingbox[:, 1] + reg[:, 1] * h + b3 = boundingbox[:, 2] + reg[:, 2] * w + b4 = boundingbox[:, 3] + reg[:, 3] * h + boundingbox[:, :4] = torch.stack([b1, b2, b3, b4]).permute(1, 0) + + return boundingbox + + +def generateBoundingBox(reg, probs, scale, thresh): + stride = 2 + cellsize = 12 + + reg = reg.permute(1, 0, 2, 3) + + mask = probs >= thresh + mask_inds = mask.nonzero() + image_inds = mask_inds[:, 0] + score = probs[mask] + reg = reg[:, mask].permute(1, 0) + bb = mask_inds[:, 1:].type(reg.dtype).flip(1) + q1 = ((stride * bb + 1) / scale).floor() + q2 = ((stride * bb + cellsize - 1 + 1) / scale).floor() + boundingbox = torch.cat([q1, q2, score.unsqueeze(1), reg], dim=1) + return boundingbox, image_inds + + +def nms_numpy(boxes, scores, threshold, method): + if boxes.size == 0: + return np.empty((0, 3)) + + x1 = boxes[:, 0].copy() + y1 = boxes[:, 1].copy() + x2 = boxes[:, 2].copy() + y2 = boxes[:, 3].copy() + s = scores + area = (x2 - x1 + 1) * (y2 - y1 + 1) + + I = np.argsort(s) + pick = np.zeros_like(s, dtype=np.int16) + counter = 0 + while I.size > 0: + i = I[-1] + pick[counter] = i + counter += 1 + idx = I[0:-1] + + xx1 = np.maximum(x1[i], x1[idx]).copy() + yy1 = np.maximum(y1[i], y1[idx]).copy() + xx2 = np.minimum(x2[i], x2[idx]).copy() + yy2 = np.minimum(y2[i], y2[idx]).copy() + + w = np.maximum(0.0, xx2 - xx1 + 1).copy() + h = np.maximum(0.0, yy2 - yy1 + 1).copy() + + inter = w * h + if method == 'Min': + o = inter / np.minimum(area[i], area[idx]) + else: + o = inter / (area[i] + area[idx] - inter) + I = I[np.where(o <= threshold)] + + pick = pick[:counter].copy() + return pick + + +def batched_nms_numpy(boxes, scores, idxs, threshold, method): + device = boxes.device + if boxes.numel() == 0: + return torch.empty((0,), dtype=torch.int64, device=device) + # strategy: in order to perform NMS independently per class. + # we add an offset to all the boxes. The offset is dependent + # only on the class idx, and is large enough so that boxes + # from different classes do not overlap + max_coordinate = boxes.max() + offsets = idxs.to(boxes) * (max_coordinate + 1) + boxes_for_nms = boxes + offsets[:, None] + boxes_for_nms = boxes_for_nms.cpu().numpy() + scores = scores.cpu().numpy() + keep = nms_numpy(boxes_for_nms, scores, threshold, method) + return torch.as_tensor(keep, dtype=torch.long, device=device) + + +def pad(boxes, w, h): + boxes = boxes.trunc().int().cpu().numpy() + x = boxes[:, 0] + y = boxes[:, 1] + ex = boxes[:, 2] + ey = boxes[:, 3] + + x[x < 1] = 1 + y[y < 1] = 1 + ex[ex > w] = w + ey[ey > h] = h + + return y, ey, x, ex + + +def rerec(bboxA): + h = bboxA[:, 3] - bboxA[:, 1] + w = bboxA[:, 2] - bboxA[:, 0] + + l = torch.max(w, h) + bboxA[:, 0] = bboxA[:, 0] + w * 0.5 - l * 0.5 + bboxA[:, 1] = bboxA[:, 1] + h * 0.5 - l * 0.5 + bboxA[:, 2:4] = bboxA[:, :2] + l.repeat(2, 1).permute(1, 0) + + return bboxA + + +def imresample(img, sz): + im_data = interpolate(img, size=sz, mode="area") + return im_data + + +def crop_resize(img, box, image_size): + if isinstance(img, np.ndarray): + img = img[box[1]:box[3], box[0]:box[2]] + out = cv2.resize( + img, + (image_size, image_size), + interpolation=cv2.INTER_AREA + ).copy() + elif isinstance(img, torch.Tensor): + img = img[box[1]:box[3], box[0]:box[2]] + out = imresample( + img.permute(2, 0, 1).unsqueeze(0).float(), + (image_size, image_size) + ).byte().squeeze(0).permute(1, 2, 0) + else: + out = img.crop(box).copy().resize((image_size, image_size), Image.BILINEAR) + return out + + +def save_img(img, path): + if isinstance(img, np.ndarray): + cv2.imwrite(path, cv2.cvtColor(img, cv2.COLOR_RGB2BGR)) + else: + img.save(path) + + +def get_size(img): + if isinstance(img, (np.ndarray, torch.Tensor)): + return img.shape[1::-1] + else: + return img.size + + +def extract_face(img, box, image_size=160, margin=0, save_path=None): + """Extract face + margin from PIL Image given bounding box. + + Arguments: + img {PIL.Image} -- A PIL Image. + box {numpy.ndarray} -- Four-element bounding box. + image_size {int} -- Output image size in pixels. The image will be square. + margin {int} -- Margin to add to bounding box, in terms of pixels in the final image. + Note that the application of the margin differs slightly from the davidsandberg/facenet + repo, which applies the margin to the original image before resizing, making the margin + dependent on the original image size. + save_path {str} -- Save path for extracted face image. (default: {None}) + + Returns: + torch.tensor -- tensor representing the extracted face. + """ + margin = [ + margin * (box[2] - box[0]) / (image_size - margin), + margin * (box[3] - box[1]) / (image_size - margin), + ] + raw_image_size = get_size(img) + box = [ + int(max(box[0] - margin[0] / 2, 0)), + int(max(box[1] - margin[1] / 2, 0)), + int(min(box[2] + margin[0] / 2, raw_image_size[0])), + int(min(box[3] + margin[1] / 2, raw_image_size[1])), + ] + + face = crop_resize(img, box, image_size) + + if save_path is not None: + os.makedirs(os.path.dirname(save_path) + "/", exist_ok=True) + save_img(face, save_path) + + face = F.to_tensor(np.float32(face)) + + return face diff --git a/Tooling/model/facenet_pytorch/models/utils/download.py b/Tooling/model/facenet_pytorch/models/utils/download.py new file mode 100644 index 0000000..4943ffe --- /dev/null +++ b/Tooling/model/facenet_pytorch/models/utils/download.py @@ -0,0 +1,102 @@ +import hashlib +import os +import shutil +import sys +import tempfile + +from urllib.request import urlopen, Request + +try: + from tqdm.auto import tqdm # automatically select proper tqdm submodule if available +except ImportError: + try: + from tqdm import tqdm + except ImportError: + # fake tqdm if it's not installed + class tqdm(object): # type: ignore + + def __init__(self, total=None, disable=False, + unit=None, unit_scale=None, unit_divisor=None): + self.total = total + self.disable = disable + self.n = 0 + # ignore unit, unit_scale, unit_divisor; they're just for real tqdm + + def update(self, n): + if self.disable: + return + + self.n += n + if self.total is None: + sys.stderr.write("\r{0:.1f} bytes".format(self.n)) + else: + sys.stderr.write("\r{0:.1f}%".format(100 * self.n / float(self.total))) + sys.stderr.flush() + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + if self.disable: + return + + sys.stderr.write('\n') + + +def download_url_to_file(url, dst, hash_prefix=None, progress=True): + r"""Download object at the given URL to a local path. + Args: + url (string): URL of the object to download + dst (string): Full path where object will be saved, e.g. `/tmp/temporary_file` + hash_prefix (string, optional): If not None, the SHA256 downloaded file should start with `hash_prefix`. + Default: None + progress (bool, optional): whether or not to display a progress bar to stderr + Default: True + Example: + >>> torch.hub.download_url_to_file('https://s3.amazonaws.com/pytorch/models/resnet18-5c106cde.pth', '/tmp/temporary_file') + """ + file_size = None + # We use a different API for python2 since urllib(2) doesn't recognize the CA + # certificates in older Python + req = Request(url, headers={"User-Agent": "torch.hub"}) + u = urlopen(req) + meta = u.info() + if hasattr(meta, 'getheaders'): + content_length = meta.getheaders("Content-Length") + else: + content_length = meta.get_all("Content-Length") + if content_length is not None and len(content_length) > 0: + file_size = int(content_length[0]) + + # We deliberately save it in a temp file and move it after + # download is complete. This prevents a local working checkpoint + # being overridden by a broken download. + dst = os.path.expanduser(dst) + dst_dir = os.path.dirname(dst) + f = tempfile.NamedTemporaryFile(delete=False, dir=dst_dir) + + try: + if hash_prefix is not None: + sha256 = hashlib.sha256() + with tqdm(total=file_size, disable=not progress, + unit='B', unit_scale=True, unit_divisor=1024) as pbar: + while True: + buffer = u.read(8192) + if len(buffer) == 0: + break + f.write(buffer) + if hash_prefix is not None: + sha256.update(buffer) + pbar.update(len(buffer)) + + f.close() + if hash_prefix is not None: + digest = sha256.hexdigest() + if digest[:len(hash_prefix)] != hash_prefix: + raise RuntimeError('invalid hash value (expected "{}", got "{}")' + .format(hash_prefix, digest)) + shutil.move(f.name, dst) + finally: + f.close() + if os.path.exists(f.name): + os.remove(f.name) diff --git a/Tooling/model/facenet_pytorch/models/utils/tensorflow2pytorch.py b/Tooling/model/facenet_pytorch/models/utils/tensorflow2pytorch.py new file mode 100644 index 0000000..7e3644c --- /dev/null +++ b/Tooling/model/facenet_pytorch/models/utils/tensorflow2pytorch.py @@ -0,0 +1,416 @@ +import tensorflow as tf +import torch +import json +import os, sys + +from dependencies.facenet.src import facenet +from dependencies.facenet.src.models import inception_resnet_v1 as tf_mdl +from dependencies.facenet.src.align import detect_face + +from models.inception_resnet_v1 import InceptionResnetV1 +from models.mtcnn import PNet, RNet, ONet + + +def import_tf_params(tf_mdl_dir, sess): + """Import tensorflow model from save directory. + + Arguments: + tf_mdl_dir {str} -- Location of protobuf, checkpoint, meta files. + sess {tensorflow.Session} -- Tensorflow session object. + + Returns: + (list, list, list) -- Tuple of lists containing the layer names, + parameter arrays as numpy ndarrays, parameter shapes. + """ + print('\nLoading tensorflow model\n') + if callable(tf_mdl_dir): + tf_mdl_dir(sess) + else: + facenet.load_model(tf_mdl_dir) + + print('\nGetting model weights\n') + tf_layers = tf.trainable_variables() + tf_params = sess.run(tf_layers) + + tf_shapes = [p.shape for p in tf_params] + tf_layers = [l.name for l in tf_layers] + + if not callable(tf_mdl_dir): + path = os.path.join(tf_mdl_dir, 'layer_description.json') + else: + path = 'data/layer_description.json' + with open(path, 'w') as f: + json.dump({l: s for l, s in zip(tf_layers, tf_shapes)}, f) + + return tf_layers, tf_params, tf_shapes + + +def get_layer_indices(layer_lookup, tf_layers): + """Giving a lookup of model layer attribute names and tensorflow variable names, + find matching parameters. + + Arguments: + layer_lookup {dict} -- Dictionary mapping pytorch attribute names to (partial) + tensorflow variable names. Expects dict of the form {'attr': ['tf_name', ...]} + where the '...'s are ignored. + tf_layers {list} -- List of tensorflow variable names. + + Returns: + list -- The input dictionary with the list of matching inds appended to each item. + """ + layer_inds = {} + for name, value in layer_lookup.items(): + layer_inds[name] = value + [[i for i, n in enumerate(tf_layers) if value[0] in n]] + return layer_inds + + +def load_tf_batchNorm(weights, layer): + """Load tensorflow weights into nn.BatchNorm object. + + Arguments: + weights {list} -- Tensorflow parameters. + layer {torch.nn.Module} -- nn.BatchNorm. + """ + layer.bias.data = torch.tensor(weights[0]).view(layer.bias.data.shape) + layer.weight.data = torch.ones_like(layer.weight.data) + layer.running_mean = torch.tensor(weights[1]).view(layer.running_mean.shape) + layer.running_var = torch.tensor(weights[2]).view(layer.running_var.shape) + + +def load_tf_conv2d(weights, layer, transpose=False): + """Load tensorflow weights into nn.Conv2d object. + + Arguments: + weights {list} -- Tensorflow parameters. + layer {torch.nn.Module} -- nn.Conv2d. + """ + if isinstance(weights, list): + if len(weights) == 2: + layer.bias.data = ( + torch.tensor(weights[1]) + .view(layer.bias.data.shape) + ) + weights = weights[0] + + if transpose: + dim_order = (3, 2, 1, 0) + else: + dim_order = (3, 2, 0, 1) + + layer.weight.data = ( + torch.tensor(weights) + .permute(dim_order) + .view(layer.weight.data.shape) + ) + + +def load_tf_conv2d_trans(weights, layer): + return load_tf_conv2d(weights, layer, transpose=True) + + +def load_tf_basicConv2d(weights, layer): + """Load tensorflow weights into grouped Conv2d+BatchNorm object. + + Arguments: + weights {list} -- Tensorflow parameters. + layer {torch.nn.Module} -- Object containing Conv2d+BatchNorm. + """ + load_tf_conv2d(weights[0], layer.conv) + load_tf_batchNorm(weights[1:], layer.bn) + + +def load_tf_linear(weights, layer): + """Load tensorflow weights into nn.Linear object. + + Arguments: + weights {list} -- Tensorflow parameters. + layer {torch.nn.Module} -- nn.Linear. + """ + if isinstance(weights, list): + if len(weights) == 2: + layer.bias.data = ( + torch.tensor(weights[1]) + .view(layer.bias.data.shape) + ) + weights = weights[0] + layer.weight.data = ( + torch.tensor(weights) + .transpose(-1, 0) + .view(layer.weight.data.shape) + ) + + +# High-level parameter-loading functions: + +def load_tf_block35(weights, layer): + load_tf_basicConv2d(weights[:4], layer.branch0) + load_tf_basicConv2d(weights[4:8], layer.branch1[0]) + load_tf_basicConv2d(weights[8:12], layer.branch1[1]) + load_tf_basicConv2d(weights[12:16], layer.branch2[0]) + load_tf_basicConv2d(weights[16:20], layer.branch2[1]) + load_tf_basicConv2d(weights[20:24], layer.branch2[2]) + load_tf_conv2d(weights[24:26], layer.conv2d) + + +def load_tf_block17_8(weights, layer): + load_tf_basicConv2d(weights[:4], layer.branch0) + load_tf_basicConv2d(weights[4:8], layer.branch1[0]) + load_tf_basicConv2d(weights[8:12], layer.branch1[1]) + load_tf_basicConv2d(weights[12:16], layer.branch1[2]) + load_tf_conv2d(weights[16:18], layer.conv2d) + + +def load_tf_mixed6a(weights, layer): + if len(weights) != 16: + raise ValueError(f'Number of weight arrays ({len(weights)}) not equal to 16') + load_tf_basicConv2d(weights[:4], layer.branch0) + load_tf_basicConv2d(weights[4:8], layer.branch1[0]) + load_tf_basicConv2d(weights[8:12], layer.branch1[1]) + load_tf_basicConv2d(weights[12:16], layer.branch1[2]) + + +def load_tf_mixed7a(weights, layer): + if len(weights) != 28: + raise ValueError(f'Number of weight arrays ({len(weights)}) not equal to 28') + load_tf_basicConv2d(weights[:4], layer.branch0[0]) + load_tf_basicConv2d(weights[4:8], layer.branch0[1]) + load_tf_basicConv2d(weights[8:12], layer.branch1[0]) + load_tf_basicConv2d(weights[12:16], layer.branch1[1]) + load_tf_basicConv2d(weights[16:20], layer.branch2[0]) + load_tf_basicConv2d(weights[20:24], layer.branch2[1]) + load_tf_basicConv2d(weights[24:28], layer.branch2[2]) + + +def load_tf_repeats(weights, layer, rptlen, subfun): + if len(weights) % rptlen != 0: + raise ValueError(f'Number of weight arrays ({len(weights)}) not divisible by {rptlen}') + weights_split = [weights[i:i+rptlen] for i in range(0, len(weights), rptlen)] + for i, w in enumerate(weights_split): + subfun(w, getattr(layer, str(i))) + + +def load_tf_repeat_1(weights, layer): + load_tf_repeats(weights, layer, 26, load_tf_block35) + + +def load_tf_repeat_2(weights, layer): + load_tf_repeats(weights, layer, 18, load_tf_block17_8) + + +def load_tf_repeat_3(weights, layer): + load_tf_repeats(weights, layer, 18, load_tf_block17_8) + + +def test_loaded_params(mdl, tf_params, tf_layers): + """Check each parameter in a pytorch model for an equivalent parameter + in a list of tensorflow variables. + + Arguments: + mdl {torch.nn.Module} -- Pytorch model. + tf_params {list} -- List of ndarrays representing tensorflow variables. + tf_layers {list} -- Corresponding list of tensorflow variable names. + """ + tf_means = torch.stack([torch.tensor(p).mean() for p in tf_params]) + for name, param in mdl.named_parameters(): + pt_mean = param.data.mean() + matching_inds = ((tf_means - pt_mean).abs() < 1e-8).nonzero() + print(f'{name} equivalent to {[tf_layers[i] for i in matching_inds]}') + + +def compare_model_outputs(pt_mdl, sess, test_data): + """Given some testing data, compare the output of pytorch and tensorflow models. + + Arguments: + pt_mdl {torch.nn.Module} -- Pytorch model. + sess {tensorflow.Session} -- Tensorflow session object. + test_data {torch.Tensor} -- Pytorch tensor. + """ + print('\nPassing test data through TF model\n') + if isinstance(sess, tf.Session): + images_placeholder = tf.get_default_graph().get_tensor_by_name("input:0") + phase_train_placeholder = tf.get_default_graph().get_tensor_by_name("phase_train:0") + embeddings = tf.get_default_graph().get_tensor_by_name("embeddings:0") + feed_dict = {images_placeholder: test_data.numpy(), phase_train_placeholder: False} + tf_output = torch.tensor(sess.run(embeddings, feed_dict=feed_dict)) + else: + tf_output = sess(test_data) + + print(tf_output) + + print('\nPassing test data through PT model\n') + pt_output = pt_mdl(test_data.permute(0, 3, 1, 2)) + print(pt_output) + + distance = (tf_output - pt_output).norm() + print(f'\nDistance {distance}\n') + + +def compare_mtcnn(pt_mdl, tf_fun, sess, ind, test_data): + tf_mdls = tf_fun(sess) + tf_mdl = tf_mdls[ind] + + print('\nPassing test data through TF model\n') + tf_output = tf_mdl(test_data.numpy()) + tf_output = [torch.tensor(out) for out in tf_output] + print('\n'.join([str(o.view(-1)[:10]) for o in tf_output])) + + print('\nPassing test data through PT model\n') + with torch.no_grad(): + pt_output = pt_mdl(test_data.permute(0, 3, 2, 1)) + pt_output = [torch.tensor(out) for out in pt_output] + for i in range(len(pt_output)): + if len(pt_output[i].shape) == 4: + pt_output[i] = pt_output[i].permute(0, 3, 2, 1).contiguous() + print('\n'.join([str(o.view(-1)[:10]) for o in pt_output])) + + distance = [(tf_o - pt_o).norm() for tf_o, pt_o in zip(tf_output, pt_output)] + print(f'\nDistance {distance}\n') + + +def load_tf_model_weights(mdl, layer_lookup, tf_mdl_dir, is_resnet=True, arg_num=None): + """Load tensorflow parameters into a pytorch model. + + Arguments: + mdl {torch.nn.Module} -- Pytorch model. + layer_lookup {[type]} -- Dictionary mapping pytorch attribute names to (partial) + tensorflow variable names, and a function suitable for loading weights. + Expects dict of the form {'attr': ['tf_name', function]}. + tf_mdl_dir {str} -- Location of protobuf, checkpoint, meta files. + """ + tf.reset_default_graph() + with tf.Session() as sess: + tf_layers, tf_params, tf_shapes = import_tf_params(tf_mdl_dir, sess) + layer_info = get_layer_indices(layer_lookup, tf_layers) + + for layer_name, info in layer_info.items(): + print(f'Loading {info[0]}/* into {layer_name}') + weights = [tf_params[i] for i in info[2]] + layer = getattr(mdl, layer_name) + info[1](weights, layer) + + test_loaded_params(mdl, tf_params, tf_layers) + + if is_resnet: + compare_model_outputs(mdl, sess, torch.randn(5, 160, 160, 3).detach()) + + +def tensorflow2pytorch(): + lookup_inception_resnet_v1 = { + 'conv2d_1a': ['InceptionResnetV1/Conv2d_1a_3x3', load_tf_basicConv2d], + 'conv2d_2a': ['InceptionResnetV1/Conv2d_2a_3x3', load_tf_basicConv2d], + 'conv2d_2b': ['InceptionResnetV1/Conv2d_2b_3x3', load_tf_basicConv2d], + 'conv2d_3b': ['InceptionResnetV1/Conv2d_3b_1x1', load_tf_basicConv2d], + 'conv2d_4a': ['InceptionResnetV1/Conv2d_4a_3x3', load_tf_basicConv2d], + 'conv2d_4b': ['InceptionResnetV1/Conv2d_4b_3x3', load_tf_basicConv2d], + 'repeat_1': ['InceptionResnetV1/Repeat/block35', load_tf_repeat_1], + 'mixed_6a': ['InceptionResnetV1/Mixed_6a', load_tf_mixed6a], + 'repeat_2': ['InceptionResnetV1/Repeat_1/block17', load_tf_repeat_2], + 'mixed_7a': ['InceptionResnetV1/Mixed_7a', load_tf_mixed7a], + 'repeat_3': ['InceptionResnetV1/Repeat_2/block8', load_tf_repeat_3], + 'block8': ['InceptionResnetV1/Block8', load_tf_block17_8], + 'last_linear': ['InceptionResnetV1/Bottleneck/weights', load_tf_linear], + 'last_bn': ['InceptionResnetV1/Bottleneck/BatchNorm', load_tf_batchNorm], + 'logits': ['Logits', load_tf_linear], + } + + print('\nLoad VGGFace2-trained weights and save\n') + mdl = InceptionResnetV1(num_classes=8631).eval() + tf_mdl_dir = 'data/20180402-114759' + data_name = 'vggface2' + load_tf_model_weights(mdl, lookup_inception_resnet_v1, tf_mdl_dir) + state_dict = mdl.state_dict() + torch.save(state_dict, f'{tf_mdl_dir}-{data_name}.pt') + torch.save( + { + 'logits.weight': state_dict['logits.weight'], + 'logits.bias': state_dict['logits.bias'], + }, + f'{tf_mdl_dir}-{data_name}-logits.pt' + ) + state_dict.pop('logits.weight') + state_dict.pop('logits.bias') + torch.save(state_dict, f'{tf_mdl_dir}-{data_name}-features.pt') + + print('\nLoad CASIA-Webface-trained weights and save\n') + mdl = InceptionResnetV1(num_classes=10575).eval() + tf_mdl_dir = 'data/20180408-102900' + data_name = 'casia-webface' + load_tf_model_weights(mdl, lookup_inception_resnet_v1, tf_mdl_dir) + state_dict = mdl.state_dict() + torch.save(state_dict, f'{tf_mdl_dir}-{data_name}.pt') + torch.save( + { + 'logits.weight': state_dict['logits.weight'], + 'logits.bias': state_dict['logits.bias'], + }, + f'{tf_mdl_dir}-{data_name}-logits.pt' + ) + state_dict.pop('logits.weight') + state_dict.pop('logits.bias') + torch.save(state_dict, f'{tf_mdl_dir}-{data_name}-features.pt') + + lookup_pnet = { + 'conv1': ['pnet/conv1', load_tf_conv2d_trans], + 'prelu1': ['pnet/PReLU1', load_tf_linear], + 'conv2': ['pnet/conv2', load_tf_conv2d_trans], + 'prelu2': ['pnet/PReLU2', load_tf_linear], + 'conv3': ['pnet/conv3', load_tf_conv2d_trans], + 'prelu3': ['pnet/PReLU3', load_tf_linear], + 'conv4_1': ['pnet/conv4-1', load_tf_conv2d_trans], + 'conv4_2': ['pnet/conv4-2', load_tf_conv2d_trans], + } + lookup_rnet = { + 'conv1': ['rnet/conv1', load_tf_conv2d_trans], + 'prelu1': ['rnet/prelu1', load_tf_linear], + 'conv2': ['rnet/conv2', load_tf_conv2d_trans], + 'prelu2': ['rnet/prelu2', load_tf_linear], + 'conv3': ['rnet/conv3', load_tf_conv2d_trans], + 'prelu3': ['rnet/prelu3', load_tf_linear], + 'dense4': ['rnet/conv4', load_tf_linear], + 'prelu4': ['rnet/prelu4', load_tf_linear], + 'dense5_1': ['rnet/conv5-1', load_tf_linear], + 'dense5_2': ['rnet/conv5-2', load_tf_linear], + } + lookup_onet = { + 'conv1': ['onet/conv1', load_tf_conv2d_trans], + 'prelu1': ['onet/prelu1', load_tf_linear], + 'conv2': ['onet/conv2', load_tf_conv2d_trans], + 'prelu2': ['onet/prelu2', load_tf_linear], + 'conv3': ['onet/conv3', load_tf_conv2d_trans], + 'prelu3': ['onet/prelu3', load_tf_linear], + 'conv4': ['onet/conv4', load_tf_conv2d_trans], + 'prelu4': ['onet/prelu4', load_tf_linear], + 'dense5': ['onet/conv5', load_tf_linear], + 'prelu5': ['onet/prelu5', load_tf_linear], + 'dense6_1': ['onet/conv6-1', load_tf_linear], + 'dense6_2': ['onet/conv6-2', load_tf_linear], + 'dense6_3': ['onet/conv6-3', load_tf_linear], + } + + print('\nLoad PNet weights and save\n') + tf_mdl_dir = lambda sess: detect_face.create_mtcnn(sess, None) + mdl = PNet() + data_name = 'pnet' + load_tf_model_weights(mdl, lookup_pnet, tf_mdl_dir, is_resnet=False, arg_num=0) + torch.save(mdl.state_dict(), f'data/{data_name}.pt') + tf.reset_default_graph() + with tf.Session() as sess: + compare_mtcnn(mdl, tf_mdl_dir, sess, 0, torch.randn(1, 256, 256, 3).detach()) + + print('\nLoad RNet weights and save\n') + mdl = RNet() + data_name = 'rnet' + load_tf_model_weights(mdl, lookup_rnet, tf_mdl_dir, is_resnet=False, arg_num=1) + torch.save(mdl.state_dict(), f'data/{data_name}.pt') + tf.reset_default_graph() + with tf.Session() as sess: + compare_mtcnn(mdl, tf_mdl_dir, sess, 1, torch.randn(1, 24, 24, 3).detach()) + + print('\nLoad ONet weights and save\n') + mdl = ONet() + data_name = 'onet' + load_tf_model_weights(mdl, lookup_onet, tf_mdl_dir, is_resnet=False, arg_num=2) + torch.save(mdl.state_dict(), f'data/{data_name}.pt') + tf.reset_default_graph() + with tf.Session() as sess: + compare_mtcnn(mdl, tf_mdl_dir, sess, 2, torch.randn(1, 48, 48, 3).detach()) diff --git a/Tooling/model/facenet_pytorch/models/utils/training.py b/Tooling/model/facenet_pytorch/models/utils/training.py new file mode 100644 index 0000000..20f81df --- /dev/null +++ b/Tooling/model/facenet_pytorch/models/utils/training.py @@ -0,0 +1,144 @@ +import torch +import numpy as np +import time + + +class Logger(object): + + def __init__(self, mode, length, calculate_mean=False): + self.mode = mode + self.length = length + self.calculate_mean = calculate_mean + if self.calculate_mean: + self.fn = lambda x, i: x / (i + 1) + else: + self.fn = lambda x, i: x + + def __call__(self, loss, metrics, i): + track_str = '\r{} | {:5d}/{:<5d}| '.format(self.mode, i + 1, self.length) + loss_str = 'loss: {:9.4f} | '.format(self.fn(loss, i)) + metric_str = ' | '.join('{}: {:9.4f}'.format(k, self.fn(v, i)) for k, v in metrics.items()) + print(track_str + loss_str + metric_str + ' ', end='') + if i + 1 == self.length: + print('') + + +class BatchTimer(object): + """Batch timing class. + Use this class for tracking training and testing time/rate per batch or per sample. + + Keyword Arguments: + rate {bool} -- Whether to report a rate (batches or samples per second) or a time (seconds + per batch or sample). (default: {True}) + per_sample {bool} -- Whether to report times or rates per sample or per batch. + (default: {True}) + """ + + def __init__(self, rate=True, per_sample=True): + self.start = time.time() + self.end = None + self.rate = rate + self.per_sample = per_sample + + def __call__(self, y_pred, y): + self.end = time.time() + elapsed = self.end - self.start + self.start = self.end + self.end = None + + if self.per_sample: + elapsed /= len(y_pred) + if self.rate: + elapsed = 1 / elapsed + + return torch.tensor(elapsed) + + +def accuracy(logits, y): + _, preds = torch.max(logits, 1) + return (preds == y).float().mean() + + +def pass_epoch( + model, loss_fn, loader, optimizer=None, scheduler=None, + batch_metrics={'time': BatchTimer()}, show_running=True, + device='cpu', writer=None +): + """Train or evaluate over a data epoch. + + Arguments: + model {torch.nn.Module} -- Pytorch model. + loss_fn {callable} -- A function to compute (scalar) loss. + loader {torch.utils.data.DataLoader} -- A pytorch data loader. + + Keyword Arguments: + optimizer {torch.optim.Optimizer} -- A pytorch optimizer. + scheduler {torch.optim.lr_scheduler._LRScheduler} -- LR scheduler (default: {None}) + batch_metrics {dict} -- Dictionary of metric functions to call on each batch. The default + is a simple timer. A progressive average of these metrics, along with the average + loss, is printed every batch. (default: {{'time': iter_timer()}}) + show_running {bool} -- Whether or not to print losses and metrics for the current batch + or rolling averages. (default: {False}) + device {str or torch.device} -- Device for pytorch to use. (default: {'cpu'}) + writer {torch.utils.tensorboard.SummaryWriter} -- Tensorboard SummaryWriter. (default: {None}) + + Returns: + tuple(torch.Tensor, dict) -- A tuple of the average loss and a dictionary of average + metric values across the epoch. + """ + + mode = 'Train' if model.training else 'Valid' + logger = Logger(mode, length=len(loader), calculate_mean=show_running) + loss = 0 + metrics = {} + + for i_batch, (x, y) in enumerate(loader): + x = x.to(device) + y = y.to(device) + y_pred = model(x) + loss_batch = loss_fn(y_pred, y) + + if model.training: + loss_batch.backward() + optimizer.step() + optimizer.zero_grad() + + metrics_batch = {} + for metric_name, metric_fn in batch_metrics.items(): + metrics_batch[metric_name] = metric_fn(y_pred, y).detach().cpu() + metrics[metric_name] = metrics.get(metric_name, 0) + metrics_batch[metric_name] + + if writer is not None and model.training: + if writer.iteration % writer.interval == 0: + writer.add_scalars('loss', {mode: loss_batch.detach().cpu()}, writer.iteration) + for metric_name, metric_batch in metrics_batch.items(): + writer.add_scalars(metric_name, {mode: metric_batch}, writer.iteration) + writer.iteration += 1 + + loss_batch = loss_batch.detach().cpu() + loss += loss_batch + if show_running: + logger(loss, metrics, i_batch) + else: + logger(loss_batch, metrics_batch, i_batch) + + if model.training and scheduler is not None: + scheduler.step() + + loss = loss / (i_batch + 1) + metrics = {k: v / (i_batch + 1) for k, v in metrics.items()} + + if writer is not None and not model.training: + writer.add_scalars('loss', {mode: loss.detach()}, writer.iteration) + for metric_name, metric in metrics.items(): + writer.add_scalars(metric_name, {mode: metric}) + + return loss, metrics + + +def collate_pil(x): + out_x, out_y = [], [] + for xx, yy in x: + out_x.append(xx) + out_y.append(yy) + return out_x, out_y diff --git a/Tooling/model/facenet_pytorch/setup.py b/Tooling/model/facenet_pytorch/setup.py new file mode 100644 index 0000000..a884c1f --- /dev/null +++ b/Tooling/model/facenet_pytorch/setup.py @@ -0,0 +1,44 @@ +import setuptools, os + +PACKAGE_NAME = 'facenet-pytorch' +VERSION = '2.5.2' +AUTHOR = 'Tim Esler' +EMAIL = 'tim.esler@gmail.com' +DESCRIPTION = 'Pretrained Pytorch face detection and recognition models' +GITHUB_URL = 'https://github.com/timesler/facenet-pytorch' + +parent_dir = os.path.dirname(os.path.realpath(__file__)) +import_name = os.path.basename(parent_dir) + +with open('{}/README.md'.format(parent_dir), 'r') as f: + long_description = f.read() + +setuptools.setup( + name=PACKAGE_NAME, + version=VERSION, + author=AUTHOR, + author_email=EMAIL, + description=DESCRIPTION, + long_description=long_description, + long_description_content_type='text/markdown', + url=GITHUB_URL, + packages=[ + 'facenet_pytorch', + 'facenet_pytorch.models', + 'facenet_pytorch.models.utils', + 'facenet_pytorch.data', + ], + package_dir={'facenet_pytorch':'.'}, + package_data={'': ['*net.pt']}, + classifiers=[ + "Programming Language :: Python :: 3", + "License :: OSI Approved :: MIT License", + "Operating System :: OS Independent", + ], + install_requires=[ + 'numpy', + 'requests', + 'torchvision', + 'pillow', + ], +) diff --git a/Tooling/model/facenet_pytorch/tests/perf_test.py b/Tooling/model/facenet_pytorch/tests/perf_test.py new file mode 100644 index 0000000..363c569 --- /dev/null +++ b/Tooling/model/facenet_pytorch/tests/perf_test.py @@ -0,0 +1,39 @@ +from facenet_pytorch import MTCNN, training +import torch +from torchvision import datasets, transforms +from torch.utils.data import DataLoader, RandomSampler +from tqdm import tqdm +import time + + +def main(): + device = 'cuda' if torch.cuda.is_available() else 'cpu' + print(f'Running on device "{device}"') + + mtcnn = MTCNN(device=device) + + batch_size = 32 + + # Generate data loader + ds = datasets.ImageFolder( + root='data/test_images/', + transform=transforms.Resize((512, 512)) + ) + dl = DataLoader( + dataset=ds, + num_workers=4, + collate_fn=training.collate_pil, + batch_size=batch_size, + sampler=RandomSampler(ds, replacement=True, num_samples=960), + ) + + start = time.time() + faces = [] + for x, _ in tqdm(dl): + faces.extend(mtcnn(x)) + elapsed = time.time() - start + print(f'Elapsed: {elapsed} | EPS: {len(dl) * batch_size / elapsed}') + + +if __name__ == '__main__': + main() diff --git a/Tooling/model/facenet_pytorch/tests/travis_requirements.txt b/Tooling/model/facenet_pytorch/tests/travis_requirements.txt new file mode 100644 index 0000000..b10c3c4 --- /dev/null +++ b/Tooling/model/facenet_pytorch/tests/travis_requirements.txt @@ -0,0 +1,14 @@ +numpy==1.16.2 +requests==2.21.0 +torch==1.3.1 +torchvision==0.4.2 +Pillow==6.1.0 +opencv-python>=4.1.0 +scipy==1.3.0 +pandas==0.24.2 +coverage==4.5.3 +codecov==2.0.15 +jupyter==1.0.0 +tensorboard==1.14.0 +future==0.17.1 +./ diff --git a/Tooling/model/facenet_pytorch/tests/travis_test.py b/Tooling/model/facenet_pytorch/tests/travis_test.py new file mode 100644 index 0000000..f75059f --- /dev/null +++ b/Tooling/model/facenet_pytorch/tests/travis_test.py @@ -0,0 +1,230 @@ +""" +The following code is intended to be run only by travis for continuius intengration and testing +purposes. For implementation examples see notebooks in the examples folder. +""" + +from PIL import Image, ImageDraw +import torch +from torch.utils.data import DataLoader +from torchvision import transforms, datasets +import numpy as np +import pandas as pd +from time import time +import sys, os +import glob + +from models.mtcnn import MTCNN, fixed_image_standardization +from models.inception_resnet_v1 import InceptionResnetV1, get_torch_home + + +#### CLEAR ALL OUTPUT FILES #### + +checkpoints = glob.glob(os.path.join(get_torch_home(), 'checkpoints/*')) +for c in checkpoints: + print('Removing {}'.format(c)) + os.remove(c) + +crop_files = glob.glob('data/test_images_aligned/**/*.png') +for c in crop_files: + print('Removing {}'.format(c)) + os.remove(c) + + +#### TEST EXAMPLE IPYNB'S #### + +os.system('jupyter nbconvert --to script --stdout examples/infer.ipynb examples/finetune.ipynb > examples/tmptest.py') +os.chdir('examples') +try: + import examples.tmptest +except: + import tmptest +os.chdir('..') + + +#### TEST MTCNN #### + +def get_image(path, trans): + img = Image.open(path) + img = trans(img) + return img + +trans = transforms.Compose([ + transforms.Resize(512) +]) + +trans_cropped = transforms.Compose([ + np.float32, + transforms.ToTensor(), + fixed_image_standardization +]) + +dataset = datasets.ImageFolder('data/test_images', transform=trans) +dataset.idx_to_class = {k: v for v, k in dataset.class_to_idx.items()} + +mtcnn_pt = MTCNN(device=torch.device('cpu')) + +names = [] +aligned = [] +aligned_fromfile = [] +for img, idx in dataset: + name = dataset.idx_to_class[idx] + start = time() + img_align = mtcnn_pt(img, save_path='data/test_images_aligned/{}/1.png'.format(name)) + print('MTCNN time: {:6f} seconds'.format(time() - start)) + + # Comparison between types + img_box = mtcnn_pt.detect(img)[0] + assert (img_box - mtcnn_pt.detect(np.array(img))[0]).sum() < 1e-2 + assert (img_box - mtcnn_pt.detect(torch.as_tensor(np.array(img)))[0]).sum() < 1e-2 + + # Batching test + assert (img_box - mtcnn_pt.detect([img, img])[0]).sum() < 1e-2 + assert (img_box - mtcnn_pt.detect(np.array([np.array(img), np.array(img)]))[0]).sum() < 1e-2 + assert (img_box - mtcnn_pt.detect(torch.as_tensor([np.array(img), np.array(img)]))[0]).sum() < 1e-2 + + # Box selection + mtcnn_pt.selection_method = 'probability' + print('\nprobability - ', mtcnn_pt.detect(img)) + mtcnn_pt.selection_method = 'largest' + print('largest - ', mtcnn_pt.detect(img)) + mtcnn_pt.selection_method = 'largest_over_theshold' + print('largest_over_theshold - ', mtcnn_pt.detect(img)) + mtcnn_pt.selection_method = 'center_weighted_size' + print('center_weighted_size - ', mtcnn_pt.detect(img)) + + if img_align is not None: + names.append(name) + aligned.append(img_align) + aligned_fromfile.append(get_image('data/test_images_aligned/{}/1.png'.format(name), trans_cropped)) + +aligned = torch.stack(aligned) +aligned_fromfile = torch.stack(aligned_fromfile) + + +#### TEST EMBEDDINGS #### + +expected = [ + [ + [0.000000, 1.482895, 0.886342, 1.438450, 1.437583], + [1.482895, 0.000000, 1.345686, 1.029880, 1.061939], + [0.886342, 1.345686, 0.000000, 1.363125, 1.338803], + [1.438450, 1.029880, 1.363125, 0.000000, 1.066040], + [1.437583, 1.061939, 1.338803, 1.066040, 0.000000] + ], + [ + [0.000000, 1.430769, 0.992931, 1.414197, 1.329544], + [1.430769, 0.000000, 1.253911, 1.144899, 1.079755], + [0.992931, 1.253911, 0.000000, 1.358875, 1.337322], + [1.414197, 1.144899, 1.358875, 0.000000, 1.204118], + [1.329544, 1.079755, 1.337322, 1.204118, 0.000000] + ] +] + +for i, ds in enumerate(['vggface2', 'casia-webface']): + resnet_pt = InceptionResnetV1(pretrained=ds).eval() + + start = time() + embs = resnet_pt(aligned) + print('\nResnet time: {:6f} seconds\n'.format(time() - start)) + + embs_fromfile = resnet_pt(aligned_fromfile) + + dists = [[(emb - e).norm().item() for e in embs] for emb in embs] + dists_fromfile = [[(emb - e).norm().item() for e in embs_fromfile] for emb in embs_fromfile] + + print('\nOutput:') + print(pd.DataFrame(dists, columns=names, index=names)) + print('\nOutput (from file):') + print(pd.DataFrame(dists_fromfile, columns=names, index=names)) + print('\nExpected:') + print(pd.DataFrame(expected[i], columns=names, index=names)) + + total_error = (torch.tensor(dists) - torch.tensor(expected[i])).norm() + total_error_fromfile = (torch.tensor(dists_fromfile) - torch.tensor(expected[i])).norm() + + print('\nTotal error: {}, {}'.format(total_error, total_error_fromfile)) + + if sys.platform != 'win32': + assert total_error < 1e-4 + assert total_error_fromfile < 1e-4 + + +#### TEST CLASSIFICATION #### + +resnet_pt = InceptionResnetV1(pretrained=ds, classify=True).eval() +prob = resnet_pt(aligned) + + +#### MULTI-FACE TEST #### + +mtcnn = MTCNN(keep_all=True) +img = Image.open('data/multiface.jpg') +boxes, probs = mtcnn.detect(img) + +draw = ImageDraw.Draw(img) +for i, box in enumerate(boxes): + draw.rectangle(box.tolist()) + +mtcnn(img, save_path='data/tmp.png') + + +#### MTCNN TYPES TEST #### + +img = Image.open('data/multiface.jpg') + +mtcnn = MTCNN(keep_all=True) +boxes_ref, _ = mtcnn.detect(img) +_ = mtcnn(img) + +mtcnn = MTCNN(keep_all=True).double() +boxes_test, _ = mtcnn.detect(img) +_ = mtcnn(img) + +box_diff = boxes_ref[np.argsort(boxes_ref[:,1])] - boxes_test[np.argsort(boxes_test[:,1])] +total_error = np.sum(np.abs(box_diff)) +print('\nfp64 Total box error: {}'.format(total_error)) + +assert total_error < 1e-2 + + +# half is not supported on CPUs, only GPUs +if torch.cuda.is_available(): + + mtcnn = MTCNN(keep_all=True, device='cuda').half() + boxes_test, _ = mtcnn.detect(img) + _ = mtcnn(img) + + box_diff = boxes_ref[np.argsort(boxes_ref[:,1])] - boxes_test[np.argsort(boxes_test[:,1])] + print('fp16 Total box error: {}'.format(np.sum(np.abs(box_diff)))) + + # test new automatic multi precision to compare + if hasattr(torch.cuda, 'amp'): + with torch.cuda.amp.autocast(): + mtcnn = MTCNN(keep_all=True, device='cuda') + boxes_test, _ = mtcnn.detect(img) + _ = mtcnn(img) + + box_diff = boxes_ref[np.argsort(boxes_ref[:,1])] - boxes_test[np.argsort(boxes_test[:,1])] + print('AMP total box error: {}'.format(np.sum(np.abs(box_diff)))) + + +#### MULTI-IMAGE TEST #### + +mtcnn = MTCNN(keep_all=True) +img = [ + Image.open('data/multiface.jpg'), + Image.open('data/multiface.jpg') +] +batch_boxes, batch_probs = mtcnn.detect(img) + +mtcnn(img, save_path=['data/tmp1.png', 'data/tmp1.png']) +tmp_files = glob.glob('data/tmp*') +for f in tmp_files: + os.remove(f) + + +#### NO-FACE TEST #### + +img = Image.new('RGB', (512, 512)) +mtcnn(img) +mtcnn(img, return_prob=True) diff --git a/Tooling/scripts/README.md b/Tooling/scripts/README.md new file mode 100644 index 0000000..261e794 --- /dev/null +++ b/Tooling/scripts/README.md @@ -0,0 +1,217 @@ +### Grading Scripts + + +- [Project-1 Part-1 Test Case 1](https://github.com/visa-lab/CSE546-Cloud-Computing/blob/main/scripts/project1_grader.py) + - Test Objective: + + | Test # | Test Case | Test Criteria | Poor | Good | Excellent | Total Points | + |--------|----------------------|------------------------------------------------------------------------------------------------------------------------------|------------------------------------------|-----------------------------------------------------|----------------------------------------------------------|--------------| + | 1 | Validate EC2 Instance | "To check if 1) If there exists a EC2 instance with name ""web-instance"" 2) if exists then check if the state of the web-instance in ""running""" | There is no EC2 intance with name "web-instance" (0) | The EC2 instance with the name "web-instance" exists; but is not in "running" state (5) | The EC2 instance with the name "web-instance" exists; and is in "running" state (10) | 10 | + + - How to run the script: + ``` + usage: project1_grader.py [-h] [--access_keyId ACCESS_KEYID] [--access_key ACCESS_KEY] + Grading Script + options: + -h, --help show this help message and exit + --access_keyId ACCESS_KEYID ACCCESS KEY ID of the grading IAM user + --access_key ACCESS_KEY SECRET ACCCESS KEY of the grading IAM user + ``` + +- [Project-1 Part-2 Grading Script](https://github.com/visa-lab/CSE546-Cloud-Computing/blob/main/scripts/p2_grader.py): + + - How to use the script: + ``` + usage: p2_grader.py [-h] [--access_keyId ACCESS_KEYID] [--access_key ACCESS_KEY] [--req_sqs REQ_SQS] [--resp_sqs RESP_SQS] [--in_bucket IN_BUCKET] [--out_bucket OUT_BUCKET] + Grading Script + options: + -h, --help show this help message and exit + --access_keyId ACCESS_KEYID ACCCESS KEY ID of the grading IAM user + --access_key ACCESS_KEY SECRET ACCCESS KEY of the grading IAM user + --req_sqs REQ_SQS Name of the Request SQS Queue + --resp_sqs RESP_SQS Name of the Response SQS Queue + --in_bucket IN_BUCKET Name of the S3 Input Bucket + --out_bucket OUT_BUCKET Name of the S3 Output Bucket + ``` + **Note**: We will follow the naming conventions for S3 Bucket and SQS Queue names as described in the project document to grade your submission + + ``` + ============================================================================= + ======== Welcome to CSE546 Cloud Computing AWS Console ====================== + ============================================================================= + IAM ACESS KEY ID: XXXXXXXXXXXXX + IAM SECRET ACCESS KEY: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + ============================================================================= + 1 - Validate EC2 Instances + 2 - Validate S3 Buckets + 3 - Validate SQS Queues + 4 - Validate autoscaling + 0 - Exit + Enter a choice: + ``` + + + - **Validate EC2 Instance**: + ``` + ============================================================================= + ======== Welcome to CSE546 Cloud Computing AWS Console ====================== + ============================================================================= + IAM ACESS KEY ID: XXXXXXXXXXXXX + IAM SECRET ACCESS KEY: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + ============================================================================= + 1 - Validate EC2 Instances + 2 - Validate S3 Buckets + 3 - Validate SQS Queues + 4 - Validate autoscaling + 0 - Exit + Enter a choice: + 1 + Found 1 web-tier instances in running state. + Found 0 app-tier instanes in running state + ``` + + - **Validate S3 Buckets** + ``` + ============================================================================= + ======== Welcome to CSE546 Cloud Computing AWS Console ====================== + ============================================================================= + IAM ACESS KEY ID: XXXXXXXXXXXXX + IAM SECRET ACCESS KEY: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + ============================================================================= + 1 - Validate EC2 Instances + 2 - Validate S3 Buckets + 3 - Validate SQS Queues + 4 - Validate autoscaling + 0 - Exit + Enter a choice: + 2 + - WARN: If there are objects in the S3 buckets; they will be deleted + --------------------------------------------------------- + S3 Input Bucket:12345678910-in-bucket has 0 object(s) + S3 Output Bucket:12345678910-out-bucket has 0 object(s) + ``` + + - **Validate SQS Queue** + ``` + ============================================================================= + ======== Welcome to CSE546 Cloud Computing AWS Console ====================== + ============================================================================= + IAM ACESS KEY ID: XXXXXXXXXXXXX + IAM SECRET ACCESS KEY: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + ============================================================================= + 1 - Validate EC2 Instances + 2 - Validate S3 Buckets + 3 - Validate SQS Queues + 4 - Validate autoscaling + 0 - Exit + Enter a choice: + 3 + - The expectation is the both the Request and Response SQS should exist and be EMPTY + - WARN: This will purge any messages available in the SQS + --------------------------------------------------------- + SQS Request Queue:12345678910-req-queue has 0 pending messages. + SQS Response Queue:12345678910-resp-queue has 0 pending messages. + ``` + + - **Validate autoscaling** + ``` + ============================================================================= + ======== Welcome to CSE546 Cloud Computing AWS Console ====================== + ============================================================================= + IAM ACESS KEY ID: XXXXXXXXXXXXX + IAM SECRET ACCESS KEY: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + ============================================================================= + 1 - Validate EC2 Instances + 2 - Validate S3 Buckets + 3 - Validate SQS Queues + 4 - Validate autoscaling + 0 - Exit + Enter a choice: + 4 + - Run this BEFORE the workload generator client starts. Press Ctrl^C to exit. + - The expectation is as follows: + -- # of app tier instances should gradually scale and eventually reduce back to 0 + -- # of SQS messages should gradually increase and eventually reduce back to 0 + ------------------------------------------------------------------------------------------------------------------ + | # of messages in | # of messages in | # of EC2 instances | # of objects in S3 | # of objects in S3 | + | SQS Request Queue | SQS Response Queue | in running state | Input Bucket | Output Bucket | + ------------------------------------------------------------------------------------------------------------------ + | 0 | 0 | 0 | 0 | 0 | + ------------------------------------------------------------------------------------------------------------------ + | 0 | 0 | 0 | 0 | 0 | + ------------------------------------------------------------------------------------------------------------------ + | 0 | 0 | 0 | 0 | 0 | + ------------------------------------------------------------------------------------------------------------------ + | 50 | 0 | 0 | 0 | 0 | + ------------------------------------------------------------------------------------------------------------------ + | 0 | 0 | 0 | 0 | 0 | + ------------------------------------------------------------------------------------------------------------------ + | 50 | 0 | 0 | 0 | 0 | + ------------------------------------------------------------------------------------------------------------------ + | 50 | 0 | 1 | 0 | 0 | + ------------------------------------------------------------------------------------------------------------------ + | 50 | 0 | 2 | 0 | 0 | + ------------------------------------------------------------------------------------------------------------------ + | 50 | 0 | 4 | 0 | 0 | + ------------------------------------------------------------------------------------------------------------------ + | 50 | 0 | 8 | 0 | 0 | + ------------------------------------------------------------------------------------------------------------------ + | 50 | 0 | 11 | 0 | 0 | + ------------------------------------------------------------------------------------------------------------------ + | 50 | 0 | 16 | 0 | 0 | + ------------------------------------------------------------------------------------------------------------------ + | 50 | 0 | 17 | 0 | 0 | + ------------------------------------------------------------------------------------------------------------------ + | 50 | 0 | 19 | 0 | 0 | + ------------------------------------------------------------------------------------------------------------------ + | 50 | 0 | 20 | 0 | 0 | + ------------------------------------------------------------------------------------------------------------------ + | 48 | 0 | 20 | 2 | 2 | + ------------------------------------------------------------------------------------------------------------------ + | 35 | 0 | 20 | 2 | 2 | + ------------------------------------------------------------------------------------------------------------------ + | 35 | 0 | 20 | 9 | 9 | + ------------------------------------------------------------------------------------------------------------------ + | 35 | 0 | 20 | 12 | 12 | + ------------------------------------------------------------------------------------------------------------------ + | 32 | 0 | 20 | 21 | 21 | + ------------------------------------------------------------------------------------------------------------------ + | 42 | 4 | 20 | 28 | 29 | + ------------------------------------------------------------------------------------------------------------------ + | 0 | 0 | 20 | 40 | 40 | + ------------------------------------------------------------------------------------------------------------------ + | 0 | 0 | 20 | 47 | 47 | + ------------------------------------------------------------------------------------------------------------------ + | 4 | 0 | 20 | 49 | 49 | + ------------------------------------------------------------------------------------------------------------------ + | 41 | 4 | 20 | 49 | 49 | + ------------------------------------------------------------------------------------------------------------------ + | 0 | 3 | 20 | 49 | 49 | + ------------------------------------------------------------------------------------------------------------------ + | 0 | 12 | 20 | 49 | 49 | + ------------------------------------------------------------------------------------------------------------------ + | 0 | 0 | 20 | 49 | 49 | + ------------------------------------------------------------------------------------------------------------------ + | 0 | 0 | 20 | 49 | 49 | + ------------------------------------------------------------------------------------------------------------------ + | 0 | 8 | 20 | 49 | 49 | + ------------------------------------------------------------------------------------------------------------------ + | 0 | 0 | 20 | 50 | 50 | + ------------------------------------------------------------------------------------------------------------------ + | 0 | 3 | 20 | 50 | 50 | + ------------------------------------------------------------------------------------------------------------------ + | 0 | 0 | 20 | 50 | 50 | + ------------------------------------------------------------------------------------------------------------------ + | 0 | 0 | 15 | 50 | 50 | + ------------------------------------------------------------------------------------------------------------------ + | 0 | 0 | 6 | 50 | 50 | + ------------------------------------------------------------------------------------------------------------------ + | 0 | 0 | 0 | 50 | 50 | + ------------------------------------------------------------------------------------------------------------------ + | 0 | 0 | 0 | 50 | 50 | + ------------------------------------------------------------------------------------------------------------------ + ``` + The above example output is for a 50-requests workload. + + +**Note**: This does not show all the test cases for the project. Please refer to the project document for more details. diff --git a/Tooling/scripts/p2_grader.py b/Tooling/scripts/p2_grader.py new file mode 100644 index 0000000..ec1bf00 --- /dev/null +++ b/Tooling/scripts/p2_grader.py @@ -0,0 +1,202 @@ +__copyright__ = "Copyright 2024, VISA Lab" +__license__ = "MIT" + +import os +import pdb +import time +import json +import boto3 +import httpx +import sys +import argparse +import textwrap + +class aws_grader(): + def __init__(self, access_keyId, access_key, req_sqs, resp_sqs, in_bucket, out_bucket): + + self.iam_access_keyId = access_keyId + self.iam_secret_access_key = access_key + self.iam_session = boto3.Session(aws_access_key_id = self.iam_access_keyId, + aws_secret_access_key = self.iam_secret_access_key) + self.ec2_resources = self.iam_session.resource('ec2', 'us-east-1') + self.s3_resources = self.iam_session.resource('s3', 'us-east-1') + self.sqs_resources = self.iam_session.resource('sqs', 'us-east-1') + self.sqs_client = self.iam_session.client('sqs', 'us-east-1') + self.req_sqs_name = req_sqs + self.resp_sqs_name = resp_sqs + self.in_bucket_name = in_bucket + self.out_bucket_name = out_bucket + self.app_tier_tag = "app-tier-instance" + self.web_tier_tag = "web-instance" + + def get_instance_details(self, tag, state): + instances = self.ec2_resources.instances.filter( + Filters=[ + {'Name': 'tag:Name', 'Values': [tag+"*"]}, + {'Name': 'instance-state-name', 'Values': [state]} + ] + ) + return len(list(instances)) + + def validate_ec2_instance(self): + web_instances = self.get_instance_details(self.web_tier_tag, 'running') + app_instances = self.get_instance_details(self.app_tier_tag, 'running') + print(f"Found {web_instances} web-tier instances in running state.") + print(f"Found {app_instances} app-tier instanes in running state") + + def empty_s3_bucket(self, bucket_name): + bucket = self.s3_resources.Bucket(bucket_name) + bucket.objects.all().delete() + print(f"{bucket_name} S3 Bucket is now EMPTY !!") + + def count_bucket_objects(self, bucket_name): + bucket = self.s3_resources.Bucket(bucket_name) + count = 0 + for index in bucket.objects.all(): + count += 1 + #print(f"{bucket_name} S3 Bucket has {count} objects !!") + return count + + def validate_s3_buckets(self): + print(" - WARN: If there are objects in the S3 buckets; they will be deleted") + print(" ---------------------------------------------------------") + ip_obj_count = self.count_bucket_objects(self.in_bucket_name) + op_obj_count = self.count_bucket_objects(self.out_bucket_name) + + print(f"S3 Input Bucket:{self.in_bucket_name} has {ip_obj_count} object(s)") + print(f"S3 Output Bucket:{self.out_bucket_name} has {op_obj_count} object(s)") + + if ip_obj_count: + self.empty_s3_bucket(self.in_bucket_name) + if op_obj_count: + self.empty_s3_bucket(self.out_bucket_name) + + def get_sqs_queue_length(self, sqs_queue_name): + num_requests = self.sqs_client.get_queue_attributes( + QueueUrl=sqs_queue_name, + AttributeNames=['ApproximateNumberOfMessages']) + return int(num_requests['Attributes']['ApproximateNumberOfMessages']) + + def validate_sqs_queues(self): + print(" - The expectation is the both the Request and Response SQS should exist and be EMPTY") + print(" - WARN: This will purge any messages available in the SQS") + print(" ---------------------------------------------------------") + + try: + req_sqs = self.sqs_resources.get_queue_by_name(QueueName=self.req_sqs_name) + resp_sqs = self.sqs_resources.get_queue_by_name(QueueName=self.resp_sqs_name) + + ip_queue_requests = self.get_sqs_queue_length(self.req_sqs_name) + op_queue_response = self.get_sqs_queue_length(self.resp_sqs_name) + + print(f"SQS Request Queue:{self.req_sqs_name} has {ip_queue_requests} pending messages.") + print(f"SQS Response Queue:{self.resp_sqs_name} has {op_queue_response} pending messages.") + + if ip_queue_requests: + print(" - WARN: Purging the Requeust SQS. Waiting 60 seconds ..") + self.sqs_client.purge_queue(QueueUrl=self.req_sqs_name) + time.sleep(60) + + if op_queue_response: + print(" - WARN: Purging the SQS. Waiitng 60 seconds ..") + self.sqs_client.purge_queue(QueueUrl=self.resp_sqs_name) + time.sleep(60) + + except Exception as ex: + print(f"SQS Queues Error: {ex}. Please Check your AWS Account") + + def beautify_headers(self): + + column1 = " # of messages in SQS Request Queue " + column2 = " # of messages in SQS Response Queue " + column3 = " # of EC2 instances in running state " + column4 = " # of objects in S3 Input Bucket " + column5 = " # of objects in S3 Output Buket " + + column_width = 20 + wrapped_column1 = textwrap.fill(column1, column_width) + wrapped_column2 = textwrap.fill(column2, column_width) + wrapped_column3 = textwrap.fill(column3, column_width) + wrapped_column4 = textwrap.fill(column4, column_width) + wrapped_column5 = textwrap.fill(column5, column_width) + lines1 = wrapped_column1.split('\n') + lines2 = wrapped_column2.split('\n') + lines3 = wrapped_column3.split('\n') + lines4 = wrapped_column4.split('\n') + lines5 = wrapped_column5.split('\n') + + print("-" * 114) + for line1, line2, line3, line4, line5 in zip(lines1, lines2, lines3, lines4, lines5): + print(f"| {line1.center(column_width)} | {line2.center(column_width)} | {line3.center(column_width)} | {line4.center(column_width)} | {line5.center(column_width)} |") + + print("-" *114) + + def validate_autoscaling(self): + print(" - Run this BEFORE the workload generator client starts. Press Ctrl^C to exit.") + print(" - The expectation is as follows:") + print(" -- # of app tier instances should gradually scale and eventually reduce back to 0") + print(" -- # of SQS messages should gradually increase and eventually reduce back to 0") + self.beautify_headers() + format_string = "| {:^20} | {:^20} | {:^20} | {:^20} | {:^20} |" + + while True: + req_queue_count = self.get_sqs_queue_length(self.req_sqs_name) + resp_queue_count = self.get_sqs_queue_length(self.resp_sqs_name) + num_instances = self.get_instance_details(self.app_tier_tag, 'running') + ip_obj_count = self.count_bucket_objects(self.in_bucket_name) + op_obj_count = self.count_bucket_objects(self.out_bucket_name) + print(format_string.format(req_queue_count, resp_queue_count, num_instances, ip_obj_count, op_obj_count)) + print("-" * 114) + time.sleep(2) + + def display_menu(self): + print("\n") + print("=============================================================================") + print("======== Welcome to CSE546 Cloud Computing AWS Console ======================") + print("=============================================================================") + print(f"IAM ACESS KEY ID: {self.iam_access_keyId}") + print(f"IAM SECRET ACCESS KEY: {self.iam_secret_access_key}") + print("=============================================================================") + print("1 - Validate EC2 Instances") + print("2 - Validate S3 Buckets") + print("3 - Validate SQS Queues") + print("4 - Validate autoscaling") + print("0 - Exit") + print("Enter a choice:") + choice = input() + return choice + + def main(self): + while(1): + choice = self.display_menu() + if int(choice) == 1: + self.validate_ec2_instance() + elif int(choice) == 2: + self.validate_s3_buckets() + elif int(choice) == 3: + self.validate_sqs_queues() + elif int(choice) == 4: + self.validate_autoscaling() + elif int(choice) == 0: + break + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description='Grading Script') + parser.add_argument('--access_keyId', type=str, help='ACCCESS KEY ID of the grading IAM user') + parser.add_argument('--access_key', type=str, help='SECRET ACCCESS KEY of the grading IAM user') + parser.add_argument('--req_sqs', type=str, help="Name of the Request SQS Queue") + parser.add_argument('--resp_sqs', type=str, help="Name of the Response SQS Queue") + parser.add_argument('--in_bucket', type=str, help='Name of the S3 Input Bucket') + parser.add_argument('--out_bucket', type=str, help='Name of the S3 Output Bucket') + + args = parser.parse_args() + + access_keyId = args.access_keyId + access_key = args.access_key + req_sqs = args.req_sqs + resp_sqs = args.resp_sqs + in_bucket = args.in_bucket + out_bucket = args.out_bucket + + aws_obj = aws_grader(access_keyId, access_key, req_sqs, resp_sqs, in_bucket, out_bucket) + aws_obj.main() diff --git a/Tooling/scripts/project1_grader.py b/Tooling/scripts/project1_grader.py new file mode 100644 index 0000000..1689620 --- /dev/null +++ b/Tooling/scripts/project1_grader.py @@ -0,0 +1,78 @@ +__copyright__ = "Copyright 2024, VISA Lab" +__license__ = "MIT" + +import os +import boto3 +import dotenv +import httpx +import pdb +import json +import argparse + +class aws_grader(): + def __init__(self, access_keyId, access_key): + + self.iam_access_keyId = access_keyId + self.iam_secret_access_key = access_key + self.iam_session = boto3.Session(aws_access_key_id = self.iam_access_keyId, + aws_secret_access_key = self.iam_secret_access_key) + self.ec2_resources = self.iam_session.resource('ec2', 'us-east-1') + + def get_tag(self, tags, key='Name'): + + if not tags: + return 'None' + for tag in tags: + if tag['Key'] == key: + return tag['Value'] + return 'None' + + + ''' + Test Case:1 + 1) Checks if there is a web EC2 instance with the name "web-instance" + 2) Checks if the state of "web-instance" is "running". + ''' + + def test_case_1(self): + message = "" + for instance in self.ec2_resources.instances.all(): + name = self.get_tag(instance.tags) + if name == "web-instance": + message += "web-tier instance found." + state = instance.state['Name'] + message += f" With state: {state}" + if state == "running": + self.web_tier_instanceId = instance.id + print(f"Test Case:1 Passed. {message}") + return + else: + print(f"Test Case:1 Failed. {message}") + return + + message += "web-tier Instance Not Found." + print("Test Case:1 Failed. {message}") + + + def main(self): + # Use the session to access resources via the role + + print("======== Welcome to CSE546 Cloud Computing Grading Console ==================") + print(f"IAM ACESS KEY ID: {self.iam_access_keyId}") + print(f"IAM SECRET ACCESS KEY: {self.iam_secret_access_key}") + + self.test_case_1() + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description='Upload images') + parser.add_argument('--access_keyId', type=str, help='ACCCESS KEY ID of the grading IAM user') + parser.add_argument('--access_key', type=str, help='SECRET ACCCESS KEY of the grading IAM user') + + args = parser.parse_args() + + access_keyId = args.access_keyId + access_key = args.access_key + + aws_obj = aws_grader(access_keyId, access_key) + aws_obj.main() diff --git a/Tooling/workload_generator/README.md b/Tooling/workload_generator/README.md new file mode 100644 index 0000000..d04ecd5 --- /dev/null +++ b/Tooling/workload_generator/README.md @@ -0,0 +1,54 @@ +# CSE546 workload_generator + +This repository contains code examples for you to use our workload generator. + +Usage: +``` +usage: workload_generator.py [-h] [--num_request NUM_REQUEST] [--url URL] [--image_folder IMAGE_FOLDER] [--prediction_file PREDICTION_FILE] +Upload images +options: + -h, --help show this help message and exit + --num_request NUM_REQUEST + one image per request + --url URL URL to the backend server, e.g. http://3.86.108.221:8000/ + --image_folder IMAGE_FOLDER + the path of the folder where images are saved + --prediction_file PREDICTION_FILE + the path of the classification results file +``` + +Examples: + +The following command sends three requests to a php backend. +``` +python3 workload_generator.py \ + --num_request 3 \ + --url 'http://your_host_ip/php_server.php' \ + --image_folder "your_local_image_folder" \ + --prediction_file "ground_truth_prediction_file" +``` + +The following command sends three requests to a node.js/Python backend. +``` +python3 workload_generator.py \ + --num_request 3 \ + --url 'http://:' \ + --image_folder "your_local_image_folder" \ + --prediction_file "ground_truth_prediction_file" +``` +**Note**: The workload generator accepts the absolute path in the command line arguments. + +Sample output: +``` +test_411.jpg uploaded! +Classification result: test_411:Emily +Waiting ... +. ++++++ Test Result Statistics +++++ +Total number of requests: 1000 +Total number of requests completed successfully: 1000 +Total number of failed requests: 0 +Total number of correct predictions: 1000 +Total number of wrong predictions: 0 +Total Test Duration: 2.104762077331543 (seconds) +``` diff --git a/Tooling/workload_generator/workload_generator.py b/Tooling/workload_generator/workload_generator.py new file mode 100644 index 0000000..e4742b2 --- /dev/null +++ b/Tooling/workload_generator/workload_generator.py @@ -0,0 +1,95 @@ +__copyright__ = "Copyright 2024, VISA Lab" +__license__ = "MIT" + +import sys +import os +import time +import _thread +import argparse +import requests +import subprocess +import numpy as np +import pandas as pd +import threading +from concurrent.futures import ThreadPoolExecutor +from concurrent.futures import as_completed + +parser = argparse.ArgumentParser(description='Upload images') +parser.add_argument('--num_request', type=int, help='one image per request') +parser.add_argument('--url', type=str, help='URL to the backend server, e.g. http://3.86.108.221:8000/') +parser.add_argument('--image_folder', type=str, help='the path of the folder where images are saved') +parser.add_argument('--prediction_file', type=str, help='the path of the classification results file') +args = parser.parse_args() + +num_request = args.num_request +url = args.url +image_folder = args.image_folder +prediction_file = args.prediction_file +prediction_df = pd.read_csv(prediction_file) +responses = 0 +err_responses = 0 +correct_predictions = 0 +wrong_predictions = 0 +ex_requests = [] + +def send_one_request(image_path): + global prediction_df, responses, err_responses, correct_predictions, wrong_predictions, ex_requests + # Define http payload, "myfile" is the key of the http payload + file = {"inputFile": open(image_path,'rb')} + try: + response = requests.post(url, files=file) + # Print error message if failed + if response.status_code != 200: + print('sendErr: '+response.url) + err_responses +=1 + else : + filename = os.path.basename(image_path) + image_msg = filename + ' uploaded!' + msg = image_msg + '\n' + 'Classification result: ' + response.text + print(msg) + responses +=1 + correct_result = prediction_df.loc[prediction_df['Image'] == filename.split('.')[0], 'Results'].iloc[0] + if correct_result.strip() == response.text.split(':')[1].strip(): + correct_predictions +=1 + else: + wrong_predictions +=1 + except requests.exceptions.RequestException as errex: + print("Exception:", errex) + ex_requests.append(image_path) + +num_max_workers = 100 +image_path_list = [] +test_start_time = time.time() + +for i, name in enumerate(os.listdir(image_folder)): + if i == num_request: + break + image_path_list.append(os.path.join(image_folder,name)) + +with ThreadPoolExecutor(max_workers = num_max_workers) as executor: + executor.map(send_one_request, image_path_list) + +print(f"Attempt-1 {responses}/{num_request} requests successful.") + +# Retry requests until all requests are successful or ex_requests is empty +retry_attempt=2 +while ex_requests: + retry_requests = ex_requests.copy() + ex_requests.clear() + with ThreadPoolExecutor(max_workers=num_max_workers) as executor: + executor.map(send_one_request, retry_requests) + print(f"Attempt-{retry_attempt} {responses}/{num_request} requests successful.") + retry_attempt += 1 + +test_duration = time.time() - test_start_time +print("All requests have been processed or retried.") + +if num_request == (responses + err_responses): + print (f"+++++ Test Result Statistics +++++") + print (f"Total number of requests: {num_request}") + print (f"Total number of requests completed successfully: {responses}") + print (f"Total number of failed requests: {err_responses}") + print (f"Total number of correct predictions : {correct_predictions}") + print (f"Total number of wrong predictions: {wrong_predictions}") + print (f"Total Test Duration: {test_duration} (seconds)") + print ("++++++++++++++++++++++++++++++++++++")