Day 60: Integrating pose into the pipeline
Detection → pose, wired together
Connect the two components: YOLO finds the person box, you crop to it, MediaPipe estimates pose within the crop, and you derive the measurement vector. Cropping to the detected person first improves pose accuracy (less background to confuse it) and enforces the top-down design from Day 56. This is the first real integration — two models cooperating, each consuming the previous one's output.
def measure_person(img_bgr):
det = detector(img_bgr)[0]
person = max((b for b in det.boxes if names[int(b.cls)] == "person"),
key=lambda b: b.conf, default=None)
if person is None:
return {"error": "no person detected"}
x1, y1, x2, y2 = map(int, person.xyxy[0])
crop = img_bgr[y1:y2, x1:x2] # top-down: pose within the box
landmarks = run_pose(crop)
if landmarks is None:
return {"error": "pose estimation failed"}
return derive_measurements(landmarks, crop.shape)Each stage can fail — handle it explicitly
No person detected, pose estimation failing on a bad crop — these aren't edge cases to ignore, they're expected inputs. Returning a clear error rather than crashing (or worse, returning a confident garbage measurement) is the difference between a pipeline and a demo. Day 76 formalizes this across all four models.
Key terms
- Pipeline integration
- Connecting components so each consumes the previous stage's output, with the whole forming one operation.
- Crop-then-estimate
- Cropping to the detected person before pose estimation, improving accuracy and enforcing top-down design.
Why crop to the detected person box before running pose estimation?