Я использую 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
Мобильная версия