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.
Nội dung bài viết
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.

