๋ค์์ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด ์ ๊ณ์ฐ Ultralytics YOLO11
์ค๋ธ์ ํธ ์นด์ดํ ์ด๋ ๋ฌด์์ธ๊ฐ์?
๋ฅผ ์ฌ์ฉํ ๊ฐ์ฒด ์นด์ดํ Ultralytics YOLO11 ๋ ๋์์๊ณผ ์นด๋ฉ๋ผ ์คํธ๋ฆผ์์ ํน์ ๊ฐ์ฒด๋ฅผ ์ ํํ๊ฒ ์๋ณํ๊ณ ์นด์ดํ ํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. YOLO11 ๋ ์ต์ฒจ๋จ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋ฅ๋ฌ๋ ๊ธฐ๋ฅ ๋๋ถ์ ๊ตฐ์ค ๋ถ์ ๋ฐ ๊ฐ์์ ๊ฐ์ ๋ค์ํ ์๋๋ฆฌ์ค์์ ํจ์จ์ ์ด๊ณ ์ ํํ ๊ฐ์ฒด ์นด์ดํ ์ ์ ๊ณตํ๋ ์ค์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ํฉ๋๋ค.
Watch: ๋ค์์ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด ์ ๊ณ์ฐ Ultralytics YOLOv8 |
Watch: ํด๋์ค๋ณ ์ค๋ธ์ ํธ ์นด์ดํ ์ ์ฌ์ฉํ์ฌ Ultralytics YOLO11 |
์ค๋ธ์ ํธ ์นด์ดํ ์ ์ฅ์ ์?
- ๋ฆฌ์์ค ์ต์ ํ: ๊ฐ์ฒด ์นด์ดํ ์ ์ ํํ ๊ฐ์๋ฅผ ์ ๊ณตํ๊ณ ์ฌ๊ณ ๊ด๋ฆฌ์ ๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ฆฌ์์ค ํ ๋น์ ์ต์ ํํ์ฌ ํจ์จ์ ์ธ ๋ฆฌ์์ค ๊ด๋ฆฌ๋ฅผ ์ฉ์ดํ๊ฒ ํฉ๋๋ค.
- ๋ณด์ ๊ฐํ: ๊ฐ์ฒด ์นด์ดํ ์ ๊ฐ์ฒด๋ฅผ ์ ํํ๊ฒ ์ถ์ ํ๊ณ ๊ณ์ฐํ์ฌ ์ฌ์ ์ํ ํ์ง๋ฅผ ์ง์ํจ์ผ๋ก์จ ๋ณด์๊ณผ ๊ฐ์๋ฅผ ๊ฐํํฉ๋๋ค.
- ์ ๋ณด์ ๊ธฐ๋ฐํ ์์ฌ ๊ฒฐ์ : ๊ฐ์ฒด ์นด์ดํ ์ ์์ฌ ๊ฒฐ์ , ์๋งค์ , ๊ตํต ๊ด๋ฆฌ ๋ฐ ๊ธฐํ ๋ค์ํ ์์ญ์ ํ๋ก์ธ์ค ์ต์ ํ๋ฅผ ์ํ ๊ท์คํ ์ธ์ฌ์ดํธ๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ค์ ์ ํ๋ฆฌ์ผ์ด์
๋ฌผ๋ฅ | ์์์ |
---|---|
์ปจ๋ฒ ์ด์ด ๋ฒจํธ ํจํท ๊ณ์ ์ฌ์ฉ 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 = [(20, 400), (1080, 400)] # For line counting
region_points = [(20, 400), (1080, 400), (1080, 360), (20, 360)] # For rectangle region counting
# region_points = [(20, 400), (1080, 400), (1080, 360), (20, 360), (20, 400)] # For polygon region counting
# Video writer
video_writer = cv2.VideoWriter("object_counting_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
# Init Object Counter
counter = solutions.ObjectCounter(
show=True, # Display the output
region=region_points, # Pass region points
model="yolo11n.pt", # model="yolo11n-obb.pt" for object counting using YOLO11 OBB model.
# classes=[0, 2], # If you want to count specific classes i.e person and car with COCO pretrained model.
# show_in=True, # Display in counts
# show_out=True, # Display out counts
# 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 = counter.count(im0)
video_writer.write(im0)
cap.release()
video_writer.release()
cv2.destroyAllWindows()
์ธ์ ObjectCounter
๋ค์์ ํ์
๋๋ค. ObjectCounter
์ธ์๋ฅผ ์ฌ์ฉํฉ๋๋ค:
์ด๋ฆ | ์ ํ | ๊ธฐ๋ณธ๊ฐ | ์ค๋ช |
---|---|---|---|
model |
str |
None |
Ultralytics YOLO ๋ชจ๋ธ ํ์ผ ๊ฒฝ๋ก |
region |
list |
[(20, 400), (1260, 400)] |
๊ณ์ฐ ์์ญ์ ์ ์ํ๋ ํฌ์ธํธ ๋ชฉ๋ก์ ๋๋ค. |
line_width |
int |
2 |
๊ฒฝ๊ณ ์์์ ์ ๋๊ป์ ๋๋ค. |
show |
bool |
False |
๋น๋์ค ์คํธ๋ฆผ ํ์ ์ฌ๋ถ๋ฅผ ์ ์ดํ๋ ํ๋๊ทธ์ ๋๋ค. |
show_in |
bool |
True |
๋น๋์ค ์คํธ๋ฆผ์ ์ธ ์นด์ดํธ๋ฅผ ํ์ํ ์ง ์ฌ๋ถ๋ฅผ ์ ์ดํ๋ ํ๋๊ทธ์ ๋๋ค. |
show_out |
bool |
True |
๋น๋์ค ์คํธ๋ฆผ์ ์์ ์นด์ดํธ๋ฅผ ํ์ํ ์ง ์ฌ๋ถ๋ฅผ ์ ์ดํ๋ ํ๋๊ทธ์ ๋๋ค. |
์ธ์ 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 ์ ์ฌ์ฉํ์ฌ ๋์์์์ ๊ฐ์ฒด๋ฅผ ์นด์ดํธํ๋ ค๋ฉด ๋ค์ ๋จ๊ณ๋ฅผ ๋ฐ๋ฅด์ธ์:
- ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ์ ธ์ค๊ธฐ(
cv2
,ultralytics
). - ์นด์ดํ ์์ญ(์: ๋ค๊ฐํ, ์ ๋ฑ)์ ์ ์ํฉ๋๋ค.
- ๋์์ ์บก์ฒ๋ฅผ ์ค์ ํ๊ณ ๊ฐ์ฒด ์นด์ดํฐ๋ฅผ ์ด๊ธฐํํฉ๋๋ค.
- ๊ฐ ํ๋ ์์ ์ฒ๋ฆฌํ์ฌ ๊ฐ์ฒด๋ฅผ ์ถ์ ํ๊ณ ์ ์๋ ์์ญ ๋ด์์ ๊ฐ์ฒด๋ฅผ ๊ณ์ฐํฉ๋๋ค.
๋ค์์ ํ ์ง์ญ์์ ๊ณ์ฐํ๋ ๊ฐ๋จํ ์์ ๋๋ค:
import cv2
from ultralytics import solutions
def count_objects_in_region(video_path, output_video_path, model_path):
"""Count objects in a specific region within a video."""
cap = cv2.VideoCapture(video_path)
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(output_video_path, cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
region_points = [(20, 400), (1080, 400), (1080, 360), (20, 360)]
counter = solutions.ObjectCounter(show=True, region=region_points, model=model_path)
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or video processing has been successfully completed.")
break
im0 = counter.count(im0)
video_writer.write(im0)
cap.release()
video_writer.release()
cv2.destroyAllWindows()
count_objects_in_region("path/to/video.mp4", "output_video.avi", "yolo11n.pt")
๊ฐ์ฒด ์ ๊ณ์ฐ ์น์ ์์ ๋ ๋ง์ ๊ตฌ์ฑ ๋ฐ ์ต์ ์ ์ดํด๋ณด์ธ์.
๊ฐ์ฒด ์นด์ดํ ์ Ultralytics YOLO11 ์ ์ฌ์ฉํ๋ฉด ์ด๋ค ์ด์ ์ด ์๋์?
๊ฐ์ฒด ์นด์ดํ ์ Ultralytics YOLO11 ์ ์ฌ์ฉํ๋ฉด ๋ช ๊ฐ์ง ์ฅ์ ์ด ์์ต๋๋ค:
- ๋ฆฌ์์ค ์ต์ ํ: ์ ํํ ์นด์ดํธ๋ฅผ ์ ๊ณตํ์ฌ ํจ์จ์ ์ธ ๋ฆฌ์์ค ๊ด๋ฆฌ๋ฅผ ์ฉ์ดํ๊ฒ ํ๊ณ , ์ฌ๊ณ ๊ด๋ฆฌ์ ๊ฐ์ ์ฐ์ ์์ ๋ฆฌ์์ค ํ ๋น์ ์ต์ ํํ๋ ๋ฐ ๋์์ ์ค๋๋ค.
- ๋ณด์ ๊ฐํ: ์ํฐํฐ๋ฅผ ์ ํํ๊ฒ ์ถ์ ํ๊ณ ๊ณ์ฐํ์ฌ ๋ณด์ ๋ฐ ๊ฐ์๋ฅผ ๊ฐํํ์ฌ ์ ์ ์ ์ธ ์ํ ํ์ง๋ฅผ ์ง์ํฉ๋๋ค.
- ์ ๋ณด์ ๊ธฐ๋ฐํ ์์ฌ ๊ฒฐ์ : ๋ฆฌํ ์ผ, ํธ๋ํฝ ๊ด๋ฆฌ ๋ฑ์ ์์ญ์์ ์์ฌ ๊ฒฐ์ ์ ์ํ ๊ท์คํ ์ธ์ฌ์ดํธ๋ฅผ ์ ๊ณตํ์ฌ ํ๋ก์ธ์ค๋ฅผ ์ต์ ํํฉ๋๋ค.
์ค์ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์ฝ๋ ์์ ๋ ๊ฐ์ฒด ์นด์ดํ ์ ์ฅ์ ์น์ ์ ์ฐธ์กฐํ์ธ์.
Ultralytics YOLO11 ์ ์ฌ์ฉํ์ฌ ํน์ ํด๋์ค ์ค๋ธ์ ํธ๋ฅผ ๊ณ์ฐํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ๋์?
Ultralytics YOLO11 ์ ์ฌ์ฉํ์ฌ ํน์ ํด๋์ค ์ค๋ธ์ ํธ๋ฅผ ์นด์ดํธํ๋ ค๋ฉด ์ถ์ ๋จ๊ณ์์ ๊ด์ฌ ์๋ ํด๋์ค๋ฅผ ์ง์ ํด์ผ ํฉ๋๋ค. ์๋๋ Python ์์์ ๋๋ค:
import cv2
from ultralytics import solutions
def count_specific_classes(video_path, output_video_path, model_path, classes_to_count):
"""Count specific classes of objects in a video."""
cap = cv2.VideoCapture(video_path)
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(output_video_path, cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
line_points = [(20, 400), (1080, 400)]
counter = solutions.ObjectCounter(show=True, region=line_points, model=model_path, classes=classes_to_count)
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or video processing has been successfully completed.")
break
im0 = counter.count(im0)
video_writer.write(im0)
cap.release()
video_writer.release()
cv2.destroyAllWindows()
count_specific_classes("path/to/video.mp4", "output_specific_classes.avi", "yolo11n.pt", [0, 2])
์ด ์์ ์์๋ classes_to_count=[0, 2]
ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ๊ณ์ฐํ๋ค๋ ์๋ฏธ์
๋๋ค. 0
๊ทธ๋ฆฌ๊ณ 2
(์: ์ฌ๋ ๋ฐ ์๋์ฐจ).
์ค์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค๋ฅธ ๊ฐ์ฒด ๊ฐ์ง ๋ชจ๋ธ ๋์ YOLO11 ์ ์ฌ์ฉํด์ผ ํ๋ ์ด์ ๋ ๋ฌด์์ธ๊ฐ์?
Ultralytics YOLO11 ๋ Faster R-CNN, SSD ๋ฐ ์ด์ YOLO ๋ฒ์ ๊ณผ ๊ฐ์ ๋ค๋ฅธ ๊ฐ์ฒด ๊ฐ์ง ๋ชจ๋ธ์ ๋นํด ๋ช ๊ฐ์ง ์ด์ ์ ์ ๊ณตํฉ๋๋ค:
- ์๋์ ํจ์จ์ฑ: YOLO11 ์ ์ค์๊ฐ ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฏ๋ก ๊ฐ์ ๋ฐ ์์จ ์ฃผํ๊ณผ ๊ฐ์ด ๊ณ ์ ์ถ๋ก ์ด ํ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด์์ ์ ๋๋ค.
- ์ ํ๋: ๋ฌผ์ฒด ๊ฐ์ง ๋ฐ ์ถ์ ์์ ์ ์ต์ฒจ๋จ ์ ํ๋๋ฅผ ์ ๊ณตํ์ฌ ์คํ์ง ํ์๋ฅผ ์ค์ด๊ณ ์ ๋ฐ์ ์ธ ์์คํ ์์ ์ฑ์ ํฅ์์ํต๋๋ค.
- ํตํฉ ์ฉ์ด์ฑ: YOLO11 ์ ๋ชจ๋ฐ์ผ ๋ฐ ์ฃ์ง ๋๋ฐ์ด์ค๋ฅผ ๋น๋กฏํ ๋ค์ํ ํ๋ซํผ ๋ฐ ๋๋ฐ์ด์ค์ ์ํํ๊ฒ ํตํฉํ ์ ์์ผ๋ฉฐ, ์ด๋ ์ต์ AI ์ ํ๋ฆฌ์ผ์ด์ ์ ๋งค์ฐ ์ค์ํฉ๋๋ค.
- ์ ์ฐ์ฑ: ํน์ ์ฌ์ฉ ์ฌ๋ก ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ๋๋ก ๊ตฌ์ฑ ๊ฐ๋ฅํ ๋ชจ๋ธ์ ํตํด ๊ฐ์ฒด ๊ฐ์ง, ์ธ๋ถํ, ์ถ์ ๊ณผ ๊ฐ์ ๋ค์ํ ์์ ์ ์ง์ํฉ๋๋ค.
๊ธฐ๋ฅ ๋ฐ ์ฑ๋ฅ ๋น๊ต์ ๋ํ ์์ธํ ๋ด์ฉ์ Ultralytics YOLO11 ์ค๋ช ์๋ฅผ ์ฐธ์กฐํ์ธ์.
๊ตฐ์ค ๋ถ์ ๋ฐ ํธ๋ํฝ ๊ด๋ฆฌ์ ๊ฐ์ ๊ณ ๊ธ ์ ํ๋ฆฌ์ผ์ด์ ์ YOLO11 ์ ์ฌ์ฉํ ์ ์๋์?
์, Ultralytics YOLO11 ์ ์ค์๊ฐ ๊ฐ์ง ๊ธฐ๋ฅ, ํ์ฅ์ฑ ๋ฐ ํตํฉ ์ ์ฐ์ฑ์ผ๋ก ์ธํด ๊ตฐ์ค ๋ถ์ ๋ฐ ํธ๋ํฝ ๊ด๋ฆฌ์ ๊ฐ์ ๊ณ ๊ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ฒฝํ๊ฒ ์ ํฉํฉ๋๋ค. ๊ณ ๊ธ ๊ธฐ๋ฅ์ ํตํด ๋์ ์ธ ํ๊ฒฝ์์ ๊ณ ์ ๋ฐ ๊ฐ์ฒด ์ถ์ , ์นด์ดํ ๋ฐ ๋ถ๋ฅ๊ฐ ๊ฐ๋ฅํฉ๋๋ค. ์ฌ์ฉ ์ฌ๋ก์ ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ๊ตฐ์ค ๋ถ์: ๋๊ท๋ชจ ๋ชจ์์ ๋ชจ๋ํฐ๋งํ๊ณ ๊ด๋ฆฌํ์ฌ ์์ ์ ๋ณด์ฅํ๊ณ ๊ตฐ์ค์ ํ๋ฆ์ ์ต์ ํํฉ๋๋ค.
- ๊ตํต ๊ด๋ฆฌ: ์ฐจ๋์ ์ถ์ ๋ฐ ์ง๊ณํ๊ณ , ๊ตํต ํจํด์ ๋ถ์ํ๊ณ , ์ค์๊ฐ์ผ๋ก ๊ตํต ํผ์ก์ ๊ด๋ฆฌํ์ธ์.
์์ธํ ์ ๋ณด ๋ฐ ๊ตฌํ ์ธ๋ถ ์ฌํญ์ ๊ฐ์ฒด ์นด์ดํ ์ ์ค์ ์ ์ฉ ๊ฐ์ด๋( YOLO11)๋ฅผ ์ฐธ์กฐํ์ธ์.