Как определить ладонь руки и ее ориентацию (например, лицом наружу)?

Я работаю над проектом по обнаружению рук. Для этого есть много хороших проектов в сети, но мне нужно специальное определение позы рук. Нужна полностью открытая ладонь и вся ладонь наружу, как на изображении ниже:
Как определить ладонь руки и ее ориентацию (например, лицом наружу)?

Первая рука обращена внутрь, поэтому она не будет обнаружена, а правая обращена наружу, она будет обнаружена. Теперь я могу обнаружить руку с помощью OpenCV. но как сказать ориентацию руки?

Я бы порекомендовал обучить модель (возможно, нейронную сеть со сверточными слоями), и это означало бы, что вам сначала нужно иметь «достаточно большой и правильный» набор данных, вам нужно будет решить, как определить «правильный» и насколько большой достаточно .

pangyuteng 27.05.2019 04:02

Этот вопрос как бы не по теме. Я бы порекомендовал вам, если вы не возражаете, поделиться кодом, который у вас есть до сих пор, показывая, что вы не просто просите нас реализовать что-то для вас.

Berriel 28.05.2019 00:56
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
1 044
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Посмотрите, что сделала чехарда с Oculus rift. Я не уверен, что они используют внутри для сегментации поз рук, но есть другая бумага, которая эффективно воспроизводит позы рук. Если у вас есть установка стереокамеры, вы можете использовать методы из этой статьи: https://arxiv.org/pdf/1610.07214.pdf.

Единственные многообещающие решения, которые я видел для монокамеры, тренируются на больших наборах данных.

хорошо, если вы пойдете по пути МакГайвера, вы можете заметить, что кости левой руки торчат в определенном направлении, в то время как на правой руке есть все линии пальцев и несколько линий на ладонях.

Эти линии всегда одинаковы, поэтому вы можете попытаться обнаружить их с помощью обнаружения краев opencv или линий hough. Из-за темного цвета линий, возможно, вы даже сможете выделить их порогом. Затем соберите информацию из этих линий, например углы, регрессии, посмотрите, какие функции вы можете собрать, и обучите простое дерево решений.

Это предполагало, что у вас недостаточно данных, если у вас есть, то вы переходите к глубокому обучению, просто берете базовую модель InceptionV3 и переобучаете последний плотный слой, чтобы классифицировать два класса с помощью softmax или предсказать вероятность, если рука будет вверх /вниз по сигмовидной. Проверьте эта ссылка, Tensorflow вернулся к обучению этого, чистого уже готового кода для выполнения.

Вопросы? Спрашивай

Ответ принят как подходящий

Задача сопоставления с передом относится к классификации текстур, это классическая задача распознавания образов. Я предлагаю вам попробовать один из следующих способов:

  1. Фильтры Габора: хорошо определять ориентацию и интенсивность пикселей (поскольку передний план имеет разные функции), opencv имеет функцию getGaborKernel, очень важными параметрами этой функции являются тета (ориентация) и лямбд: (частоты). Для простоты вы можете применить этот процесс к обрезанной зоне ладони (как вы уже заметили, было бы легко обрезать, например, большой палец или прямоугольную зону вокруг центра тяжести и т. д.). Затем вы можете свернуть его с небольшой базой данных изображений той же зоны, чтобы получить скорость сопоставления, или вы можете использовать классификатор SVM, где вам нужно обучить SVM на наборе изображений, построив обучающую матрицу, необходимую для SVM (проверить этот вопрос), этот бумага
  2. Локальные двоичные шаблоны (LBP): это важный дескриптор функции, используемый для сопоставления текстур, вы можете применить его ко всему изображению ладони или к обрезанной зоне или пальцу изображения, его легко использовать в opencv, доступно множество руководств с кодами для этого метода. Я рекомендую вам прочитать этот бумага, рассказывающий о классификации инвариантных текстур. с локальными бинарными шаблонами. вот хороший руководство
  3. Текстура Haralick: я читал, что она отлично работает, когда набор функций дает количественную оценку всего изображения (глобальные дескрипторы функций). это не реализовано в opencv, но его легко реализовать, проверьте этот полезный учебник

  4. Модели обучения: я уже предложил классификатор SVM в сочетании с некоторым дескриптором, который может отлично работать. В Opencv есть интересный класс FaceRecognizer для распознавания лиц, может быть интересной идеей использовать его, заменяя изображения лица изображениями ладони (измените размер и поверните, чтобы получить уникальную позу ладони), этот класс имеет три метода, которые можно использовать , один из них — Local Binary Patterns Histograms, рекомендуемый для распознавания текстур. а почему бы не попробовать другие модели (Eigenfaces и Fisherfaces), проверьте это руководство

использовать классификатор Haar-Cascade, вы можете получить файл модели классификатора, а затем использовать его здесь. Просто найдите «Обнаружение Palm Haarcascade в Google» или используйте приведенный ниже код.

import cv2
cam=cv2.VideoCapture(0)
ccfr2=cv2.CascadeClassifier('haar-cascade-files-master/palm.xml')
while True:
    retval,image=cam.read()
    grey=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
    palm=ccfr2.detectMultiScale(grey,scaleFactor=1.05,minNeighbors=3)
    for x,y,w,h in palm:
        image=cv2.rectangle(image,(x,y),(x+w,y+h),(256,256,256),2)
    
    cv2.imshow("Window",image)
    if cv2.waitKey(1) & 0xFF==ord('q'):
        cv2.destroyAllWindows()
        break
del(cam)

Удачи вам в использовании HaarCascade.

Другие вопросы по теме