Source code for neurokit2.video.video_face
import numpy as np
from ..misc import progress_bar
[docs]
def video_face(video, verbose=True):
"""**Extract face from video**
This function extracts the faces from a video. This function requires the `cv2, `menpo` and
`menpodetect` modules to be installed.
.. note::
This function is experimental. If you are interested in helping us improve that aspect of
NeuroKit (e.g., by adding more detection algorithms), please get in touch!
Parameters
----------
video : np.ndarray
An video data numpy array of the shape (frame, channel, height, width)
verbose : bool
Whether to print the progress bar.
Returns
-------
list
A list of cropped faces.
Examples
--------
.. ipython:: python
import neurokit2 as nk
# video, sampling_rate = nk.read_video("video.mp4")
# faces = nk.video_face(video)
# nk.video_plot([video, faces])
"""
faceboxes = np.full([len(video), 3, 500, 500], 0)
for i, frame in progress_bar(video, verbose=verbose):
faces = _video_face_landmarks(frame)
if len(faces) > 0:
faceboxes[i, :, :, :] = _video_face_crop(frame, faces[0])
return faceboxes.astype("uint8")
# ==============================================================================
# Internals
# ==============================================================================
def _video_face_crop(frame, face):
# Try loading cv2
try:
import cv2
except ImportError:
raise ImportError(
"The 'cv2' module is required for this function to run. ",
"Please install it first (`pip install opencv-python`).",
)
facebox = face.as_vector().reshape(-1, 2).astype(int)
# Crop
img = frame[:, facebox[0, 0] : facebox[1, 0], facebox[0, 1] : facebox[2, 1]]
# Resize
img = cv2.resize(img.swapaxes(0, 1).swapaxes(1, 2), (500, 500))
return img.swapaxes(0, 2).swapaxes(1, 2).astype(int)
def _video_face_landmarks(frame):
# Try loading menpo
try:
import menpo.io
import menpo.landmark
import menpodetect
except ImportError:
raise ImportError(
"The 'menpo' and 'menpodetect' modules are required for this function to run. ",
"Please install them first (`pip install menpo` and `pip install menpodetect`).",
)
img = menpo.image.Image(frame, copy=True)
img_bw = img.as_greyscale()
# Face detection
faces = menpodetect.load_opencv_frontal_face_detector()(img_bw)
# Eyes detection
# eyes = menpodetect.load_opencv_eye_detector()(img_bw)
return faces