Создайте 3D-ориентир на лице в реальном времени
В этой статье мы увидим, как можно выполнить обнаружение сетки лица с помощью Python OpenCV напрямую через файл изображения, веб-камеру или видеофайл.
Прежде всего, вам необходимо установить OpenCV и Numpy. Мы будем делать это руководство, используя готовый язык программирования Python, так что приступим.
MediaPipe работает с исследователями и разработчиками решений и приложений для машинного обучения на мобильных устройствах, в веб-приложениях, периферийных вычислениях и т. д.
Нам нужно импортировать CV2, mediapipe и время для настройки базы проекта.
Чтобы установить mediapipe, выполните следующую команду для установки через pip.
pip install mediapipe
OpenCV Python
OpenCV - это библиотека для обработки изображений. Он предназначен для решения задач компьютерного зрения. OpenCV - это библиотека C / C ++, расширенная в Python.
Теперь создайте файл типа faceMeshDetection.py
Импортируйте все нужные нам пакеты.
import cv2 import mediapipe as mp import time
time() function
принимает числа с плавающей запятой и возвращает текущее время в секундах с начала эпохи. Могут присутствовать доли секунды, если их обеспечивают системные часы.
cv2.VideoCapture (путь_к видео)
Эта функция просто настраивает путь видео. Вы можете изменить путь к видео по своему усмотрению. Путь может быть веб-камерой, видеофайлом или внешней камерой.
Здесь мы указываем путь к видео в следующем коде.
cap = cv2.VideoCapture(‘/home/python/OpenCV/faceMash/mesh.mp4’)
Если вы используете веб-камеру, сделайте следующее
cap = cv2.VideoCapture(0) #depends on your system 0 or 1
Установить частоту кадров
Настройте частоту кадров, как показано ниже.
presentTime = 0 # fps control currentTime = time.time() fps_rate = 1 / (currentTime - presentTime) presentTime = currentTime
Обнаружение сетки лица в MediaPipe.
MediaPipe Face Mesh Detection обрабатывает изображение в формате RGB и возвращает список обнаруженных данных о местоположении лиц.
mpDraw = mp.solutions.drawing_utils mpFaceMesh = mp.solutions.face_mesh faceMesh = mpFaceMesh.FaceMesh(max_num_faces = 2) drawSpec = mpDraw.DrawingSpec(thickness=1, circle_radius=1)
Функция cv2.imread (filename):
imread( filename [ , flags ] )
загружает изображение из файла. Функция imread загружает изображение из указанного файла и возвращает его.
cv2.cvtColor (src, code [, dst [, dstCn]])
Преобразует изображение из одного цветового пространства в другое. Функция преобразует входное изображение из одного цветового пространства в другое. В случае трансформации. от цветового пространства RGB , порядок каналов следует указывать явно ( RGB или BGR ). Примечание . что формат цвета по умолчанию в OpenCV часто называют RGB, но на самом деле это BGR ( байты перевернуты ).
process (self, image: np.ndarray) function faceDetection
Обрабатывает изображение RGB и возвращает список данных о местоположении обнаруженного лица. Принимает на входе изображение. Изображение RGB, представленное как ndarray NumPy.
Аргументы:
draw_detection(image, detection,keypoint_drawing_spec,bbox_drawing_spec)
function Рисует ограничительную рамку обнаружения и ключевые точки на изображении. Обсудим все параметры.
image
: трехканальное изображение RGB, представленное как NumPy ndarray.detection
: Протокол обнаружения, который будет аннотироваться на изображении.keypoint_drawing_spec
: объект DrawingSpec, который определяет параметры рисования ключевых точек, такие как цвет, толщина линии и радиус круга, например DrawingSpec = DrawingSpec (color = RED_COLOR).bbox_drawing_spec
: объект DrawingSpec, определяющий ограничивающие рамки. Параметры рисования, такие как цвет и толщина линии, например DrawingSpec = DrawingSpec ()).
while True: success, img = cap.read() imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) results = faceMesh.process(imgRGB) if results.multi_face_landmarks: for faceLms in results.multi_face_landmarks: mpDraw.draw_landmarks(img, faceLms, mpFaceMesh.FACE_CONNECTIONS, drawSpec, drawSpec) for id, lm in enumerate(faceLms.landmark): ih, iw, ic = img.shape x, y = int(lm.x*iw), int(lm.y*ih) cv2.putText(img, text, org, fontFace, fontScale, color[ , thickness[ , lineType[, bottomLeftOrigin]]])
Здесь объясняются все параметры
img
: input Рисует текстовую строку,text
: текстовая строка для рисования.org
: нижний левый угол текстовой строки изображения.fontFace
: тип шрифта ,fontScale
: коэффициент масштабирования шрифта, умноженный на базовый размер шрифта.color
: цвет текста.thickness
: Толщина линий, используемых для рисования текста.lineType
: Тип линии.bottomLeftOrigin
: при значении "истина" , источник данных изображения находится в нижнем левом углу. В противном случае , он находится в верхнем левом углу.
Показать функцию изображения cv2.imshow ().
Ориентиры по лицам - это 467 точек, которые отслеживаются по лицу пользователя. См. Следующий код ниже.
Полный исходный код
Это изображение было взято из видеофайла.
Это изображение было снято с использованием файла изображения.
Заключение
Здесь я только что объяснил полный проект Face Mash, и вы можете использовать код для настройки по своему усмотрению. Там вы найдете множество идей, которые можно расширить от базового проекта сетки. Большое спасибо за чтение.
Хорошего дня.
Больше контента на plainenglish.io