-
Notifications
You must be signed in to change notification settings - Fork 0
/
make_data.py
74 lines (57 loc) · 2.04 KB
/
make_data.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import cv2
import mediapipe as mp
import pandas as pd
# Đọc ảnh từ webcam
cap = cv2.VideoCapture(0)
# Khởi tạo thư viện mediapipe
mpPose = mp.solutions.pose
pose = mpPose.Pose()
mpDraw = mp.solutions.drawing_utils
lm_list = []
label = "BODYSWING"
no_of_frames = 600
# Tỉ lệ phần trăm của kích thước gốc
scale_percent = 150 # Tỉ lệ phần trăm của kích thước gốc
def make_landmark_timestep(results):
c_lm = []
for id, lm in enumerate(results.pose_landmarks.landmark):
c_lm.append(lm.x)
c_lm.append(lm.y)
c_lm.append(lm.z)
c_lm.append(lm.visibility)
return c_lm
def draw_landmark_on_image(mpDraw, results, img):
# Vẽ các đường nối
mpDraw.draw_landmarks(img, results.pose_landmarks, mpPose.POSE_CONNECTIONS)
# Vẽ các điểm nút
for id, lm in enumerate(results.pose_landmarks.landmark):
h, w, c = img.shape
cx, cy = int(lm.x * w), int(lm.y * h)
cv2.circle(img, (cx, cy), 10, (0, 0, 255), cv2.FILLED)
return img
while len(lm_list) <= no_of_frames:
ret, frame = cap.read()
if ret:
# Tính toán kích thước mới của khung hình
width = int(frame.shape[1] * scale_percent / 100)
height = int(frame.shape[0] * scale_percent / 100)
dim = (width, height)
# Thay đổi kích thước của khung hình
frame = cv2.resize(frame, dim, interpolation=cv2.INTER_AREA)
# Nhận diện pose
frameRGB = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
results = pose.process(frameRGB)
if results.pose_landmarks:
# Ghi nhận thông số khung xương
lm = make_landmark_timestep(results)
lm_list.append(lm)
# Vẽ khung xương lên ảnh
frame = draw_landmark_on_image(mpDraw, results, frame)
cv2.imshow("image", frame)
if cv2.waitKey(1) == ord('q'):
break
# Ghi vào file csv
df = pd.DataFrame(lm_list)
df.to_csv(label + ".txt")
cap.release()
cv2.destroyAllWindows()