Читатели като вас помагат в подкрепа на MUO. Когато правите покупка чрез връзки на нашия сайт, ние може да спечелим комисионна за партньор. Прочетете още.

Проследяването на ръцете е процес на използване на компютърно зрение за откриване и проследяване на движенията на ръката на човек в реално време. Най-доминиращото приложение на проследяването на ръцете е в слушалките за виртуална реалност. Слушалките ви позволяват да използвате ръцете си като вход вместо сензорни контролери. Това от своя страна прави изживяването по-завладяващо.

Научете как да проследявате ръцете на човек с помощта на Python, OpenCV за компютърно зрение и MediaPipe.

Google разработи рамката MediaPipe, която съдържа много решения за машинно обучение. Едно от решенията е решението за проследяване на ръцете и пръстите, т.нар Ръцете на MediaPipe. За да проследи ръцете, MediaPipe Hands изпълнява два процеса: откриване на длан и откриване на ориентир.

Разпознаване на дланта на ръката

MediaPipe започва с идентифициране къде са дланите във входното изображение. Тъй като оценяването на ограничителните кутии за твърди обекти е по-лесно от идентифицирането на ръце със съединени пръсти.

instagram viewer

Откриване на забележителности на ръцете

След откриване на длан, MediaPipe извършва откриване на ориентири на ръцете. Моделът на ориентира на ръката може да предвиди 21 точни координати на местоположението на всеки ориентир на ръката.

Числата представляват уникален идентификатор за всяка забележителност.

Настройване на вашата среда

За да следвате този проект, трябва да сте запознати с основите на Python. Инсталирайте следните библиотеки във вашата среда:

  • OpenCV: Ще използвате тази библиотека за компютърно зрение и за извършване на техники за обработка на изображения върху входното изображение.
  • MediaPipe: Ще използвате тази библиотека, за да извършите откриване на ръце и проследяване на входното изображение.
  • imutils: Вие ще използвате тази библиотека, за да промените размера на видео рамката на входа.

Изпълнете следната команда на вашия терминал, за да инсталирате библиотеките OpenCV, MediaPipe и imutils. Инсталирайте pip—мениджърът на пакети на Python– ако трябва. Уверете се, че предавате библиотеките като списък, разделен с интервал.

pip инсталирайте OpenCV-Python MediaPipe imutils

Когато актуализацията приключи, средата е готова да започнете да кодирате.

Пълният изходен код за този проект е достъпен в него GitHub хранилище.

Импортиране на необходимите библиотеки

Ще трябва да импортирате библиотеките, които сте инсталирали, за да можете да ги използвате. Отворете произволен Python IDE, създайте файл на Python и добавете следните импортирания:

импортиране cv2
импортиране mediapipe като т.т
импортиране imutils

Уверете се, че импортирате OpenCV като cv2 и MediaPipe с малки букви. Ако не го направите, ще се появи грешка.

Ще използвате mpHands, за да извикате решението за ръце на MediaPipe, и обекта за ръце, за да откриете и проследите въвеждането с ръка. Ще използвате обекта mpDraw, за да начертаете връзките между ориентирите на идентифицираните ръце.

mpHands = mp.solutions.hands
ръце = mpръце. Ръце()
mpDraw = mp.solutions.drawing_utils

Можете да настроите фино модела на ръцете на MediaPipe, като подадете различни параметри към конструктора Hands(). Стойностите по подразбиране са достатъчно добри за този проект, но можете да експериментирате с тях, за да видите как влияят на модела:

Трябва да напуснете режим на статично_изображение като False, за да се гарантира, че моделът открива ръцете веднъж, преди да започне да ги проследява. Той повтаря процеса на проследяване само ако увереността на откриване падне под декларирания параметър, което прави цялостната обработка на входа по-бърза.

Извършване на проследяване на ръцете

Имате нужда от три функции, за да извършите проследяване на ръцете: една за обработка на входа, една за изчертаване на връзките на ориентирите на ръцете и основна функция за контрол на потока на програмата.

Функция за обработка на входни данни

Тази функция взема входа, преобразува го в скала на сивото и го предава на модела на ръцете на MediaPipe, за да открие и проследи ръцете във входа.

# Обработка на входното изображение
дефпроцес_образ(изображение):
# Преобразуване на входа в нива на сивото
сиво_изображение = cv2.cvtColor (img, cv2.COLOR_BGR2RGB)
резултати = hands.process (сиво_изображение)

# Връщане на откритите ръце към функция за повикване
връщане резултати

Функцията връща резултатите за това дали е имало открити ръце при въвеждането.

Функция за чертане на връзките с забележителност на ръката

Тази функция проверява дали функцията за обработка на входа е открила някакви ръце. Ако има засечени ръце, той преминава през всяка забележителност и очертава кръг около нея, следейки забележителността с помощта на Функцията за изброяване на Python. След това начертава връзките между ориентирите на оригиналния видео вход.

# Чертане на забележителни връзки
дефтеглене_връзки_ръка(изображение, резултати):
ако results.multi_hand_landmarks:
за ръце в results.multi_hand_landmarks:
за id, lm в изброяване (handLms.landmark):
h, w, c = ig.shape

# Намиране на координатите на всяка забележителност
cx, cy = int (lm.x * w), int (lm.y * h)

# Отпечатване на ID и координати на всеки ориентир
# на терминала
печат (id, cx, cy)

# Създаване на кръг около всяка забележителност
cv2.circle (img, (cx, cy), 10, (0, 255, 0),
cv2.FILLED)
# Начертаване на ориентировъчните връзки
mpDraw.draw_landmarks (img, handLms,
mpHands. HAND_CONNECTIONS)

връщане img

Функцията започва с кръгче на всяка забележителност:

След това чертае ръчните връзки:

Накрая връща изхода си към извикващата функция.

Основната функция

Създайте основна функция, която ще контролира потока на вашата програма. Той ще вземе входа и ще преоразмери видео рамката, за да гарантира последователността на изхода. Предайте входа на функцията за обработка, която след това ще открие и проследи ръцете. Отнесете върнатите резултати към функцията за чертане на връзката на забележителностите на ръцете, която ще начертае връзката на оригиналния видео вход. Най-накрая ще покаже изхода на потребителя.

дефосновен():
# Заменете 0 с видео пътя, за да използвате a
# предварително записано видео
cap = cv2.VideoCapture(0)

докатоВярно:
# Вземане на входа
успех, изображение = cap.read()
изображение = imutils.resize (изображение, ширина=500, височина=500)
резултати = process_image (изображение)
draw_hand_connections (изображение, резултати)

# Показване на изхода
cv2.imshow("Проследяване на ръцете", изображение)

# Програмата се прекратява, когато се натисне клавиш q
ако cv2.waitKey(1) == ord('q'):
cap.release()
cv2.destroyAllWindows()

Последната стъпка е стартирането на вашата програма. Кодът по-долу гарантира, че когато стартирате програмата, основната функция се изпълнява първа.

ако __име__ == "__основен__":
основен ()

Когато програмата се изпълнява, тя произвежда резултат по следния начин:

Програмата следи ръцете в реално време.

Проследяване на ръцете за поглъщаща виртуална реалност

Проследяването на ръцете във виртуалната реалност прави технологията по-примамлива. Слушалките за виртуална реалност започнаха да въвеждат проследяване на ръцете, внасяйки усещане за повишена реалност във виртуалния свят. Слушалките позволяват на потребителя да въвежда команди с помощта на виртуална ръка.

Проследяването на ръцете във виртуални слушалки е само едно приложение на тази технология. Можете да включите проследяване на ръцете във всяка приложима област по ваш вкус.