ํธ๋์กด ์ฌ์ฉ Ultralytics YOLO11
ํธ๋์กด์ด๋ ๋ฌด์์ธ๊ฐ์?
TrackZone์ ์ ์ฒด ํ๋ ์์ด ์๋ ํ๋ ์์ ์ง์ ๋ ์์ญ ๋ด์ ๊ฐ์ฒด๋ฅผ ๋ชจ๋ํฐ๋งํ๋ ๋ฐ ํนํ๋์ด ์์ต๋๋ค. ๊ธฐ๋ฐ Ultralytics YOLO11์ ๊ธฐ๋ฐ์ผ๋ก ๋น๋์ค ๋ฐ ๋ผ์ด๋ธ ์นด๋ฉ๋ผ ํผ๋์ ํน์ ์์ญ ๋ด์์ ๊ฐ์ฒด ๊ฐ์ง ๋ฐ ์ถ์ ์ ํตํฉํฉ๋๋ค. YOLO11 ์ ๊ณ ๊ธ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋ฅ ๋ฌ๋ ๊ธฐ์ ์ ๊ตฐ์ค ๋ชจ๋ํฐ๋ง ๋ฐ ๊ฐ์์ ๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ ํํ๊ณ ํจ์จ์ ์ธ ๊ฐ์ฒด ์ถ์ ์ ์ ๊ณตํ์ฌ ์ค์๊ฐ ์ฌ์ฉ ์ฌ๋ก์ ์๋ฒฝํ ์ ํ์ ๋๋ค.
์์ญ ๋ด ์ค๋ธ์ ํธ ์ถ์ ์ ์ฅ์ (ํธ๋์กด)
- ํ๊ฒ ๋ถ์: ํน์ ์์ญ ๋ด์ ๊ฐ์ฒด๋ฅผ ์ถ์ ํ๋ฉด ์ง์ ์ง์ ์ด๋ ์ ํ ๊ตฌ์ญ๊ณผ ๊ฐ์ ๊ด์ฌ ์์ญ์ ์ ๋ฐํ๊ฒ ๋ชจ๋ํฐ๋งํ๊ณ ๋ถ์ํ ์ ์์ด ๋ณด๋ค ์ง์ค์ ์ธ ์ธ์ฌ์ดํธ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
- ํจ์จ์ฑ ํฅ์: TrackZone์ ์ถ์ ๋ฒ์๋ฅผ ์ ์๋ ์์ญ์ผ๋ก ์ขํ์ ๊ณ์ฐ ์ค๋ฒํค๋๋ฅผ ์ค์์ผ๋ก์จ ๋ ๋น ๋ฅธ ์ฒ๋ฆฌ์ ์ต์ ์ ์ฑ๋ฅ์ ๋ณด์ฅํฉ๋๋ค.
- ๋ณด์ ๊ฐํ: ๊ตฌ์ญ ์ถ์ ์ ์ค์ ์์ญ์ ๋ชจ๋ํฐ๋งํ์ฌ ๋น์ ์์ ์ธ ํ๋์ด๋ ๋ณด์ ์นจํด๋ฅผ ์กฐ๊ธฐ์ ๋ฐ๊ฒฌํ ์ ์๋๋ก ์ง์ํจ์ผ๋ก์จ ๊ฐ์๋ฅผ ๊ฐ์ ํฉ๋๋ค.
- ํ์ฅ ๊ฐ๋ฅํ ์๋ฃจ์ : ํน์ ๊ตฌ์ญ์ ์ง์คํ ์ ์๋ ๊ธฐ๋ฅ์ผ๋ก ์๋งค ๊ณต๊ฐ๋ถํฐ ์ฐ์ ํ๊ฒฝ์ ์ด๋ฅด๊ธฐ๊น์ง ๋ค์ํ ์๋๋ฆฌ์ค์ ์ ์ฉํ ์ ์์ด ์ํํ ํตํฉ๊ณผ ํ์ฅ์ฑ์ ๋ณด์ฅํ๋ TrackZone์ ๋๋ค.
์ค์ ์ ํ๋ฆฌ์ผ์ด์
๋์ | ๊ตํตํธ |
---|---|
๋ค์์ ์ฌ์ฉํ์ฌ ํ๋์์ ์๋ฌผ ์ถ์ Ultralytics YOLO11 | ๋ค์์ ์ฌ์ฉํ์ฌ ๋๋ก์์ ์ฐจ๋ ์ถ์ Ultralytics YOLO11 |
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))
# Define region points
region_points = [(150, 150), (1130, 150), (1130, 570), (150, 570)]
# Video writer
video_writer = cv2.VideoWriter("object_counting_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
# Init TrackZone (Object Tracking in Zones, not complete frame)
trackzone = solutions.TrackZone(
show=True, # Display the output
region=region_points, # Pass region points
model="yolo11n.pt", # You can use any model that Ultralytics support, i.e. YOLOv9, YOLOv10
# line_width=2, # Adjust the line width for bounding boxes and text display
# classes=[0, 2], # If you want to count specific classes i.e. person and car with COCO pretrained model.
)
# 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 = trackzone.trackzone(im0)
video_writer.write(im0)
cap.release()
video_writer.release()
cv2.destroyAllWindows()
์ธ์ TrackZone
๋ค์์ ํ์
๋๋ค. TrackZone
์ธ์๋ฅผ ์ฌ์ฉํฉ๋๋ค:
์ด๋ฆ | ์ ํ | ๊ธฐ๋ณธ๊ฐ | ์ค๋ช |
---|---|---|---|
model |
str |
None |
Ultralytics YOLO ๋ชจ๋ธ ํ์ผ ๊ฒฝ๋ก |
region |
list |
[(150, 150), (1130, 150), (1130, 570), (150, 570)] |
๊ฐ์ฒด ์ถ์ ์์ญ์ ์ ์ํ๋ ํฌ์ธํธ ๋ชฉ๋ก์ ๋๋ค. |
line_width |
int |
2 |
๊ฒฝ๊ณ ์์์ ์ ๋๊ป์ ๋๋ค. |
show |
bool |
False |
๋น๋์ค ์คํธ๋ฆผ ํ์ ์ฌ๋ถ๋ฅผ ์ ์ดํ๋ ํ๋๊ทธ์ ๋๋ค. |
์ธ์ 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 ์ ์ฌ์ฉํ๋ฉด ๋น๋์ค ํ๋ ์์ ์ ์๋ ์์ญ ๋๋ ์์ญ์ ์๋ ๊ฐ์ฒด๋ฅผ ์ฝ๊ฒ ์ถ์ ํ ์ ์์ต๋๋ค. ์๋ ์ ๊ณต๋ ๋ช ๋ น์ ์ฌ์ฉํด ์ถ์ ์ ์์ํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ํจ์จ์ ์ธ ๋ถ์๊ณผ ์ ํํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฅํ๋ฏ๋ก ๊ฐ์, ๊ตฐ์ค ๊ด๋ฆฌ ๋๋ ๊ตฌ์ญ ์ถ์ ์ด ํ์ํ ๋ชจ๋ ์๋๋ฆฌ์ค์ ์ด์์ ์ ๋๋ค.
Python 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))
# Define region points
region_points = [(150, 150), (1130, 150), (1130, 570), (150, 570)]
# Video writer
video_writer = cv2.VideoWriter("object_counting_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
# Init TrackZone (Object Tracking in Zones, not complete frame)
trackzone = solutions.TrackZone(
show=True, # Display the output
region=region_points, # Pass region points
model="yolo11n.pt",
)
# 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 = trackzone.trackzone(im0)
video_writer.write(im0)
cap.release()
video_writer.release()
cv2.destroyAllWindows()
Ultralytics ํธ๋์กด์ ์ฌ์ฉํ์ฌ ๋น๋์ค ์ฒ๋ฆฌ๋ฅผ ์ํ ๊ตฌ์ญ ์ง์ ์ ๊ตฌ์ฑํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ๋์?
Ultralytics TrackZone์ผ๋ก ๋น๋์ค ์ฒ๋ฆฌ๋ฅผ ์ํ ๊ตฌ์ญ ์ง์ ์ ๊ตฌ์ฑํ๋ ๊ฒ์ ๊ฐ๋จํ๊ณ ์ฌ์ฉ์ ์ง์ ํ ์ ์์ต๋๋ค. Python ์คํฌ๋ฆฝํธ๋ฅผ ํตํด ๊ตฌ์ญ์ ์ง์ ์ ์ํ๊ณ ์กฐ์ ํ ์ ์์ผ๋ฏ๋ก ๋ชจ๋ํฐ๋งํ๋ ค๋ ์์ญ์ ์ ๋ฐํ๊ฒ ์ ์ดํ ์ ์์ต๋๋ค.
# Define region points
region_points = [(150, 150), (1130, 150), (1130, 570), (150, 570)]
# Init TrackZone (Object Tracking in Zones, not complete frame)
trackzone = solutions.TrackZone(
show=True, # Display the output
region=region_points, # Pass region points
)