๋ค์์ ์ฌ์ฉํ์ฌ ์ด๋ ๋ชจ๋ํฐ๋ง Ultralytics YOLO11
์์ธ ์ถ์ ์ ํตํ ์ด๋ ๋ชจ๋ํฐ๋ง Ultralytics YOLO11 ๋ ์ ์ฒด์ ์ฃผ์ ๋๋๋งํฌ์ ๊ด์ ์ ์ค์๊ฐ์ผ๋ก ์ ํํ๊ฒ ์ถ์ ํ์ฌ ์ด๋ ํ๊ฐ๋ฅผ ํฅ์์ํต๋๋ค. ์ด ๊ธฐ์ ์ ์ด๋ ์์ธ์ ๋ํ ์ฆ๊ฐ์ ์ธ ํผ๋๋ฐฑ์ ์ ๊ณตํ๊ณ , ์ด๋ ๋ฃจํด์ ์ถ์ ํ๋ฉฐ, ์ฑ๊ณผ ์งํ๋ฅผ ์ธก์ ํ์ฌ ์ฌ์ฉ์์ ํธ๋ ์ด๋ ๋ชจ๋๋ฅผ ์ํด ํธ๋ ์ด๋ ์ธ์ ์ ์ต์ ํํฉ๋๋ค.
Watch: Ultralytics YOLO11 | ํธ์์
, ํ์
, ๋ณต๊ทผ ์ด๋์ ์ด์ฉํ ์ด๋ ๋ชจ๋ํฐ๋ง
์ด๋ ๋ชจ๋ํฐ๋ง์ ์ฅ์ ์?
- ์ต์ ํ๋ ํผํฌ๋จผ์ค: ๋ ๋์ ๊ฒฐ๊ณผ๋ฅผ ์ํ ๋ชจ๋ํฐ๋ง ๋ฐ์ดํฐ์ ๊ธฐ๋ฐํ ๋ง์ถคํ ์ด๋.
- ๋ชฉํ ๋ฌ์ฑ: ์ธก์ ๊ฐ๋ฅํ ์งํ ์ํฉ์ ์ํด ํผํธ๋์ค ๋ชฉํ๋ฅผ ์ถ์ ํ๊ณ ์กฐ์ ํ์ธ์.
- ๊ฐ์ธํ: ๊ฐ์ธ๋ณ ๋ฐ์ดํฐ์ ๊ธฐ๋ฐํ ๋ง์ถคํ ์ด๋ ๊ณํ์ผ๋ก ์ด๋ ํจ๊ณผ๋ฅผ ๋์ผ ์ ์์ต๋๋ค.
- ๊ฑด๊ฐ ์ธ์: ๊ฑด๊ฐ ๋ฌธ์ ๋๋ ๊ณผ๋ํ ํ๋ จ์ ๋ํ๋ด๋ ํจํด์ ์กฐ๊ธฐ์ ๊ฐ์งํฉ๋๋ค.
- ์ ๋ณด์ ๊ธฐ๋ฐํ ์์ฌ ๊ฒฐ์ : ๋ฃจํด์ ์กฐ์ ํ๊ณ ํ์ค์ ์ธ ๋ชฉํ๋ฅผ ์ค์ ํ๊ธฐ ์ํ ๋ฐ์ดํฐ ๊ธฐ๋ฐ ์์ฌ ๊ฒฐ์ .
์ค์ ์ ํ๋ฆฌ์ผ์ด์
์ด๋ ๋ชจ๋ํฐ๋ง | ์ด๋ ๋ชจ๋ํฐ๋ง |
---|---|
ํธ์์ ์นด์ดํ | ํ์ ์นด์ดํ |
์ด๋ ๋ชจ๋ํฐ๋ง ์์
import cv2
from ultralytics import solutions
cap = cv2.VideoCapture("path/to/video/file.mp4")
assert cap.isOpened(), "Error reading video file"
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))
# Video writer
video_writer = cv2.VideoWriter("workouts.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
# Init AIGym
gym = solutions.AIGym(
show=True, # Display the frame
kpts=[6, 8, 10], # keypoints index of person for monitoring specific exercise, by default it's for pushup
model="yolo11n-pose.pt", # Path to the YOLO11 pose estimation model file
# line_width=2, # Adjust the line width for bounding boxes and text display
)
# Process video
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or video processing has been successfully completed.")
break
im0 = gym.monitor(im0)
video_writer.write(im0)
cv2.destroyAllWindows()
video_writer.release()
ํคํฌ์ธํธ ๋งต
์ธ์ AIGym
์ด๋ฆ | ์ ํ | ๊ธฐ๋ณธ๊ฐ | ์ค๋ช |
---|---|---|---|
kpts |
list |
None |
ํน์ ์ด๋์ ๊ณ์ฐํ๊ธฐ ์ํ ์ธ ๊ฐ์ง ํคํฌ์ธํธ ์ธ๋ฑ์ค ๋ชฉ๋ก๊ณผ ํคํฌ์ธํธ ์ง๋ |
line_width |
int |
2 |
๊ทธ๋ ค์ง ์ ์ ๋๊ป์ ๋๋ค. |
show |
bool |
False |
ํ๋๊ทธ๋ฅผ ํด๋ฆญํ์ฌ ์ด๋ฏธ์ง๋ฅผ ํ์ํฉ๋๋ค. |
up_angle |
float |
145.0 |
'์๋ก' ํฌ์ฆ์ ๋ํ ๊ฐ๋ ์๊ณ๊ฐ์ ๋๋ค. |
down_angle |
float |
90.0 |
'์๋' ํฌ์ฆ์ ๋ํ ๊ฐ๋ ์๊ณ๊ฐ์ ๋๋ค. |
model |
str |
None |
Ultralytics YOLO ํฌ์ฆ ๋ชจ๋ธ ํ์ผ ๊ฒฝ๋ก |
์ธ์ model.predict
์ธ์ | ์ ํ | ๊ธฐ๋ณธ๊ฐ | ์ค๋ช |
---|---|---|---|
source |
str |
'ultralytics/assets' |
์ถ๋ก ํ ๋ฐ์ดํฐ ์์ค๋ฅผ ์ง์ ํฉ๋๋ค. ์ด๋ฏธ์ง ๊ฒฝ๋ก, ๋์์ ํ์ผ, ๋๋ ํ ๋ฆฌ, URL ๋๋ ์ค์๊ฐ ํผ๋์ฉ ๋๋ฐ์ด์ค ID๊ฐ ๋ ์ ์์ต๋๋ค. ๋ค์ํ ํ์๊ณผ ์์ค๋ฅผ ์ง์ํ๋ฏ๋ก ๋ค์ํ ์ ํ์ ์ ๋ ฅ์ ์ ์ฐํ๊ฒ ์ ์ฉํ ์ ์์ต๋๋ค. |
conf |
float |
0.25 |
ํ์ง์ ๋ํ ์ต์ ์ ๋ขฐ๋ ์๊ณ๊ฐ์ ์ค์ ํฉ๋๋ค. ์ด ์๊ณ๊ฐ๋ณด๋ค ๋ฎ์ ์ ๋ขฐ๋๋ก ํ์ง๋ ๊ฐ์ฒด๋ ๋ฌด์๋ฉ๋๋ค. ์ด ๊ฐ์ ์กฐ์ ํ๋ฉด ์คํ์ง๋ฅผ ์ค์ด๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. |
iou |
float |
0.7 |
๋น์ต๋ ์ต์ (NMS)์ ๋ํ ๊ต์ฐจ์ ์ด๊ณผ (IoU) ์๊ณ๊ฐ์ ๋๋ค. ๊ฐ์ด ๋ฎ์์๋ก ์ค๋ณต๋๋ ์์๋ฅผ ์ ๊ฑฐํ์ฌ ํ์ง ํ์๊ฐ ์ค์ด๋ค์ด ์ค๋ณต์ ์ค์ด๋ ๋ฐ ์ ์ฉํฉ๋๋ค. |
imgsz |
int or tuple |
640 |
์ถ๋ก ํ ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์ ์ํฉ๋๋ค. ๋จ์ผ ์ ์์ผ ์ ์์ต๋๋ค. 640 ๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฌ๊ฐํ ํฌ๊ธฐ ์กฐ์ ๋๋ (๋์ด, ๋๋น) ํํ์ ์ฌ์ฉํฉ๋๋ค. ์ ์ ํ ํฌ๊ธฐ ์กฐ์ ์ ๊ฐ์ง์จ์ ํฅ์์ํฌ ์ ์์ต๋๋ค. ์ ํ์ฑ ์ฒ๋ฆฌ ์๋. |
half |
bool |
False |
์ ํ๋์ ๋ฏธ์น๋ ์ํฅ์ ์ต์ํํ๋ฉด์ ์ง์๋๋ GPU์์ ๋ชจ๋ธ ์ถ๋ก ์๋๋ฅผ ๋์ผ ์ ์๋ ๋ฐ์ ํ๋ (FP16) ์ถ๋ก ์ ํ์ฑํํฉ๋๋ค. |
device |
str |
None |
์ถ๋ก ํ ์ฅ์น๋ฅผ ์ง์ ํฉ๋๋ค(์, cpu , cuda:0 ๋๋ 0 ). ์ฌ์ฉ์๊ฐ ๋ชจ๋ธ ์คํ์ ์ํด CPU, ํน์ GPU, ๋๋ ๊ธฐํ ์ปดํจํ
์ฅ์น ์ค์์ ์ ํํ ์ ์์ต๋๋ค. |
max_det |
int |
300 |
์ด๋ฏธ์ง๋น ํ์ฉ๋๋ ์ต๋ ๊ฐ์ง ํ์. ๋ชจ๋ธ์ด ํ ๋ฒ์ ์ถ๋ก ์์ ๊ฐ์งํ ์ ์๋ ์ด ์ค๋ธ์ ํธ ์๋ฅผ ์ ํํ์ฌ ๋ฐ์ง๋ ์ฅ๋ฉด์์ ๊ณผ๋ํ ์ถ๋ ฅ์ ๋ฐฉ์งํฉ๋๋ค. |
vid_stride |
int |
1 |
๋น๋์ค ์ ๋ ฅ์ ํ๋ ์ ๋ณดํญ. ๋์์์์ ํ๋ ์์ ๊ฑด๋๋ฐ์ด ์๊ฐ ํด์๋๋ฅผ ํฌ์ํ๋ฉด์ ์ฒ๋ฆฌ ์๋๋ฅผ ๋์ผ ์ ์์ต๋๋ค. ๊ฐ์ด 1์ด๋ฉด ๋ชจ๋ ํ๋ ์์ ์ฒ๋ฆฌํ๊ณ , ๊ฐ์ด ํด์๋ก ํ๋ ์์ ๊ฑด๋๋๋๋ค. |
stream_buffer |
bool |
False |
๋น๋์ค ์คํธ๋ฆผ์ ๋ํด ์์ ํ๋ ์์ ๋๊ธฐ์ด์ ๋ฃ์์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ๋ง์ฝ False ๋ก ์ค์ ํ๋ฉด ์ ํ๋ ์์ ์์ฉํ๊ธฐ ์ํด ์ด์ ํ๋ ์์ด ์ญ์ ๋ฉ๋๋ค(์ค์๊ฐ ์ ํ๋ฆฌ์ผ์ด์
์ ์ต์ ํ๋จ). True'๋ฉด ์ ํ๋ ์์ ๋ฒํผ์ ๋๊ธฐ์์ผ ๊ฑด๋๋ฐ๋ ํ๋ ์์ด ์๋๋ก ํ์ง๋ง ์ถ๋ก FPS๊ฐ ์คํธ๋ฆผ FPS๋ณด๋ค ๋ฎ์ผ๋ฉด ์ง์ฐ์ด ๋ฐ์ํฉ๋๋ค. |
visualize |
bool |
False |
์ถ๋ก ์ค์ ๋ชจ๋ธ ๊ธฐ๋ฅ์ ์๊ฐํ๋ฅผ ํ์ฑํํ์ฌ ๋ชจ๋ธ์ด '๋ณด๊ณ ์๋ ๊ฒ'์ ๋ํ ์ธ์ฌ์ดํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋๋ฒ๊น ๋ฐ ๋ชจ๋ธ ํด์์ ์ ์ฉํฉ๋๋ค. |
augment |
bool |
False |
์์ธก์ ์ํ ํ ์คํธ ์๊ฐ ์ฆ๊ฐ(TTA)์ ์ง์ํ์ฌ ์ถ๋ก ์๋๋ฅผ ํฌ์ํ๋ฉด์ ํ์ง ๊ฒฌ๊ณ ์ฑ์ ํฅ์์ํฌ ์ ์์ต๋๋ค. |
agnostic_nms |
bool |
False |
์๋ก ๋ค๋ฅธ ํด๋์ค์ ๊ฒน์น๋ ์์๋ฅผ ๋ณํฉํ๋ ํด๋์ค ๋ฌด๊ด NMS(Non-Maximum Suppression)๋ฅผ ํ์ฑํํฉ๋๋ค. ํด๋์ค ์ค๋ณต์ด ์ผ๋ฐ์ ์ธ ๋ค์ค ํด๋์ค ํ์ง ์๋๋ฆฌ์ค์ ์ ์ฉํฉ๋๋ค. |
classes |
list[int] |
None |
ํด๋์ค ID ์งํฉ์ผ๋ก ์์ธก์ ํํฐ๋งํฉ๋๋ค. ์ง์ ๋ ํด๋์ค์ ์ํ๋ ํ์ง๋ง ๋ฐํ๋ฉ๋๋ค. ๋ค์ค ํด๋์ค ํ์ง ์์ ์์ ๊ด๋ จ ๊ฐ์ฒด์ ์ง์คํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค. |
retina_masks |
bool |
False |
๊ณ ํด์๋ ๋ถํ ๋ง์คํฌ๋ฅผ ๋ฐํํฉ๋๋ค. ๋ฐํ๋ ๋ง์คํฌ(masks.data )๋ฅผ ํ์ฑํํ๋ฉด ์๋ณธ ์ด๋ฏธ์ง ํฌ๊ธฐ์ ์ผ์นํฉ๋๋ค. ๋นํ์ฑํํ๋ฉด ์ถ๋ก ์ค์ ์ฌ์ฉ๋๋ ์ด๋ฏธ์ง ํฌ๊ธฐ๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. |
embed |
list[int] |
None |
ํน์ง ๋ฒกํฐ ๋๋ ์๋ฒ ๋ฉ์ ์ถ์ถํ ๋ ์ด์ด๋ฅผ ์ง์ ํฉ๋๋ค. ํด๋ฌ์คํฐ๋ง์ด๋ ์ ์ฌ๋ ๊ฒ์๊ณผ ๊ฐ์ ๋ค์ด์คํธ๋ฆผ ์์ ์ ์ ์ฉํฉ๋๋ค. |
project |
str |
None |
์์ธก ์ถ๋ ฅ์ด ์ ์ฅ๋๋ ํ๋ก์ ํธ ๋๋ ํฐ๋ฆฌ์ ์ด๋ฆ(๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ). save ๊ฐ ํ์ฑํ๋์ด ์์ต๋๋ค. |
name |
str |
None |
์์ธก ์คํ์ ์ด๋ฆ์
๋๋ค. ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ ์์ธก ์ถ๋ ฅ์ด ์ ์ฅ๋๋ ํ๋ก์ ํธ ํด๋ ๋ด์ ํ์ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ง๋๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. save ๊ฐ ํ์ฑํ๋์ด ์์ต๋๋ค. |
์ธ์ model.track
์ธ์ | ์ ํ | ๊ธฐ๋ณธ๊ฐ | ์ค๋ช |
---|---|---|---|
source |
str |
None |
์ด๋ฏธ์ง ๋๋ ๋์์์ ์์ค ๋๋ ํฐ๋ฆฌ๋ฅผ ์ง์ ํฉ๋๋ค. ํ์ผ ๊ฒฝ๋ก ๋ฐ URL์ ์ง์ํฉ๋๋ค. |
persist |
bool |
False |
ํ๋ ์ ๊ฐ ์ค๋ธ์ ํธ๋ฅผ ์ง์์ ์ผ๋ก ์ถ์ ํ์ฌ ๋น๋์ค ์ํ์ค ์ ์ฒด์์ ID๋ฅผ ์ ์งํ ์ ์์ต๋๋ค. |
tracker |
str |
botsort.yaml |
์ฌ์ฉํ ์ถ์ ์๊ณ ๋ฆฌ์ฆ์ ์ง์ ํฉ๋๋ค(์, bytetrack.yaml ๋๋ botsort.yaml . |
conf |
float |
0.3 |
ํ์ง ์ ๋ขฐ ์๊ณ๊ฐ์ ์ค์ ํฉ๋๋ค. ๊ฐ์ด ๋ฎ์์๋ก ๋ ๋ง์ ๊ฐ์ฒด๋ฅผ ์ถ์ ํ ์ ์์ง๋ง ์คํ์ด ํฌํจ๋ ์ ์์ต๋๋ค. |
iou |
float |
0.5 |
์ค๋ณต ๊ฐ์ง๋ฅผ ํํฐ๋งํ๊ธฐ ์ํ IoU( Intersection over Union ) ์๊ณ๊ฐ์ ์ค์ ํฉ๋๋ค. |
classes |
list |
None |
ํด๋์ค ์ธ๋ฑ์ค๋ณ๋ก ๊ฒฐ๊ณผ๋ฅผ ํํฐ๋งํฉ๋๋ค. ์๋ฅผ ๋ค์ด classes=[0, 2, 3] ์ง์ ๋ ํด๋์ค๋ง ์ถ์ ํฉ๋๋ค. |
verbose |
bool |
True |
์ถ์ ๊ฒฐ๊ณผ์ ํ์๋ฅผ ์ ์ดํ์ฌ ์ถ์ ๋ ๊ฐ์ฒด์ ์๊ฐ์ ์ถ๋ ฅ์ ์ ๊ณตํฉ๋๋ค. |
์์ฃผ ๋ฌป๋ ์ง๋ฌธ
Ultralytics YOLO11 ์ ์ฌ์ฉํ์ฌ ๋ด ์ด๋์ ์ด๋ป๊ฒ ๋ชจ๋ํฐ๋งํ๋์?
Ultralytics YOLO11 ์ ์ฌ์ฉํ์ฌ ์ด๋์ ๋ชจ๋ํฐ๋งํ๋ ค๋ฉด ์์ธ ์ถ์ ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ์ ์ฒด์ ์ฃผ์ ๋๋๋งํฌ์ ๊ด์ ์ ์ค์๊ฐ์ผ๋ก ์ถ์ ํ๊ณ ๋ถ์ํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์ด๋ ์์ธ์ ๋ํ ์ฆ๊ฐ์ ์ธ ํผ๋๋ฐฑ์ ๋ฐ๊ณ , ๋ฐ๋ณต ํ์๋ฅผ ๊ณ์ฐํ๊ณ , ์ฑ๊ณผ ์งํ๋ฅผ ์ธก์ ํ ์ ์์ต๋๋ค. ํ๊ตฝํํด๊ธฐ, ํ์ ๋๋ ๋ณต๊ทผ ์ด๋์ ๋ํด ์ ๊ณต๋ ์์ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ ์์ํ ์ ์์ต๋๋ค:
import cv2
from ultralytics import solutions
cap = cv2.VideoCapture("path/to/video/file.mp4")
assert cap.isOpened(), "Error reading video file"
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))
gym = solutions.AIGym(
line_width=2,
show=True,
kpts=[6, 8, 10],
)
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or video processing has been successfully completed.")
break
im0 = gym.monitor(im0)
cv2.destroyAllWindows()
์ถ๊ฐ ์ฌ์ฉ์ ์ง์ ๋ฐ ์ค์ ์ ๋ํด์๋ ์ค๋ช ์์ AIGym ์น์ ์ ์ฐธ์กฐํ์ธ์.
์ด๋ ๋ชจ๋ํฐ๋ง์ Ultralytics YOLO11 ์ ์ฌ์ฉํ๋ฉด ์ด๋ค ์ด์ ์ด ์๋์?
์ด๋ ๋ชจ๋ํฐ๋ง์ Ultralytics YOLO11 ์ ์ฌ์ฉํ๋ฉด ๋ช ๊ฐ์ง ์ฃผ์ ์ด์ ์ด ์์ต๋๋ค:
- ์ต์ ํ๋ ํผํฌ๋จผ์ค: ๋ชจ๋ํฐ๋ง ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ด๋์ ๋ง์ถคํํ๋ฉด ๋ ๋์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
- ๋ชฉํ ๋ฌ์ฑ: ์ธก์ ๊ฐ๋ฅํ ์งํ ์ํฉ์ ์ํด ํผํธ๋์ค ๋ชฉํ๋ฅผ ์ฝ๊ฒ ์ถ์ ํ๊ณ ์กฐ์ ํ ์ ์์ต๋๋ค.
- ๊ฐ์ธํ: ์ต์ ์ ํจ๊ณผ๋ฅผ ์ํด ๊ฐ์ธ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ง์ถคํ ์ด๋ ๊ณํ์ ์ธ์ฐ์ธ์.
- ๊ฑด๊ฐ ์ธ์: ์ ์ฌ์ ์ธ ๊ฑด๊ฐ ๋ฌธ์ ๋๋ ๊ณผ๋ํ ํ๋ จ์ ๋ํ๋ด๋ ํจํด์ ์กฐ๊ธฐ์ ๊ฐ์งํฉ๋๋ค.
- ์ ๋ณด์ ๊ธฐ๋ฐํ ์์ฌ ๊ฒฐ์ : ๋ฐ์ดํฐ์ ๊ธฐ๋ฐํ ์์ฌ ๊ฒฐ์ ์ผ๋ก ๋ฃจํด์ ์กฐ์ ํ๊ณ ํ์ค์ ์ธ ๋ชฉํ๋ฅผ ์ค์ ํ์ธ์.
YouTube ๋์์ ๋ฐ๋ชจ๋ฅผ ํตํด ์ด๋ฌํ ์ด์ ์ด ์ค์ ๋ก ์๋ํ๋ ๋ชจ์ต์ ํ์ธํ ์ ์์ต๋๋ค.
์ด๋ ๊ฐ์ง ๋ฐ ์ถ์ ์ ์์ด์ Ultralytics YOLO11 ์ ์ผ๋ง๋ ์ ํํ๋์?
Ultralytics YOLO11 ๋ ์ต์ฒจ๋จ ์์ธ ์ถ์ ๊ธฐ๋ฅ์ผ๋ก ์ด๋์ ๊ฐ์งํ๊ณ ์ถ์ ํ๋ ์ ํ๋๊ฐ ๋งค์ฐ ๋์ต๋๋ค. ์ ์ฒด์ ์ฃผ์ ๋๋๋งํฌ์ ๊ด์ ์ ์ ํํ๊ฒ ์ถ์ ํ์ฌ ์ด๋ ํํ์ ์ฑ๊ณผ ์งํ์ ๋ํ ์ค์๊ฐ ํผ๋๋ฐฑ์ ์ ๊ณตํฉ๋๋ค. ๋ชจ๋ธ์ ์ฌ์ ํ์ต๋ ๊ฐ์ค์น์ ๊ฒฌ๊ณ ํ ์ํคํ ์ฒ๋ ๋์ ์ ๋ฐ๋์ ์ ๋ขฐ์ฑ์ ๋ณด์ฅํฉ๋๋ค. ์ค์ ์ฌ๋ก๋ฅผ ๋ณด๋ ค๋ฉด ํธ์์ ๋ฐ ํ์ ์นด์ดํ ์ ๋ณด์ฌ์ฃผ๋ ๋ฌธ์์ ์ค์ ์ ํ๋ฆฌ์ผ์ด์ ์น์ ์ ํ์ธํ์ธ์.
์ฌ์ฉ์ ์ง์ ์ด๋ ๋ฃจํด์ Ultralytics YOLO11 ์ ์ฌ์ฉํ ์ ์๋์?
์, Ultralytics YOLO11 ์ฌ์ฉ์ ์ง์ ์ด๋ ๋ฃจํด์ ๋ง๊ฒ ์กฐ์ ํ ์ ์์ต๋๋ค. The AIGym
ํด๋์ค๋ "ํธ์์
", "ํ์
", "์ ๋ธ์ํฌ์์" ๋ฑ ๋ค์ํ ํฌ์ฆ ์ ํ์ ์ง์ํฉ๋๋ค. ํคํฌ์ธํธ์ ๊ฐ๋๋ฅผ ์ง์ ํ์ฌ ํน์ ์ด๋์ ๊ฐ์งํ ์ ์์ต๋๋ค. ๋ค์์ ์ค์ ์์์
๋๋ค:
from ultralytics import solutions
gym = solutions.AIGym(
line_width=2,
show=True,
kpts=[6, 8, 10],
)
์ธ์ ์ค์ ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ธ์ AIGym
์น์
์ผ๋ก ์ด๋ํฉ๋๋ค. ์ด๋ฌํ ์ ์ฐ์ฑ์ ํตํด ๋ค์ํ ์ด๋์ ๋ชจ๋ํฐ๋งํ๊ณ ํ์์ ๋ฐ๋ผ ๋ฃจํด์ ์ฌ์ฉ์ ์ง์ ํ ์ ์์ต๋๋ค.
Ultralytics YOLO11 ์ ์ฌ์ฉํ์ฌ ์ด๋ ๋ชจ๋ํฐ๋ง ์ถ๋ ฅ์ ์ ์ฅํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ๋์?
์ด๋ ๋ชจ๋ํฐ๋ง ์ถ๋ ฅ์ ์ ์ฅํ๋ ค๋ฉด ์ฒ๋ฆฌ๋ ํ๋ ์์ ์ ์ฅํ๋ ๋น๋์ค ์์ฑ๊ธฐ๋ฅผ ํฌํจํ๋๋ก ์ฝ๋๋ฅผ ์์ ํ ์ ์์ต๋๋ค. ๋ค์์ ์์์ ๋๋ค:
import cv2
from ultralytics import solutions
cap = cv2.VideoCapture("path/to/video/file.mp4")
assert cap.isOpened(), "Error reading video file"
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))
video_writer = cv2.VideoWriter("workouts.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
gym = solutions.AIGym(
line_width=2,
show=True,
kpts=[6, 8, 10],
)
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or video processing has been successfully completed.")
break
im0 = gym.monitor(im0)
video_writer.write(im0)
cv2.destroyAllWindows()
video_writer.release()
์ด ์ค์ ์ ๋ชจ๋ํฐ๋ง๋ ๋์์์ ์ถ๋ ฅ ํ์ผ์ ๊ธฐ๋กํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ์ถ๋ ฅ ์ ์ฅ์ ํตํ ์ด๋ ๋ชจ๋ํฐ๋ง ์น์ ์ ์ฐธ์กฐํ์ธ์.