Pose Detection एक कंप्यूटर विज़न तकनीक है जो मुख्य बिंदुओं (landmarks) के आधार पर मानव शरीर की स्थिति निर्धारित करती है: सिर, कंधे, कोहनी, कलाई, कूल्हे, घुटने, टखने। प्रत्येक बिंदु के 2D स्पेस में (x, y) निर्देशांक होते हैं, और उन्नत मॉडल (MediaPipe BlazePose 3D) गहराई के लिए z-निर्देशांक जोड़ते हैं। मोबाइल एप्लिकेशन में, Pose Detection का उपयोग फिटनेस ट्रैकर्स, योगा ऐप्स, AR फ़िल्टर, पुनर्वास कार्यक्रमों और खेल विश्लेषण प्रणालियों में किया जाता है। Google ML Kit, 2025 के अनुसार, ऑन-डिवाइस Pose Detection 94% PCK सटीकता के साथ प्रति सेकंड 30 फ्रेम तक प्रोसेस करता है।
मुख्य बातें
Pose Detection (Pose Estimation भी कहा जाता है) एक छवि या वीडियो से मानव शरीर के सिमैंटिक मुख्य बिंदुओं को निर्धारित करने का कार्य है। Top-down दृष्टिकोण पहले व्यक्ति का पता लगाता है (Object Detection), फिर उसकी मुद्रा निर्धारित करता है। Bottom-up दृष्टिकोण छवि में सभी landmarks ढूंढता है, फिर उन्हें व्यक्ति के अनुसार समूहित करता है (OpenPose)। मोबाइल उपकरणों के लिए bottom-up का उपयोग किया जाता है — यह फ्रेम में कई लोगों के साथ तेज़ है। ML Kit और BlazePose एकल-चरण दृष्टिकोण का उपयोग करते हैं — एक पास में डिटेक्शन + मुद्रा।
COCO Keypoints — 17 बिंदुओं का एक मानक सेट: नाक, आँखें (2), कान (2), कंधे (2), कोहनी (2), कलाई (2), कूल्हे (2), घुटने (2), टखने (2)। MediaPipe BlazePose 33 बिंदुओं का उपयोग करता है, जिसमें जोड़ता है: पैर की उंगलियाँ, एड़ियाँ, धड़ का केंद्र, चेहरे के बिंदु। जितने अधिक बिंदु, उतना ही सटीक मुद्रा विश्लेषण, लेकिन कम्प्यूटेशनल लोड अधिक। फिटनेस ऐप्स के लिए, 17–20 बिंदु पर्याप्त हैं। पूर्ण विश्लेषण (योगा, नृत्य) के लिए — 33 बिंदु। AR फ़िल्टर के लिए — 33 बिंदु + 468 चेहरे के बिंदु (MediaPipe Face Mesh)।
PCK (Percentage of Correct Keypoints) — Pose Detection सटीकता मीट्रिक। यह ग्राउंड ट्रुथ से एक दूरी के भीतर भविष्यवाणी किए गए बिंदुओं के अनुपात की गणना करता है (आमतौर पर व्यक्ति के बाउंडिंग बॉक्स आकार का 0.05–0.15)। ML Kit Pose Detection: 94% PCK@0.1. BlazePose Full: 96% PCK@0.1. MoveNet Lightning: 91% PCK@0.1. OKS (Object Keypoint Similarity) — COCO में उपयोग किया जाने वाला मीट्रिक, जो व्यक्ति के पैमाने और बिंदु की कठिनाई को ध्यान में रखता है। mAP@OKS — बेंचमार्क के लिए मानक मीट्रिक।
| मॉडल | Landmarks | PCK@0.1 | विलंबता (GPU) | आकार |
|---|---|---|---|---|
| ML Kit Pose Acc | 33 | 94% | 15–30 ms | 14 MB |
| BlazePose Full | 33 + 3D | 96% | 10–20 ms | 12 MB |
| BlazePose Lite | 33 | 91% | 5–10 ms | 5 MB |
| MoveNet Lightning | 17 | 91% | 8–15 ms | 8 MB |
| MoveNet Thunder | 17 | 95% | 25–40 ms | 13 MB |
Keypoint Visibility: प्रत्येक landmark का एक स्कोर (0..1) होता है जो दर्शाता है कि मॉडल बिंदु के बारे में कितना आश्वस्त है और क्या यह दिखाई दे रहा है। स्कोर < 0.5 वाले बिंदु अदृश्य माने जाते हैं (अवरुद्ध, फ्रेम से बाहर)। मुद्रा विश्लेषण के लिए, केवल दृश्यमान बिंदुओं का उपयोग करें। संरेखण मूल्यांकन के लिए — कॉन्फिडेंस-भारित दूरियों की गणना करें, जहाँ कम स्कोर वाले बिंदुओं का मीट्रिक में कम भार होता है।
ML Kit Pose Detection — Google द्वारा ऑन-डिवाइस मुद्रा पहचान के लिए एक लाइब्रेरी। 33 landmarks का समर्थन करता है, जिसमें चेहरे के बिंदु, पैर की उंगलियाँ और एड़ियाँ शामिल हैं। मोड: Accurate Mode (14 MB मॉडल, 15–30 ms, उच्च सटीकता) और Streaming Mode (5 MB, 5–10 ms, रीयल-टाइम के लिए)। Streaming Mode ट्रैकिंग के साथ एक हल्का मॉडल उपयोग करता है — पहले फ्रेम के बाद, सटीक स्थितियों को फिर से डिटेक्ट किए बिना गति को ट्रैक करता है, जो 60 FPS तक प्राप्त करता है।
ML Kit Pose Detection API: PoseDetector (विकल्प: setDetectorMode, setPerformanceMode) → InputImage → Pose (List<PoseLandmark>). प्रत्येक PoseLandmark में है: landmarkType (38 प्रकार), position (PointF3D), inFrameLikelihood (0..1). Pose यह भी प्रदान करता है: व्यक्ति का boundingBox, landmarks की सूची, getLandmark(type) विधि। मुद्रा वर्गीकरण के लिए, हड्डियों के बीच कोणों का उपयोग करें: shoulderAngle, elbowAngle, hipAngle — आसन्न landmarks के बीच Vector3D के माध्यम से गणना की जाती है।
val options = PoseDetectorOptions.Builder()
.setDetectorMode(PoseDetectorOptions.STREAM_MODE)
.setPerformanceMode(PoseDetectorOptions.PERFORMANCE_MODE_FAST)
.build()
val detector = PoseDetection.getClient(options)
detector.process(inputImage)
.addOnSuccessListener { pose ->
val leftElbow = pose.getLandmark(PoseLandmark.LEFT_ELBOW)
val leftShoulder = pose.getLandmark(PoseLandmark.LEFT_SHOULDER)
val leftWrist = pose.getLandmark(PoseLandmark.LEFT_WRIST)
val elbowAngle = calculateAngle(
leftShoulder.position, leftElbow.position, leftWrist.position
)
}
iOS पर ML Kit: Pose Detection ML Kit CocoaPods के माध्यम से उपलब्ध है। API Android के समान है: PoseDetector → UIImage → Pose → PoseLandmark. iOS पर, ML Kit Core ML और ANE (A12+) का उपयोग करता है, जो iPhone 15 Pro पर Accurate Mode में 10–20 ms विलंबता प्राप्त करता है। Streaming Mode — 3–8 ms, 120 FPS तक। iOS पर, ML Kit Pose Detection MediaPipe BlazePose से तेज़ है (Core ML त्वरण), लेकिन पुराने उपकरणों (iPhone X–11) पर FPS में BlazePose से पीछे है।
MediaPipe BlazePose — Google Research का Pose Detection के लिए एक उच्च-प्रदर्शन मॉडल। एक हाइब्रिड आर्किटेक्चर का उपयोग करता है: MobileNetV2 + Feature Pyramid Network पर आधारित detector-decoder पाइपलाइन। BlazePose Full: 33 landmarks + 3D निर्देशांक (गहराई z). BlazePose Lite: 33 landmarks (2D) बिना गहराई के। दोनों मॉडल Android, iOS, Python और Web पर MediaPipe Tasks Vision में उपलब्ध हैं। BlazePose Full GPU पर 30–60 FPS प्रोसेस करता है, Lite — 60+ FPS।
BlazePose के साथ 3D मुद्रा अनुमान: मॉडल प्रत्येक landmark के लिए z-निर्देशांक की भविष्यवाणी करता है, जो स्टीरियो कैमरे के बिना गहराई अनुमान (अंगों का निकट/दूर) की अनुमति देता है। Z-निर्देशांक कैमरे के सापेक्ष मीट्रिक स्पेस (मीटर) में गणना की जाती है। BlazePose 3D सटीकता: सार्वजनिक बेंचमार्क पर 37 mm MPJPE (Mean Per Joint Position Error) — फिटनेस और AR के लिए पर्याप्त, चिकित्सा निदान के लिए अपर्याप्त। ARKit/ARFoundation के लिए, BlazePose 3D प्राकृतिक गहराई प्रदान करता है।
// MediaPipe Pose Detection Tasks Vision
val options = PoseLandmarkerOptions.Builder()
.setBaseOptions(BaseOptions.builder()
.setModelAssetPath("pose_landmarker_full.task")
.build())
.setDelegate(Delegate.GPU)
.build()
val landmaker = PoseLandmarker.createFromOptions(context, options)
val result = landmaker.detect(MPImage.fromBitmap(bitmap))
result.landmarks.forEach { pose ->
pose.forEach { landmark ->
drawLandmark(landmark.x, landmark.y, landmark.z)
}
}
BlazePose बनाम ML Kit Pose Detection: BlazePose तेज़ है (60+ FPS बनाम 30 FPS), 3D निर्देशांक का समर्थन करता है, MediaPipe के माध्यम से क्रॉस-प्लेटफ़ॉर्म काम करता है। ML Kit को एकीकृत करना आसान है (MediaPipe SDK की आवश्यकता नहीं), उच्च सटीकता के साथ पूर्व-प्रशिक्षित मॉडल शामिल हैं। iOS-नेटिव प्रोजेक्ट्स के लिए — ML Kit Pose Detection (सर्वश्रेष्ठ ANE अनुकूलन)। क्रॉस-प्लेटफ़ॉर्म प्रोजेक्ट्स (Flutter, React Native) के लिए — MediaPipe BlazePose (सभी प्लेटफ़ॉर्म के लिए एकीकृत मॉडल)। मांग वाले दृश्यों में सटीकता के लिए — दोनों मॉडल तुलनीय हैं।
MoveNet — TensorFlow से Pose Detection मॉडलों का एक परिवार, TFLite के लिए अनुकूलित। Lightning (8 MB, INT8 — 4 MB): 17 COCO keypoints, 91% PCK, 8–15 ms विलंबता, 30+ FPS. Thunder (13 MB, INT8 — 6 MB): 17 keypoints, 95% PCK, 25–40 ms विलंबता, 20+ FPS. MoveNet CenterNet आर्किटेक्चर + उच्च-रिज़ॉल्यूशन हीटमैप के लिए bilinear interpolation का उपयोग करता है। MoveNet मल्टी-पोज़ डिटेक्शन (6 लोगों तक) का समर्थन करता है। मॉडल TensorFlow Hub पर उपलब्ध हैं।
MoveNet Lightning बनाम Thunder: Lightning — उच्च FPS (फिटनेस, AR फ़िल्टर) के साथ रीयल-टाइम एप्लिकेशन के लिए। Thunder — GPU वाले उपकरणों पर सटीक मुद्रा विश्लेषण (पुनर्वास, खेल विश्लेषण) के लिए। दोनों मॉडल iOS के लिए tf-coreml के माध्यम से Core ML में परिवर्तित होते हैं। MoveNet TFLite Task Vision PoseLandmarker API के माध्यम से भी उपलब्ध है। अनुशंसा: Lightning से शुरू करें, यदि सटीकता अपर्याप्त है — Thunder पर स्विच करें (केवल +15 ms विलंबता ओवरहेड)।
// TFLite के साथ MoveNet अनुमान
Interpreter interpreter = new Interpreter(loadModel(context));
TensorImage image = TensorImage.fromBitmap(bitmap);
image.load(Bitmap.createScaledBitmap(bitmap, 192, 192, true));
float[][] output = new float[1][51];
interpreter.run(image.getTensorBuffer(), output);
float[] keypoints = output[0];
for (int i = 0; i < 17; i++) {
float y = keypoints[i * 3];
float x = keypoints[i * 3 + 1];
float score = keypoints[i * 3 + 2];
drawKeypoint(x, y, score);
}
MoveNet मल्टी-पोज़: फ्रेम में 6 लोगों तक का पता लगाना। मानक हीटमैप दृष्टिकोण के बजाय, MoveNet व्यक्ति डिटेक्शन + मुद्रा परिशोधन का उपयोग करता है: पहले लोगों का पता लगाता है (सेंट्रॉइड-आधारित), फिर प्रत्येक मुद्रा का अनुमान लगाता है। मल्टी-पोज़ मोड सिंगल-पोज़ की तुलना में 2–3x धीमा है: Lightning — 25–50 ms (6 लोग)। एकल उपयोगकर्ता वाले फिटनेस ऐप्स के लिए, सिंगल-पोज़ का उपयोग करें। समूह गतिविधियों (योगा, क्रॉसफ़िट) के लिए — बैटरी बचाने के लिए फ्रेम दर सीमित करने के साथ मल्टी-पोज़।
Pose Classification — डिटेक्शन के बाद का चरण: landmarks को सिमैंटिक क्रियाओं (खड़ा, बैठा, हाथ उठाया, बैठना) में परिवर्तित करना। दृष्टिकोण: Rule-based (मैन्युअल नियम — हड्डियों के बीच कोण), ML-based (landmark वेक्टर पर लॉजिस्टिक रिग्रेशन या Random Forest), DL-based (फ्रेमों में मुद्रा अनुक्रम का LSTM वर्गीकरण)। Rule-based — 50–80% सटीकता, सरल और तेज़। ML-based — 200+ लेबल किए गए उदाहरणों के साथ 85–95% सटीकता। LSTM — समय श्रृंखला (वीडियो) पर 90–98% सटीकता।
हड्डियों के बीच कोण: प्रत्येक बिंदु के लिए, पड़ोसी बिंदुओं के साथ कोणों की गणना की जाती है। उदाहरण: दाहिनी कोहनी का कोण (कंधा → कोहनी → कलाई), दाहिने घुटने का कोण (कूल्हा → घुटना → टखना), धड़ का कोण (कंधों का मध्यबिंदु → कूल्हों का मध्यबिंदु)। कोण व्यक्ति के पैमाने और स्क्रीन स्थिति के प्रति अपरिवर्तनीय हैं। कोणों को [0, 1] रेंज में सामान्यीकृत करना एक सरल थ्रेशोल्ड नियम के साथ मुद्रा वर्गीकरण की अनुमति देता है: यदि elbowAngle < 30° — हाथ मुड़ा हुआ है, यदि > 150° — फैला हुआ है।
// नियम-आधारित स्क्वाट वर्गीकरणकर्ता
fun classifySquat(pose: Pose): SquatPhase {
val kneeAngle = angle(
pose.getLandmark(PoseLandmark.LEFT_HIP),
pose.getLandmark(PoseLandmark.LEFT_KNEE),
pose.getLandmark(PoseLandmark.LEFT_ANKLE)
)
return when {
kneeAngle > 140f -> SquatPhase.STANDING
kneeAngle < 90f -> SquatPhase.SQUAT
else -> SquatPhase.TRANSITION
}
}
MediaPipe Pose Classification — MediaPipe Tasks में शामिल पूर्व-प्रशिक्षित वर्गीकरणकर्ता: स्क्वाट, पुश-अप, प्लैंक, लेग रेज़। वर्गीकरणकर्ता landmarks की एक सूची लेता है और क्रिया + कॉन्फिडेंस लौटाता है। इसमें टेम्पोरल स्मूथिंग (अस्थायी फ़िल्टर) शामिल है: मुद्राओं के बीच सहज संक्रमण के लिए HED (Holt Exponential Double Smoothing)। कस्टम क्रियाओं के लिए — MediaPipe Model Maker (TensorFlow Lite + मेटाडेटा) के माध्यम से 100–500 उदाहरणों पर एक वर्गीकरणकर्ता प्रशिक्षित करें।
तकनीक सुधार के साथ फिटनेस ट्रैकर्स — ऐप व्यायाम के दौरान उपयोगकर्ता की मुद्रा का विश्लेषण करता है और वॉइस संकेत प्रदान करता है: "कूल्हों को नीचे करें", "धड़ को आगे न झुकाएं"। ML Kit Pose Detection + रूल-बेस्ड वर्गीकरणकर्ता दोहराव गिनता है और गुणवत्ता का मूल्यांकन करता है। स्क्वाट: घुटने का कोण < 90° — सही स्क्वाट, पीठ का कोण < 45° — खतरनाक धड़ झुकाव। पुश-अप: निचले बिंदु पर कोहनी का कोण < 90° — पूर्ण पुश-अप। पुल-अप: बार के स्तर से ऊपर ठोड़ी।
पुनर्वास और फिजियोथेरेपी — Pose Detection का उपयोग फिजिकल थेरेपी अभ्यासों की दूरस्थ निगरानी के लिए किया जाता है। एक डॉक्टर एक संदर्भ मुद्रा निर्धारित करता है (जैसे, 45° पर कंधे का अपहरण), ऐप वर्तमान कोण और विचलन को मापता है। BlazePose 3D कोण सटीकता ±3° प्रदान करता है — नैदानिक मूल्यांकन के लिए पर्याप्त। आवृत्ति: प्रति 3–5 सेकंड में 1 फ्रेम (बैटरी बचत)। ऑन-डिवाइस — रोगी के चिकित्सा डेटा की गोपनीयता। स्ट्रोक के बाद पुनर्वास: हाथ-से-कंधे, कोहनी-विस्तार, कूल्हे-फ्लेक्सन ट्रैकिंग।
AR फ़िल्टर और प्रभाव — Pose Detection सोशल नेटवर्क (TikTok, Instagram, Snapchat) में AR फ़िल्टर का आधार है। सिर, कंधों और हाथों के landmarks का उपयोग मास्क, एनिमेशन, सजावटी तत्वों को ओवरले करने के लिए किया जाता है। MediaPipe BlazePose Full + Face Mesh (468 बिंदु) फ्लैगशिप उपकरणों पर 120+ FPS प्रदान करता है। ARKit/ARCore Face Tracking + Pose Detection — पूर्ण-शरीर AR के लिए एक संयोजन। आवश्यकताएँ: FPS > 30, motion-to-photon विलंबता < 20 ms।
// मुद्रा landmarks के साथ AR फ़िल्टर
let request = VNDetectHumanBodyPoseRequest { req, _ in
guard let observation = req.results?.first as? VNHumanBodyPoseObservation else { return }
let keypoints = try observation.recognizedPoints(.all)
let rightShoulder = keypoints[VNHumanBodyPoseObservation.JointName.rightShoulder]
DispatchQueue.main.async {
arView.placeFilter(at: rightShoulder?.location ?? .zero)
}
}
खेल विश्लेषण — पेशेवर तकनीक मूल्यांकन: दौड़ का बायोमैकेनिकल विश्लेषण (केडेंस, स्ट्राइड लंबाई, बांह स्विंग समरूपता), तैराकी (बॉडी रोल, स्ट्रोक के दौरान कोहनी का कोण), टेनिस (कंधे का रोटेशन, कलाई का स्नैप)। MoveNet Thunder पोस्ट-प्रोसेसिंग के साथ गैर-पेशेवर विश्लेषण के लिए पर्याप्त सटीकता प्रदान करता है। पेशेवर खेलों में 3D मोशन कैप्चर (Vicon, OptiTrack) की आवश्यकता होती है, लेकिन फ़ोन-आधारित Pose Detection बड़े पैमाने पर बाजार के लिए एक किफायती विकल्प है। फ्रेमों के बीच कोण सिंक्रनाइज़ेशन एक महत्वपूर्ण घटक है।
अक्सर पूछे जाने वाले प्रश्न
टेम्पोरल स्मूथिंग का उपयोग करें: One Euro Filter (1€ फ़िल्टर) — प्रत्येक landmark के लिए अलग से कॉन्फ़िगरेबल कट-ऑफ फ़्रीक्वेंसी, वास्तविक गति (कम विलंबता) को संरक्षित करते हुए उच्च-आवृत्ति शोर (हिलना) को दबाता है। MediaPipe BlazePose में बिल्ट-इन HED (Holt Exponential Double Smoothing) शामिल है — गति पूर्वानुमान के साथ अनुकूली स्मूथिंग। ML Kit के लिए, 1€ फ़िल्टर स्वयं कार्यान्वित करें: फ़िल्टर के दो पैरामीटर हैं — beta (गति) और minCutoff (आवृत्ति थ्रेशोल्ड)। अनुशंसित: beta = 0.04, minCutoff = 0.5 (Android).
ML Kit Pose Detection — एक व्यक्ति (सिंगल-पोज़)। MoveNet Lightning — 6 लोगों तक (मल्टी-पोज़)। MediaPipe BlazePose — MediaPipe Tasks के माध्यम से 2–3 लोगों तक (मल्टी-पोज़)। समूह गतिविधि ऐप्स के लिए, MoveNet Lightning या BlazePose का उपयोग करें। एक उपयोगकर्ता वाले फिटनेस ऐप्स के लिए — ML Kit (आसान एकीकरण, उच्च सिंगल-पोज़ सटीकता)। AR फ़िल्टर के साथ वीडियो कॉल के लिए — मल्टी-पोज़ (उच्च FPS) के साथ BlazePose Lite पर्याप्त है।
दो हड्डियों के बीच कोण: तीन landmarks लें — जोड़ A, जोड़ B (कोण का शीर्ष), जोड़ C। वेक्टर BA = (A - B) और BC = (C - B) की गणना करें। कोण = atan2(cross(BA, BC), dot(BA, BC)). Math.toDegrees(acos(dot(BA, BC) / (len(BA) * len(BC)))). कोण 0–180° की सीमा में। त्रि-आयामी निर्देशांक (BlazePose 3D) के लिए Vector3D का उपयोग करें। ML वर्गीकरणकर्ता के लिए कोणों को [0,1] सीमा में सामान्यीकृत करें।
हाँ, सभी प्रमुख मॉडल (ML Kit, BlazePose, MoveNet) एक साथ दोनों हाथों के landmarks का पता लगाते हैं: LEFT_SHOULDER, LEFT_ELBOW, LEFT_WRIST, RIGHT_SHOULDER, RIGHT_ELBOW, RIGHT_WRIST। अतिरिक्त हाथ ट्रैकिंग के लिए, Pose Detection + Hand Landmarker (प्रति हाथ 21 बिंदु) को मिलाएं। MediaPipe Hands + BlazePose पूर्ण-शरीर + हाथों के लिए मानक संयोजन है। iOS पर — VNDetectHumanHandPoseRequest + VNDetectHumanBodyPoseRequest।
ML Kit Pose Detection: न्यूनतम व्यक्ति बाउंडिंग बॉक्स — 100x100 पिक्सेल (पहलू अनुपात ~1:1)। MoveNet Lightning: 120x120 पिक्सेल। BlazePose: 80x160 पिक्सेल (ऊर्ध्वाधर बाउंडिंग बॉक्स)। कैमरे से 3 मीटर की दूरी पर पूर्ण-ऊंचाई वाले व्यक्ति के लिए (1920x1080) — लगभग 250x600 px, जो पर्याप्त है। > 5 मीटर की दूरी पर, सटीकता कम हो जाती है — मल्टी-पोज़ + उच्च-रिज़ॉल्यूशन इनपुट का उपयोग करें। दूर की वस्तुओं के लिए, Object Detection + Pose Estimation (दो-चरण) बेहतर है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें