Как сравнить два поза тела, обнаруженные с vnetecthumanbodyposerequest от Vision? [закрыто]IOS

Программируем под IOS
Ответить
Anonymous
 Как сравнить два поза тела, обнаруженные с vnetecthumanbodyposerequest от Vision? [закрыто]

Сообщение Anonymous »

Я работаю над приложением iOS, где я хочу проверить, являются ли два поза одинаковыми (например, сопоставление живой позы йоги с заданной опорной позой). < /p>
Я использую vndetecthumanbodeposerequest, чтобы извлечь совместные клавиши, затем я сравниваю их. Вот упрощенная версия моего кода: < /p>

Код: Выделить всё

func processPresetImage(_ image: UIImage) -> BodyProcessingResult? {
guard let cgImage = image.cgImage else { return nil }

let requests = [
VNDetectHumanBodyPoseRequest(),
VNDetectHumanHandPoseRequest(),
VNDetectFaceLandmarksRequest()
]

let requestHandler = VNImageRequestHandler(
cgImage: cgImage,
orientation: .init(image.imageOrientation),
options: [:]
)

do {
try requestHandler.perform(requests)
} catch {
print("Can't make the request due to \(error)")
return nil
}

let resultPointsProviders = requests.compactMap { $0 as? ResultPointsProviding }

let points = resultPointsProviders
.flatMap { $0.pointsProjected(onto: image) }

return BodyProcessingResult(
originalImage: image,
openPaths: resultPointsProviders.flatMap { $0.openPointGroups(projectedOnto: image) },
closedPaths: resultPointsProviders.flatMap { $0.closedPointGroups(projectedOnto: image) },
points: points)
}
< /code>
Затем я пытаюсь сравнить два поза, как это: < /p>
func calculateRobustPoseScore(livePose: BodyProcessingResult,presetPose: BodyProcessingResult,strictnessLevel: Double = 0.15) -> Double {
var validPairs: [(live: CGPoint, preset: CGPoint)] = []
let minCount = min(livePose.points.count, presetPose.points.count)

for i in 0..= 4 else { return 0.0 }

let liveChar = calculatePoseCharacteristics(points: validPairs.map { $0.live })
let presetChar = calculatePoseCharacteristics(points: validPairs.map { $0.preset })

let normalizedPairs = normalizePosePairs(validPairs, liveChar: liveChar, presetChar: presetChar)
let alignment = findOptimalAlignment(pairs: normalizedPairs)

let alignedDistances = calculateAlignedDistances(pairs: normalizedPairs, alignment: alignment)
return calculateFinalScore(distances: alignedDistances, strictness: strictnessLevel)
}
Проблема:

Если пользователь ближе/дальше от камеры, сравнение сильно изменяется, даже если поза одинакова. />
Как я могу сравнить два поза так, чтобы это было масштабно-позиционно-инвариантным, поэтому я могу надежно проверить, являются ли два поза йоги одинаково с помощью обнаружения позы Vision? < /li>
< /ul>

Подробнее здесь: https://stackoverflow.com/questions/797 ... posereques
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»