Рубрики
Без рубрики

Конец, чтобы закончить обнаружение маски

Таблица контента 1.Collect Данные данные Предварительная обработка визуализирующих данных построить модель модельный поезд мо … Теги от глубокого обучения, Python, OpenCV, машинного обучения.

1.COLLECT. Данные

  1. Предварительная обработка данных
  2. Визуализация данных
  3. Модель сборки
  4. Модель поезда
  5. Оценка обученной модели
  6. Сохранить обученную модель
  7. Прогнозировать на пользовательских данных
  8. Обнаружение в реальном времени

1.Collect Data.

В каждом обучении машины данные проблемы являются основными. Здесь данные собираются из Kaggle Отказ Данные – это подмножество этого набора данных, вы можете скачать его из здесь

2.Data Предварительная обработка

Перед обработкой данных, сначала структурируйте наши данные в правой папке. Для этого у нас есть два варианта:

Здесь мы решили загрузить из файла CSV. Для этого мы изменяем имя изображения с маской и без маски.

С маска

# importing os module 
import os 

# Function to rename multiple files 
def main():
    for count, filename in enumerate(os.listdir("DATASET/")):
        dst ="withmask." + str(count) + ".jpeg"
        src ='DATASET/'+ filename 
        dst ='DATASET/'+ dst 
        # rename() function will
        # rename all the files 
        os.rename(src, dst) 

# Driver Code 
if __name__ == '__main__':
    # Calling main() function 
    main()

Без маски

# importing os module 
import os 

# Function to rename multiple files 
def main():
    for count, filename in enumerate(os.listdir("New folder/")):
        dst ="withoutmask." + str(count) + ".jpeg"
        src ='New folder/'+ filename 
        dst ='New folder/'+ dst 
        # rename() function will
        # rename all the files 
        os.rename(src, dst) 

# Driver Code 
if __name__ == '__main__':
    # Calling main() function 
    main()

Теперь переместите все изображения в одну папку и создайте Pandas DataFrame

Генерировать dataframe.

import pandas as pd
filenames=os.listdir("FULL_DATA/")
categories=[]
for f_name in filenames:
    category=f_name.split('.')[0]
    if category=='withmask':
        categories.append('withmask')
    else:
        categories.append('withoutmask')
df=pd.DataFrame({
    'filename':filenames,
    'labels':categories
})

Сохраните DataFrame в файл CSV.

Теперь данные в правильной структуре, мы можем загрузить данные

  • Читать CSV-файл
  • Shuffle DataFrame с)
  • Поверните этикетку в массив логического
  • Создайте проверку набор с помощью urs_test_split
  • Переключение изображений в тензор
# Define image size
IMG_SIZE = 224

# Function
def process_image(image_path, image_size=IMG_SIZE):
  """
  Takes an image file path and turns the image into a Tensor.
  """
  # Read in an image file
  image = tf.io.read_file(image_path)
  # Turn the jpg image into numerical Tensor with 3 colour channel(RGB)
  image = tf.image.decode_jpeg(image,channels=3)
  # Convert the color channel values to (0-1) values
  image = tf.image.convert_image_dtype(image,tf.float32)
  # Resize the image to (224,224)
  image = tf.image.resize(image, size=[image_size,image_size])

  return image
  • Превращение данных в партии
# Create a function to return a tuple (image, label)
def get_image_lable(image_path,label):
  """
  Takes an image file path name and the label,
  processes the image and return a tuple (image, label).
  """
  image = process_image(image_path)

  return image, label
# Define the batch size
BATCH_SIZE = 32

# Function to convert data into batches
def create_data_batches(X,y=None, batch_size=BATCH_SIZE,valid_data=False):
  """
  Creates batches of data of image (X) and label (y) pairs.
  Shuffle the data if it's training data but doesn't shuffle if it's validation data.
  """
  # If data is valid dataset (NO SHUFFLE)
  if valid_data:
    print("Creating valid data batches.........")
    data = tf.data.Dataset.from_tensor_slices((tf.constant(X),
                                               tf.constant(y)))
    data_batch = data.map(get_image_lable).batch(batch_size)
    return data_batch

  else:
    print("Creating train data batches.........")
    # Turn filepaths and labels into Tensors
    data = tf.data.Dataset.from_tensor_slices((tf.constant(X),
                                               tf.constant(y)))
    # Shuffling pathname and labels before mapping image processor fun
    data = data.shuffle(buffer_size=len(X))
    data_batch = data.map(get_image_lable).batch(batch_size)

    return data_batch
import matplotlib.pyplot as plt
# Create fun for viewing in a data batch
def show_images(images, labels):
  """
  Displays a plot of 25 images and their labels from a data batch.
  """
  plt.figure(figsize=(20, 20))
  for i in range(25):
    # Subplot
    ax = plt.subplot(5,5,i+1)
    plt.imshow(images[i])
    plt.title(unique_category[labels[i].argmax()])
    plt.axis("Off")

Позвони этому удовольствию

Для данных поезда

train_images, train_labels = next(train_data.as_numpy_iterator())
show_images(train_images,train_labels)

Для действительных данных

val_images, val_labels = next(val_data.as_numpy_iterator())
show_images(val_images, val_labels)

Здесь мы можем использовать Tensorflow Hub для предварительно обученных моделей. Для этой задачи мы используем MobileNet V2, которая является небольшой моделью.

  • Установить input_shape = [ Нет, 224,224,3]
  • Набор
  • Используйте последовательную модель от TF.keras
# Create a fun to build a keras model
def create_model(input_shape=INPUT_SHAPE,output_shape=OUTPUT_SHAPE, model_url=MODEL_URL):
  print("Building model with:", model_url)

  # Setup the model
  model = tf.keras.Sequential([
                               hub.KerasLayer(model_url),
                               tf.keras.layers.Dense(units=output_shape, 
                                                     activation="softmax")
  ])

  # Compile the model
  model.compile(
      loss = tf.keras.losses.BinaryCrossentropy(),
      optimizer = tf.keras.optimizers.Adam(),
      metrics = ["accuracy"]
  )

  # Build the model
  model.build(input_shape)

  return model

Обучить модель на urch_data и valid_data для 25 эпох

Кроме того, добавьте раннюю остановку обратного вызова

model = create_model()
model.summary()

С этой моделью Val_Loss составляет 0,0096, а точность почти 99,99%

Использование Model.Predict () на модели Val_data Возврат Numpy Array формы (_, 2)

Сохраните обученную модель с помощью Save_Model от KERAS.

Загрузка модели немного отличается от обычной Load_Model

model = load_model(
    'model/model.h5', custom_objects={"KerasLayer": hub.KerasLayer})

Здесь мы должны предоставить custom_objects = {“Keraslayer”: Hub. Keraslayer} в функции Load_Model рядом с Model_Path.

Перед прогнозированием новых данных убедитесь, что он находится в правильной форме, а также правильный размер.

def test_data(path):
  demo = imread(path)
  demo = tf.image.convert_image_dtype(demo,tf.float32)
  demo = tf.image.resize(demo,size=[224,224])
  demo = np.expand_dims(demo,axis=0)

  pred = model.predict(demo)
  result = unique_category[np.argmax(pred)]

  return result

В этом мы можем использовать нашу предварительно обученную модель с OpenCV, чтобы сделать обнаружение в реальном времени.

  • Импорт библиотеки
  • Используйте веб-камеру с CV2.Videocapture ()
  • Используйте файл XML Haarcascade_frontalalaceface для обнаружения лица.
  • Прогнозировать с загруженной моделью.
  • Здесь вы можете узнать больше о проектах OpenCV.

Вы можете найти код REPO здесь

Vivek2509/конец к концу маска-детектор

Построить глубокую модель обучения для обнаружения маски

Построить глубокую модель обучения для обнаружения маски

Загрузить данные

Используйте модель Tensorflow Hub

Предсказанное изображение

Используйте OpenCV для обнаружения в реальном времени.

Эй, читатели, спасибо за ваше время. Если вам понравился блог, не забудьте ценить это.

Энтузиаст AI/ML | Блогер

Если у вас есть какие-либо вопросы или предложения, не стесняйтесь связаться со мной на

Twitter Linkedin.

Оригинал: “https://dev.to/vivek2509/end-to-end-mask-detection-3ln6”