Введение
Актуальность: «Оживление» картинок, лиц (анимации) широко используют в различных сферах жизни: в образовании, в рекламе, в кино и т.п. В современном мире существуют люди, которые увлекаются созданием анимаций, либо это является их профессией. Анимации создают, в том числе и в программе Blender.
Проблема: Мы увлекаемся работой с 3D-графикой. Мы захотели самостоятельно создать анимацию с лицом человека в программе для создания и редактирования 3D моделей Blender. Оказалось, что создание анимации лица требует больших усилий, времени и специальных знаний в области анатомии и анимирования. Мы обнаружили, что быстрее и правдоподобнее это делать при помощи управления моделью лица через видеокамеру. Но это нужно автоматизировать. Мы выбрали автоматизировать этот процесс через написание скриптов на языке Python.
Новизна: в ходе наших исследований мы не нашлианалоговнашей разработки.
Цель работы: своими силами написать скрипты на языке Python для определения движений лица.
Задачи:
Изучить информацию по теме.
Написать свои скрипты на языке Python.
Провести тестирование работы наших скриптов.
Основная часть
Глава 1. Скрипты на языке Python для определения движений лица
Предлагаем вашему вниманию разработанный нами скрипт, который определяет точки лица, снятого видеокамерой:
import cv2
import dlib
# детектор лица
FaceDetector = dlib.get_frontal_face_detector()
# детектор точек лица
file = "shape_predictor_68_face_landmarks.dat"
LandmarksPredictor = dlib.shape_predictor(file)
# ------------- старт программы -------------
capture = cv2.VideoCapture(0)
while True:
if cv2.waitKey(1) & 0xFF == 27: break
ret, frame = capture.read()
if not ret: break
frame = frame[60:-60] # обрезатькартинку
# преобразовать картинку в серый цвет
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# уменьшить качество для ускорения процесса
lowres_frame = cv2.resize (frame, (0, 0), fx = 1/4,
fy = 1/4)
# нахождение лица на картинке
faces = FaceDetector(lowres_frame, 2)
if len(faces) != 0:
def MultiplyRectCoords(rect, mult):
return dlib.rectangle(
rect.left() * mult, rect.top() * mult,
rect.right() * mult, rect.bottom() * mult
)
face = MultiplyRectCoords(faces[0], 4)
# нахождение отметок лица
landmarks = LandmarksPredictor(gray, face).parts()
for lm in landmarks:
cv2.circle(frame, (lm.x, lm.y), 2, (0, 0, 255), 1)
cv2.imshow("live camera landmarks", frame)
capture.release()
cv2.destroyAllWindows()
Глава 2. Тестирование
Тестирование — это процесс, который представляет из себя проверку соответствия программного продукта заявленным характеристикам и требованиям.
Ниже представлен протокол тестирования.
Тест № 1. Цель: скрипт определяет положение точек лица, когда лицо смотрит прямо в камеру.
Действие: Лицо человека находится прямо перед камерой.
Ожидаемый результат: Человек видит красные точки на изображении лица (рис. 1).
Рис.1. Красные точки на изображении лица
Тест пройден? Да.
Тест № 2. Цель: скрипт определяет положение точек лица, когда лицо повернуто от камеры.
Действие: Человек поворачивает лицо в сторону.
Ожидаемый результат: Человек видит красные точки на изображении лица (рис. 2).
Рис.2. Красные точки на изображении лица при повороте
Тест пройден? Да.
Тест № 3. Цель: скрипт не определяет положение точек лица, когда лицо отвернуто от камеры.
Действие: Человек отворачивает лицо от камеры.
Ожидаемый результат: Человек не видит красные точки на изображении лица (рис. 3).
Рис.3. Отсутствие красных точек на изображении лица при отворачивании лица от камеры
Тест пройден? Да.
Проведенные тесты доказали, что наш метод работает, когда лицо человека находится в поле зрения камеры.
Заключение
Решив создать Анимацию с лицом человека в программе Blender, мы поняли, что для этого нам нужно определять движения лица в реальном времени.
Мы не нашли аналогов в интернете, поэтому мы решили реализовать эту технологию своими силами.
В результате мы достигли своей цели – своими силами написали скрипты на языке Python для определения движений лица.
Также мы провели тестирование работы скриптов и доказали, что наш метод работает .
Выводы и практические рекомендации:
При использовании данной технологии нужно, чтобы лицо было в поле зрения камеры. Повороты головы делать можно, но нежелательно отворачивать лицо от камеры.
В дальнейшем планируем встроить наши скрипты в программу Blender для создания дополнения (add-on), чтобы реализовывать наш метод для создания анимаций с использованием человеческих персонажей, для наших будущих профессий (3D?аниматор, программист), для экономии бюджета при создании анимаций. Также хотим популяризировать нашу разработку среди тех, кто увлекается созданием анимаций в Blender для фильмов, мультфильмов, игр и т.п.
Список литературы, использованное программное обеспечение
Список литературы
Тестирование программного обеспечения
https://ru.wikipedia.org/wiki/Тестирование_программного_обеспечения
Использованное программное обеспечение
Notepad++
Язык программирования Python 3.8