Projects

Dự án CV: phát hiện tư thế làm việc có nguy cơ bằng pose estimation

Tính góc cúi lưng, tay trên vai từ keypoint, tổng hợp theo trạm làm việc để cải thiện công thái học.

Dự án CV: phát hiện tư thế làm việc có nguy cơ bằng pose estimation
Nội dung bài viết
  1. Pose estimation là gì?
  2. Chạy mô hình pose
  3. Tính góc cúi lưng
  4. Từ khung hình đến báo cáo
  5. Giới hạn kỹ thuật
  6. Quyền riêng tư và sự đồng thuận

Cúi gập lưng, nâng vật sai tư thế, giơ tay cao quá vai liên tục là nguyên nhân phổ biến của chấn thương cơ xương khớp ở công nhân. Dự án này dùng pose estimation (ước lượng tư thế) để phát hiện tư thế làm việc có nguy cơ và tạo báo cáo cải thiện công thái học cho từng trạm làm việc.

Pose estimation là gì?

Mô hình phát hiện các điểm khớp (keypoint) trên cơ thể người: vai, khuỷu tay, cổ tay, hông, đầu gối, mắt cá... Định dạng COCO có 17 keypoint. Từ tọa độ các khớp, ta tính được góc lưng, góc khuỷu tay, độ cao tay so với vai.

Chạy mô hình pose

import numpy as np
from ultralytics import YOLO

model = YOLO("yolo26n-pose.pt")
r = model("tram-dong-goi.jpg")[0]
kpts = r.keypoints.xy.cpu().numpy()          # [số người, 17, 2]
conf = r.keypoints.conf.cpu().numpy()        # độ tin cậy từng keypoint
# Chỉ số COCO: 5/6 vai trái/phải, 7/8 khuỷu, 9/10 cổ tay, 11/12 hông, 13/14 đầu gối

Tính góc cúi lưng

def back_angle(k):
    """Góc giữa thân người (hông -> vai) và phương thẳng đứng, đơn vị độ."""
    shoulder = (k[5] + k[6]) / 2
    hip = (k[11] + k[12]) / 2
    v = shoulder - hip
    # trục y của ảnh hướng xuống, nên phương thẳng đứng hướng lên là (0, -1)
    cos = np.dot(v, [0, -1]) / (np.linalg.norm(v) + 1e-9)
    return np.degrees(np.arccos(np.clip(cos, -1, 1)))

def hands_above_shoulder(k):
    return k[9][1] < k[5][1] or k[10][1] < k[6][1]     # y nhỏ hơn = cao hơn

for i, k in enumerate(kpts):
    if conf[i][[5, 6, 11, 12]].min() < 0.5:
        continue                                       # khớp không rõ, bỏ qua
    print(f"Người {i}: cúi lưng {back_angle(k):.0f}°, tay trên vai: {hands_above_shoulder(k)}")

Từ khung hình đến báo cáo

  • Một khung hình cúi lưng chưa phải vấn đề; vấn đề là tần suất và thời lượng. Ghi lại tỷ lệ thời gian lưng cúi quá ngưỡng (ví dụ trên 45°) và số lần giơ tay cao mỗi giờ.
  • Tổng hợp theo trạm làm việc và thao tác, không theo cá nhân: mục tiêu là cải thiện thiết kế trạm (độ cao bàn, vị trí đặt vật tư), không phải giám sát người lao động.
  • Kết hợp với chuyên gia an toàn – sức khỏe nghề nghiệp để chọn ngưỡng và diễn giải kết quả theo các phương pháp đánh giá công thái học được công nhận.

Giới hạn kỹ thuật

  • Ảnh 2D làm sai lệch góc khi người quay nghiêng so với camera; đặt camera nhìn ngang, vuông góc với hướng làm việc chính, hoặc dùng nhiều camera.
  • Bàn, máy móc che khuất phần dưới cơ thể làm thiếu keypoint.
  • Quần áo bảo hộ rộng làm giảm độ chính xác vị trí khớp.

Quyền riêng tư và sự đồng thuận

Trao đổi rõ với người lao động về mục đích, chỉ lưu dữ liệu keypoint và số liệu tổng hợp thay vì video, xử lý tại chỗ và xóa ảnh gốc. Một dự án công thái học thành công là dự án được chính người lao động ủng hộ vì nó giúp họ làm việc an toàn hơn.

Ban biên tập HọcFree

Chúng tôi viết những bài hướng dẫn dễ hiểu, thực tế để ai cũng có thể tự học lập trình và ngoại ngữ, hoàn toàn miễn phí.