File size: 4,055 Bytes
c0242b5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6c17d8b
c0242b5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# Author: aqeelanwar
# Created: 27 April,2020, 10:22 PM
# Email: [email protected]

import argparse
import dlib
from aux_functions import *
import numpy as np

def maskThisImages(myImg):

    # Command-line input setup
    parser = argparse.ArgumentParser(
        description="MaskTheFace - Python code to mask faces dataset"
    )
    parser.add_argument(
        "--path",
        type=str,
        default="",
        help="Path to either the folder containing images or the image itself",
    )
    parser.add_argument(
        "--mask_type",
        type=str,
        default="surgical",
        choices=["surgical", "N95", "KN95", "cloth", "gas", "inpaint", "random", "all"],
        help="Type of the mask to be applied. Available options: all, surgical_blue, surgical_green, N95, cloth",
    )

    parser.add_argument(
        "--pattern",
        type=str,
        default="",
        help="Type of the pattern. Available options in masks/textures",
    )

    parser.add_argument(
        "--pattern_weight",
        type=float,
        default=0.5,
        help="Weight of the pattern. Must be between 0 and 1",
    )

    parser.add_argument(
        "--color",
        type=str,
        default="#0473e2",
        help="Hex color value that need to be overlayed to the mask",
    )

    parser.add_argument(
        "--color_weight",
        type=float,
        default=0.5,
        help="Weight of the color intensity. Must be between 0 and 1",
    )

    parser.add_argument(
        "--code",
        type=str,
        # default="cloth-masks/textures/check/check_4.jpg, cloth-#e54294, cloth-#ff0000, cloth, cloth-masks/textures/others/heart_1.png, cloth-masks/textures/fruits/pineapple.png, N95, surgical_blue, surgical_green",
        default="",
        help="Generate specific formats",
    )


    parser.add_argument(
        "--verbose", dest="verbose", action="store_true", help="Turn verbosity on"
    )
    parser.add_argument(
        "--write_original_image",
        dest="write_original_image",
        action="store_true",
        help="If true, original image is also stored in the masked folder",
    )
    parser.set_defaults(feature=False)

    args, unknown = parser.parse_known_args()
    args.write_path = args.path + "_masked"

    # Set up dlib face detector and predictor
    args.detector = dlib.get_frontal_face_detector()
    path_to_dlib_model = "shape_predictor_68_face_landmarks.dat"
    if not os.path.exists(path_to_dlib_model):
        download_dlib_model()

    args.predictor = dlib.shape_predictor(path_to_dlib_model)

    # Extract data from code
    mask_code = "".join(args.code.split()).split(",")
    args.code_count = np.zeros(len(mask_code))
    args.mask_dict_of_dict = {}


    for i, entry in enumerate(mask_code):
        print
        mask_dict = {}
        mask_color = ""
        mask_texture = ""
        mask_type = entry.split("-")[0]
        if len(entry.split("-")) == 2:
            mask_variation = entry.split("-")[1]
            if "#" in mask_variation:
                mask_color = mask_variation
            else:
                mask_texture = mask_variation
        mask_dict["type"] = mask_type
        mask_dict["color"] = mask_color
        mask_dict["texture"] = mask_texture
        args.mask_dict_of_dict[i] = mask_dict

    # Check if path is file or directory or none
    is_file=True
    # Process if the path was a file
    if is_file:
        print("Masking image file")
        image_path = args.path
        write_path = args.path.rsplit(".")[0]
        if True:
            # Proceed if file is image
            # masked_images, mask, mask_binary_array, original_image
            masked_image, mask, mask_binary_array, original_image = mask_image(
                myImg, args
            )
            if len(masked_image)==0:
                return masked_image
            else:
                img = masked_image[i]
                return img
    else:
        print("Path is neither a valid file or a valid directory")
    print("Processing Done")