DEV Community

EvolveDev
EvolveDev

Posted on • Edited on

7

Building a Deep Face Detection Model with Python and TensorFlow (Part 1)

In this tutorial, we'll walk through the process of building a deep learning model for face detection using Python and TensorFlow. Face detection is a crucial component of many computer vision applications, including facial recognition, surveillance, and image understanding. We'll leverage the power of convolutional neural networks (CNNs) and the VGG16 architecture for this task.

1. Setup and Data Collection

1.1 Install Dependencies and Setup

!pip install labelme tensorflow tensorflow-gpu opencv-python matplotlib albumentations
# Import necessary libraries
import os
import time
import uuid
import cv2
Enter fullscreen mode Exit fullscreen mode

1.2 Collect Images Using OpenCV

IMAGES_PATH = os.path.join('data', 'images')
number_images = 30
cap = cv2.VideoCapture(1)

for imgnum in range(number_images):
    print('Collecting image {}'.format(imgnum))
    ret, frame = cap.read()
    imgname = os.path.join(IMAGES_PATH, f'{str(uuid.uuid1())}.jpg')
    cv2.imwrite(imgname, frame)
    cv2.imshow('frame', frame)
    time.sleep(0.5)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()
Enter fullscreen mode Exit fullscreen mode

1.3 Annotate Images with LabelMe

!labelme
Enter fullscreen mode Exit fullscreen mode

2. Review Dataset and Build Image Loading Function

2.1 Import TF and Dependencies

import tensorflow as tf
import json
import numpy as np
from matplotlib import pyplot as plt
Enter fullscreen mode Exit fullscreen mode

2.2 Limit GPU Memory Growth

# Avoid OOM errors by setting GPU Memory Consumption Growth
gpus = tf.config.experimental.list_physical_devices('GPU')
for gpu in gpus: 
    tf.config.experimental.set_memory_growth(gpu, True)
tf.config.list_physical_devices('GPU')
Enter fullscreen mode Exit fullscreen mode

2.3 Load Image into TF Data Pipeline

images = tf.data.Dataset.list_files('data\\images\\*.jpg')

def load_image(x): 
    byte_img = tf.io.read_file(x)
    img = tf.io.decode_jpeg(byte_img)
    return img

images = images.map(load_image)
Enter fullscreen mode Exit fullscreen mode

2.4 View Raw Images with Matplotlib

image_generator = images.batch(4).as_numpy_iterator()
plot_images = image_generator.next()

fig, ax = plt.subplots(ncols=4, figsize=(20,20))
for idx, image in enumerate(plot_images):
    ax[idx].imshow(image) 
plt.show()
Enter fullscreen mode Exit fullscreen mode

3. Partition Unaugmented Data

3.1 MANUALLY SPLT DATA INTO TRAIN TEST AND VAL

90 * 0.7 # 63 to train
90 * 0.15 # 14 and 13 to test and val

3.2 Move the Matching Labels

for folder in ['train', 'test', 'val']:
    for file in os.listdir(os.path.join('data', folder, 'images')):
        filename = file.split('.')[0] + '.json'
        existing_filepath = os.path.join('data', 'labels', filename)
        if os.path.exists(existing_filepath): 
            new_filepath = os.path.join('data', folder, 'labels', filename)
            os.replace(existing_filepath, new_filepath)
Enter fullscreen mode Exit fullscreen mode

Part 2

Stay tuned for the next steps in the upcoming sections of this tutorial!

API Trace View

How I Cut 22.3 Seconds Off an API Call with Sentry 👀

Struggling with slow API calls? Dan Mindru walks through how he used Sentry's new Trace View feature to shave off 22.3 seconds from an API call.

Get a practical walkthrough of how to identify bottlenecks, split tasks into multiple parallel tasks, identify slow AI model calls, and more.

Read more →

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay