code: from tensorflow.keras.preprocessing.image import ImageDataGenerator
  from tensorflow.keras.applications import MobileNetV2
  from tensorflow.keras.layers import AveragePooling2D
  from tensorflow.keras.layers import Dropout
  from tensorflow.keras.layers import Flatten
  from tensorflow.keras.layers import Dense
  from tensorflow.keras.layers import Input
  from tensorflow.keras.models import Model
  from tensorflow.keras.optimizers import Adam
  from tensorflow.keras.applications.mobilenet_v2 import preprocess_input
  from tensorflow.keras.preprocessing.image import img_to_array
  from tensorflow.keras.preprocessing.image import load_img
  from tensorflow.keras.utils import to_categorical
  from sklearn.preprocessing import LabelBinarizer
  from sklearn.model_selection import train_test_split
  from sklearn.metrics import classification_report
  from imutils import paths
  import matplotlib.pyplot as plt
  import numpy as np
  import argparse
  import os
  
  INIT_LR = 1e-4
  EPOCHS = 20
  BS = 32
  imagePaths = list(paths.list_images('./Mask_Detection_Dataset/'))
  data = []
  labels = []
  for imagePath in imagePaths:
  	label = imagePath.split(os.path.sep)[-2]
  	image = load_img(imagePath, target_size=(224, 224))
  	image = img_to_array(image)
  	image = preprocess_input(image)
  	data.append(image)
  	labels.append(label)
  data = np.array(data, dtype="float32")
  labels = np.array(labels)
  lb = LabelBinarizer()
  labels = lb.fit_transform(labels)
  labels = to_categorical(labels)
  (trainX, testX, trainY, testY) = train_test_split(data, labels,
  	test_size=0.20, stratify=labels, random_state=42)
  aug = ImageDataGenerator(
  	rotation_range=20,
  	zoom_range=0.15,
  	width_shift_range=0.2,
  	height_shift_range=0.2,
  	shear_range=0.15,
  	horizontal_flip=True,
  	fill_mode="nearest")
  baseModel = MobileNetV2(weights="imagenet", include_top=False,
  	input_tensor=Input(shape=(224, 224, 3)))
  headModel = baseModel.output
  headModel = AveragePooling2D(pool_size=(7, 7))(headModel)
  headModel = Flatten(name="flatten")(headModel)
  headModel = Dense(128, activation="relu")(headModel)
  headModel = Dropout(0.5)(headModel)
  headModel = Dense(2, activation="softmax")(headModel)
  model = Model(inputs=baseModel.input, outputs=headModel)
  for layer in baseModel.layers:
  	layer.trainable = False
  opt = Adam(lr=INIT_LR, decay=INIT_LR / EPOCHS)
  model.compile(loss="binary_crossentropy", optimizer=opt,
  	metrics=["accuracy"])
  H = model.fit(
  	aug.flow(trainX, trainY, batch_size=BS),
  	steps_per_epoch=len(trainX) // BS,
  	validation_data=(testX, testY),
  	validation_steps=len(testX) // BS,
  	epochs=EPOCHS)
  predIdxs = model.predict(testX, batch_size=BS)
  predIdxs = np.argmax(predIdxs, axis=1)
  print(classification_report(testY.argmax(axis=1), predIdxs,
  	target_names=lb.classes_))
  model.save('mask_model', save_format="h5")
  
apis: sklearn.preprocessing.LabelBinarizer tensorflow.keras.utils.to_categorical tensorflow.keras.optimizers.Adam tensorflow.keras.layers.Flatten tensorflow.keras.layers.Dropout tensorflow.keras.applications.mobilenet_v2.preprocess_input tensorflow.keras.preprocessing.image.ImageDataGenerator tensorflow.keras.preprocessing.image.load_img tensorflow.keras.preprocessing.image.img_to_array numpy.argmax tensorflow.keras.models.Model tensorflow.keras.layers.Dense numpy.array tensorflow.keras.layers.AveragePooling2D sklearn.model_selection.train_test_split tensorflow.keras.layers.Input