Задача MediaPipe Face Detector позволяет обнаруживать лица на изображении или видео. Эту задачу можно использовать для поиска лиц и черт лица в кадре. В этой задаче используется модель машинного обучения (ML), которая работает с отдельными изображениями или непрерывным потоком изображений. Задача выводит местоположение лица, а также следующие ключевые точки лица: левый глаз, правый глаз, кончик носа, рот, трагикцию левого глаза и трагицию правого глаза.
Пример кода, описанный в этой инструкции, доступен на GitHub . Дополнительные сведения о возможностях, моделях и параметрах конфигурации этой задачи см. в разделе Обзор .
Пример кода
В примере кода Face Detector представлена полная реализация этой задачи на Python. Этот код поможет вам протестировать эту задачу и приступить к созданию собственного детектора лиц. Вы можете просматривать, запускать и редактировать пример кода Face Detector, используя только веб-браузер.
Если вы внедряете Детектор лиц для Raspberry Pi, обратитесь к примеру приложения Raspberry Pi .
Настраивать
В этом разделе описаны ключевые шаги по настройке среды разработки и проектов кода специально для использования Face Detector. Общие сведения о настройке среды разработки для использования задач MediaPipe, включая требования к версии платформы, см. в руководстве по настройке Python .
Пакеты
Для задачи MediaPipe Face Detector требуется пакет mediapipe PyPI. Вы можете установить и импортировать эти зависимости следующим образом:
$ python -m pip install mediapipe
Импорт
Импортируйте следующие классы для доступа к функциям задачи «Детектор лиц»:
import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision
Модель
Для задачи MediaPipe Face Detector требуется обученная модель, совместимая с этой задачей. Дополнительную информацию о доступных обученных моделях для Face Detector смотрите в разделе «Модели » обзора задач.
Выберите и скачайте модель, а затем сохраните ее в локальном каталоге:
model_path = '/absolute/path/to/face_detector.task'
Используйте параметр model_asset_path
объекта BaseOptions
, чтобы указать путь к используемой модели. Пример кода см. в следующем разделе.
Создать задачу
Задача MediaPipe Face Detector использует функцию create_from_options
для настройки задачи. Функция create_from_options
принимает значения для обрабатываемых параметров конфигурации. Дополнительные сведения о параметрах конфигурации см. в разделе Параметры конфигурации .
Следующий код демонстрирует, как создать и настроить эту задачу.
В этих примерах также показаны варианты построения задач для изображений, видеофайлов и прямой трансляции.
Изображение
import mediapipe as mp BaseOptions = mp.tasks.BaseOptions FaceDetector = mp.tasks.vision.FaceDetector FaceDetectorOptions = mp.tasks.vision.FaceDetectorOptions VisionRunningMode = mp.tasks.vision.RunningMode # Create a face detector instance with the image mode: options = FaceDetectorOptions( base_options=BaseOptions(model_asset_path='/path/to/model.task'), running_mode=VisionRunningMode.IMAGE) with FaceDetector.create_from_options(options) as detector: # The detector is initialized. Use it here. # ...
Видео
import mediapipe as mp BaseOptions = mp.tasks.BaseOptions FaceDetector = mp.tasks.vision.FaceDetector FaceDetectorOptions = mp.tasks.vision.FaceDetectorOptions VisionRunningMode = mp.tasks.vision.RunningMode # Create a face detector instance with the video mode: options = FaceDetectorOptions( base_options=BaseOptions(model_asset_path='/path/to/model.task'), running_mode=VisionRunningMode.VIDEO) with FaceDetector.create_from_options(options) as detector: # The detector is initialized. Use it here. # ...
Прямая трансляция
import mediapipe as mp BaseOptions = mp.tasks.BaseOptions FaceDetector = mp.tasks.vision.FaceDetector FaceDetectorOptions = mp.tasks.vision.FaceDetectorOptions FaceDetectorResult = mp.tasks.vision.FaceDetectorResult VisionRunningMode = mp.tasks.vision.RunningMode # Create a face detector instance with the live stream mode: def print_result(result: FaceDetectorResult, output_image: mp.Image, timestamp_ms: int): print('face detector result: {}'.format(result)) options = FaceDetectorOptions( base_options=BaseOptions(model_asset_path='/path/to/model.task'), running_mode=VisionRunningMode.LIVE_STREAM, result_callback=print_result) with FaceDetector.create_from_options(options) as detector: # The detector is initialized. Use it here. # ...
Полный пример создания Детектора лиц для использования с изображением смотрите в примере кода .
Варианты конфигурации
Эта задача имеет следующие параметры конфигурации для приложений Python:
Название опции | Описание | Диапазон значений | Значение по умолчанию |
---|---|---|---|
running_mode | Устанавливает режим выполнения задачи. Есть три режима: ИЗОБРАЖЕНИЕ: Режим для ввода одного изображения. ВИДЕО: Режим декодированных кадров видео. LIVE_STREAM: режим прямой трансляции входных данных, например, с камеры. В этом режиме необходимо вызвать resultListener, чтобы настроить прослушиватель на асинхронное получение результатов. | { IMAGE, VIDEO, LIVE_STREAM } | IMAGE |
min_detection_confidence | Минимальный показатель достоверности, позволяющий считать обнаружение лица успешным. | Float [0,1] | 0.5 |
min_suppression_threshold | Минимальный, не максимальный порог подавления для обнаружения лиц, который считается перекрытым. | Float [0,1] | 0.3 |
result_callback | Настраивает прослушиватель результатов на асинхронное получение результатов обнаружения, когда Детектор лиц находится в режиме прямой трансляции. Может использоваться только в том случае, если для режима работы установлено значение LIVE_STREAM . | N/A | Not set |
Подготовьте данные
Подготовьте входные данные в виде файла изображения или массива numpy, а затем преобразуйте их в объект mediapipe.Image
. Если ваши входные данные представляют собой видеофайл или прямую трансляцию с веб-камеры, вы можете использовать внешнюю библиотеку, такую как OpenCV, для загрузки входных кадров в виде числовых массивов.
Изображение
import mediapipe as mp # Load the input image from an image file. mp_image = mp.Image.create_from_file('/path/to/image') # Load the input image from a numpy array. mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_image)
Видео
import mediapipe as mp # Use OpenCV’s VideoCapture to load the input video. # Load the frame rate of the video using OpenCV’s CV_CAP_PROP_FPS # You’ll need it to calculate the timestamp for each frame. # Loop through each frame in the video using VideoCapture#read() # Convert the frame received from OpenCV to a MediaPipe’s Image object. mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_frame_from_opencv)
Прямая трансляция
import mediapipe as mp # Use OpenCV’s VideoCapture to start capturing from the webcam. # Create a loop to read the latest frame from the camera using VideoCapture#read() # Convert the frame received from OpenCV to a MediaPipe’s Image object. mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_frame_from_opencv)
Запустить задачу
Детектор лиц использует функции detect
, detect_for_video
и detect_async
для запуска логических выводов. Для обнаружения лиц это включает предварительную обработку входных данных и обнаружение лиц на изображении.
Следующий код демонстрирует, как выполнить обработку с помощью модели задачи.
Изображение
# Perform face detection on the provided single image. # The face detector must be created with the image mode. face_detector_result = detector.detect(mp_image)
Видео
# Perform face detection on the provided single image. # The face detector must be created with the video mode. face_detector_result = detector.detect_for_video(mp_image, frame_timestamp_ms)
Прямая трансляция
# Send live image data to perform face detection. # The results are accessible via the `result_callback` provided in # the `FaceDetectorOptions` object. # The face detector must be created with the live stream mode. detector.detect_async(mp_image, frame_timestamp_ms)
Обратите внимание на следующее:
- При работе в режиме видео или в режиме прямой трансляции также предоставьте задаче «Детектор лиц» временную метку входного кадра.
- При запуске изображения или видеомодели задача «Детектор лиц» блокирует текущий поток до тех пор, пока не завершится обработка входного изображения или кадра.
- При работе в режиме прямой трансляции задача «Детектор лиц» возвращается немедленно и не блокирует текущий поток. Он будет вызывать прослушиватель результатов с результатом обнаружения каждый раз, когда завершает обработку входного кадра. Если функция обнаружения вызывается, когда задача «Детектор лиц» занята обработкой другого кадра, задача будет игнорировать новый входной кадр.
Полный пример запуска Детектора лиц на изображении см. в примере кода .
Обработка и отображение результатов
Детектор лиц возвращает объект FaceDetectorResult
для каждого запуска обнаружения. Объект результата содержит ограничивающие рамки для обнаруженных лиц и оценку достоверности для каждого обнаруженного лица.
Ниже показан пример выходных данных этой задачи:
FaceDetectionResult:
Detections:
Detection #0:
BoundingBox:
origin_x: 126
origin_y: 100
width: 463
height: 463
Categories:
Category #0:
index: 0
score: 0.9729152917861938
NormalizedKeypoints:
NormalizedKeypoint #0:
x: 0.18298381567001343
y: 0.2961040139198303
NormalizedKeypoint #1:
x: 0.3302789330482483
y: 0.29289937019348145
... (6 keypoints for each face)
Detection #1:
BoundingBox:
origin_x: 616
origin_y: 193
width: 430
height: 430
Categories:
Category #0:
index: 0
score: 0.9251380562782288
NormalizedKeypoints:
NormalizedKeypoint #0:
x: 0.6151331663131714
y: 0.3713381886482239
NormalizedKeypoint #1:
x: 0.7460576295852661
y: 0.38825345039367676
... (6 keypoints for each face)
На следующем изображении показана визуализация результатов задачи:
Изображение без ограничивающих рамок см. в исходном изображении .
Пример кода Face Detector демонстрирует, как отображать результаты, возвращаемые задачей, см. пример кода . для подробностей.