๊ณ ๊ธ ๋ฐ์ดํฐ ์๊ฐํ: Ultralytics YOLOv8 ๐์ ์ฌ์ฉํ ํํธ ๋งต
ํํธ๋งต ์๊ฐ
๋ก ์์ฑ๋ ํํธ๋งต์ Ultralytics YOLOv8 ๋ก ์์ฑ๋ ํํธ๋งต์ ๋ณต์กํ ๋ฐ์ดํฐ๋ฅผ ์์ํ ์์์ผ๋ก ๊ตฌ๋ถ๋ ๋งคํธ๋ฆญ์ค๋ก ๋ณํํฉ๋๋ค. ์ด ์๊ฐ์ ๋๊ตฌ๋ ๋ค์ํ ์์ ์คํํธ๋ผ์ ์ฌ์ฉํ์ฌ ๋ค์ํ ๋ฐ์ดํฐ ๊ฐ์ ๋ํ๋ด๋ฉฐ, ๋ฐ๋ปํ ์์กฐ๋ ๋ ๋์ ๊ฐ๋๋ฅผ, ์ฐจ๊ฐ์ด ์์กฐ๋ ๋ ๋ฎ์ ๊ฐ์ ๋ํ๋ ๋๋ค. ํํธ๋งต์ ๋ณต์กํ ๋ฐ์ดํฐ ํจํด, ์๊ด๊ด๊ณ, ์ด์ ์งํ๋ฅผ ์๊ฐํํ๋ ๋ฐ ํ์ํ๋ฉฐ, ๋ค์ํ ์์ญ์์ ๋ฐ์ดํฐ๋ฅผ ํด์ํ๋ ๋ฐ ์ ๊ทผํ๊ธฐ ์ฝ๊ณ ๋งค๋ ฅ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ์ ๊ณตํฉ๋๋ค.
Watch: ํํธ๋งต์ ์ฌ์ฉํ Ultralytics YOLOv8
๋ฐ์ดํฐ ๋ถ์์ ํํธ๋งต์ ์ ํํ๋ ์ด์ ๋ ๋ฌด์์ธ๊ฐ์?
- ์ง๊ด์ ์ธ ๋ฐ์ดํฐ ๋ถํฌ ์๊ฐํ: ํํธ๋งต์ ๋ณต์กํ ๋ฐ์ดํฐ ์งํฉ์ ์ดํดํ๊ธฐ ์ฌ์ด ์๊ฐ์ ํ์์ผ๋ก ๋ณํํ์ฌ ๋ฐ์ดํฐ ์ง์ค๋์ ๋ถํฌ์ ๋ํ ์ดํด๋ฅผ ๊ฐ์ํํฉ๋๋ค.
- ํจ์จ์ ์ธ ํจํด ํ์ง: ๋ฐ์ดํฐ๋ฅผ ํํธ๋งต ํ์์ผ๋ก ์๊ฐํํ๋ฉด ์ถ์ธ, ๊ตฐ์ง, ์ด์๊ฐ์ ๋ ์ฝ๊ฒ ๋ฐ๊ฒฌํ ์ ์์ด ๋ถ์๊ณผ ์ธ์ฌ์ดํธ๋ฅผ ๋ ๋น ๋ฅด๊ฒ ์ป์ ์ ์์ต๋๋ค.
- ํฅ์๋ ๊ณต๊ฐ ๋ถ์ ๋ฐ ์์ฌ ๊ฒฐ์ : ํํธ๋งต์ ๊ณต๊ฐ ๊ด๊ณ๋ฅผ ์ค๋ช ํ๋ ๋ฐ ์ ์ฉํ๋ฉฐ ๋น์ฆ๋์ค ์ธํ ๋ฆฌ์ ์ค, ํ๊ฒฝ ์ฐ๊ตฌ, ๋์ ๊ณํ๊ณผ ๊ฐ์ ๋ถ์ผ์ ์์ฌ ๊ฒฐ์ ํ๋ก์ธ์ค์ ๋์์ ์ค๋๋ค.
์ค์ ์ ํ๋ฆฌ์ผ์ด์
๊ตํตํธ | ๋ฆฌํ ์ผ |
---|---|
Ultralytics YOLOv8 ์ด์ก ํํธ๋งต | Ultralytics YOLOv8 ๋ฆฌํ ์ผ ํํธ๋งต |
ํํธ๋งต ๊ตฌ์ฑ
heatmap_alpha
: ์ด ๊ฐ์ด ๋ฒ์(0.0 - 1.0) ๋ด์ ์๋์ง ํ์ธํฉ๋๋ค.decay_factor
: ๊ฐ์ฒด๊ฐ ๋ ์ด์ ํ๋ ์์ ์๋ ํ ํํธ๋งต์ ์ ๊ฑฐํ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ, ๊ฐ๋ (0.0 - 1.0) ๋ฒ์์ฌ์ผ ํฉ๋๋ค.
Ultralytics YOLOv8 ์์ ๋ฅผ ์ฌ์ฉํ ํํธ๋งต
import cv2
from ultralytics import YOLO, solutions
model = YOLO("yolov8n.pt")
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("heatmap_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
# Init heatmap
heatmap_obj = solutions.Heatmap(
colormap=cv2.COLORMAP_PARULA,
view_img=True,
shape="circle",
names=model.names,
)
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or video processing has been successfully completed.")
break
tracks = model.track(im0, persist=True, show=False)
im0 = heatmap_obj.generate_heatmap(im0, tracks)
video_writer.write(im0)
cap.release()
video_writer.release()
cv2.destroyAllWindows()
import cv2
from ultralytics import YOLO, solutions
model = YOLO("yolov8n.pt")
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("heatmap_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
line_points = [(20, 400), (1080, 404)] # line for object counting
# Init heatmap
heatmap_obj = solutions.Heatmap(
colormap=cv2.COLORMAP_PARULA,
view_img=True,
shape="circle",
count_reg_pts=line_points,
names=model.names,
)
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or video processing has been successfully completed.")
break
tracks = model.track(im0, persist=True, show=False)
im0 = heatmap_obj.generate_heatmap(im0, tracks)
video_writer.write(im0)
cap.release()
video_writer.release()
cv2.destroyAllWindows()
import cv2
from ultralytics import YOLO, solutions
model = YOLO("yolov8n.pt")
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("heatmap_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
# Define polygon points
region_points = [(20, 400), (1080, 404), (1080, 360), (20, 360), (20, 400)]
# Init heatmap
heatmap_obj = solutions.Heatmap(
colormap=cv2.COLORMAP_PARULA,
view_img=True,
shape="circle",
count_reg_pts=region_points,
names=model.names,
)
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or video processing has been successfully completed.")
break
tracks = model.track(im0, persist=True, show=False)
im0 = heatmap_obj.generate_heatmap(im0, tracks)
video_writer.write(im0)
cap.release()
video_writer.release()
cv2.destroyAllWindows()
import cv2
from ultralytics import YOLO, solutions
model = YOLO("yolov8n.pt")
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("heatmap_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
# Define region points
region_points = [(20, 400), (1080, 404), (1080, 360), (20, 360)]
# Init heatmap
heatmap_obj = solutions.Heatmap(
colormap=cv2.COLORMAP_PARULA,
view_img=True,
shape="circle",
count_reg_pts=region_points,
names=model.names,
)
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or video processing has been successfully completed.")
break
tracks = model.track(im0, persist=True, show=False)
im0 = heatmap_obj.generate_heatmap(im0, tracks)
video_writer.write(im0)
cap.release()
video_writer.release()
cv2.destroyAllWindows()
import cv2
from ultralytics import YOLO, solutions
model = YOLO("yolov8s.pt") # YOLOv8 custom/pretrained model
im0 = cv2.imread("path/to/image.png") # path to image file
h, w = im0.shape[:2] # image height and width
# Heatmap Init
heatmap_obj = solutions.Heatmap(
colormap=cv2.COLORMAP_PARULA,
view_img=True,
shape="circle",
names=model.names,
)
results = model.track(im0, persist=True)
im0 = heatmap_obj.generate_heatmap(im0, tracks=results)
cv2.imwrite("ultralytics_output.png", im0)
import cv2
from ultralytics import YOLO, solutions
model = YOLO("yolov8n.pt")
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("heatmap_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
classes_for_heatmap = [0, 2] # classes for heatmap
# Init heatmap
heatmap_obj = solutions.Heatmap(
colormap=cv2.COLORMAP_PARULA,
view_img=True,
shape="circle",
names=model.names,
)
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or video processing has been successfully completed.")
break
tracks = model.track(im0, persist=True, show=False, classes=classes_for_heatmap)
im0 = heatmap_obj.generate_heatmap(im0, tracks)
video_writer.write(im0)
cap.release()
video_writer.release()
cv2.destroyAllWindows()
์ธ์ Heatmap()
์ด๋ฆ | ์ ํ | ๊ธฐ๋ณธ๊ฐ | ์ค๋ช |
---|---|---|---|
names |
list |
None |
ํด๋์ค ์ด๋ฆ ์ฌ์ . |
imw |
int |
0 |
์ด๋ฏธ์ง ๋๋น. |
imh |
int |
0 |
์ด๋ฏธ์ง ๋์ด. |
colormap |
int |
cv2.COLORMAP_JET |
ํํธ๋งต์ ์ฌ์ฉํ ์ปฌ๋ฌ๋งต์ ๋๋ค. |
heatmap_alpha |
float |
0.5 |
ํํธ๋งต ์ค๋ฒ๋ ์ด์ ์ํ ๋ธ๋ ๋ฉ ๊ฐ์ ๋๋ค. |
view_img |
bool |
False |
์ด๋ฏธ์ง๋ฅผ ํํธ๋งต ์ค๋ฒ๋ ์ด์ ํจ๊ป ํ์ํ ์ง ์ฌ๋ถ์ ๋๋ค. |
view_in_counts |
bool |
True |
์์ญ์ ๋ค์ด์ค๋ ๊ฐ์ฒด ์๋ฅผ ํ์ํ ์ง ์ฌ๋ถ์ ๋๋ค. |
view_out_counts |
bool |
True |
์์ญ์ ๋ฒ์ด๋๋ ๊ฐ์ฒด ์๋ฅผ ํ์ํ ์ง ์ฌ๋ถ์ ๋๋ค. |
count_reg_pts |
list ๋๋ None |
None |
์นด์ดํธ ์์ญ์ ์ ์ํ๋ ํฌ์ธํธ(์ ๋๋ ๋ค๊ฐํ)์ ๋๋ค. |
count_txt_color |
tuple |
(0, 0, 0) |
๊ฐ์๋ฅผ ํ์ํ๋ ํ ์คํธ ์์์ ๋๋ค. |
count_bg_color |
tuple |
(255, 255, 255) |
๊ฐ์๋ฅผ ํ์ํ๊ธฐ ์ํ ๋ฐฐ๊ฒฝ์์ ๋๋ค. |
count_reg_color |
tuple |
(255, 0, 255) |
๊ณ์ฐ ์์ญ์ ์์์ ๋๋ค. |
region_thickness |
int |
5 |
์์ญ ์ ์ ๋๊ป์ ๋๋ค. |
line_dist_thresh |
int |
15 |
๋ผ์ธ ๊ธฐ๋ฐ ์นด์ดํ ์ ์ํ ๊ฑฐ๋ฆฌ ์๊ณ๊ฐ์ ๋๋ค. |
line_thickness |
int |
2 |
๊ทธ๋ฆฌ๊ธฐ์ ์ฌ์ฉ๋ ์ ์ ๋๊ป์ ๋๋ค. |
decay_factor |
float |
0.99 |
์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๊ฐ๋๋ฅผ ๊ฐ์์ํค๋ ํํธ๋งต์ ๊ฐ์ ๊ณ์์ ๋๋ค. |
shape |
str |
"circle" |
ํํธ๋งต ๋ธ๋กญ์ ๋ชจ์('์' ๋๋ '์ง์ฌ๊ฐํ'). |
์ธ์ model.track
์ด๋ฆ | ์ ํ | ๊ธฐ๋ณธ๊ฐ | ์ค๋ช |
---|---|---|---|
source |
im0 |
None |
์ด๋ฏธ์ง ๋๋ ๋น๋์ค์ ์์ค ๋๋ ํ ๋ฆฌ |
persist |
bool |
False |
ํ๋ ์ ๊ฐ ํธ๋ ์ง์ |
tracker |
str |
botsort.yaml |
์ถ์ ๋ฐฉ๋ฒ '๋ฐ์ดํธํธ๋' ๋๋ '๋ด์ํธ' |
conf |
float |
0.3 |
์ ๋ขฐ ์๊ณ๊ฐ |
iou |
float |
0.5 |
IOU ์๊ณ๊ฐ |
classes |
list |
None |
ํด๋์ค๋ณ๋ก ๊ฒฐ๊ณผ๋ฅผ ํํฐ๋งํฉ๋๋ค(์: classes=0 ๋๋ classes=[0,2,3]). |
ํํธ๋งต ์ปฌ๋ฌ๋งต
์ปฌ๋ฌ๋งต ์ด๋ฆ | ์ค๋ช |
---|---|
cv::COLORMAP_AUTUMN |
๊ฐ์ ์ ์ง๋ |
cv::COLORMAP_BONE |
๋ผ๋ ์์ ๋งต |
cv::COLORMAP_JET |
์ ํธ ์ปฌ๋ฌ ๋งต |
cv::COLORMAP_WINTER |
๊ฒจ์ธ ์์ ์ง๋ |
cv::COLORMAP_RAINBOW |
๋ ์ธ๋ณด์ฐ ์ปฌ๋ฌ ๋งต |
cv::COLORMAP_OCEAN |
๋ฐ๋ค ์์ ์ง๋ |
cv::COLORMAP_SUMMER |
์ฌ๋ฆ ์์ ์ง๋ |
cv::COLORMAP_SPRING |
๋ด ์์ ์ง๋ |
cv::COLORMAP_COOL |
๋ฉ์ง ์ปฌ๋ฌ ๋งต |
cv::COLORMAP_HSV |
HSV(์์กฐ, ์ฑ๋, ๊ฐ) ์์ ๋งต |
cv::COLORMAP_PINK |
ํํฌ ์ปฌ๋ฌ ๋งต |
cv::COLORMAP_HOT |
ํซ ์ปฌ๋ฌ ๋งต |
cv::COLORMAP_PARULA |
ํ๋ฃฐ๋ผ ์ปฌ๋ฌ ๋งต |
cv::COLORMAP_MAGMA |
๋ง๊ทธ๋ง ์ปฌ๋ฌ ๋งต |
cv::COLORMAP_INFERNO |
์ธํ๋ฅด๋ ธ ์ปฌ๋ฌ ๋งต |
cv::COLORMAP_PLASMA |
ํ๋ผ์ฆ๋ง ์์ ๋งต |
cv::COLORMAP_VIRIDIS |
๋น๋ฆฌ๋์ค ์ปฌ๋ฌ ๋งต |
cv::COLORMAP_CIVIDIS |
์๋น๋์ค ์ปฌ๋ฌ ๋งต |
cv::COLORMAP_TWILIGHT |
ํฉํผ ์ปฌ๋ฌ ๋งต |
cv::COLORMAP_TWILIGHT_SHIFTED |
์ํํธ๋ ํฉํผ ์ปฌ๋ฌ ๋งต |
cv::COLORMAP_TURBO |
ํฐ๋ณด ์ปฌ๋ฌ ๋งต |
cv::COLORMAP_DEEPGREEN |
๋ฅ ๊ทธ๋ฆฐ ์ปฌ๋ฌ ๋งต |
์ด๋ฌํ ์ปฌ๋ฌ๋งต์ ์ผ๋ฐ์ ์ผ๋ก ๋ค์ํ ์์ ํํ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์๊ฐํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
์์ฃผ ๋ฌป๋ ์ง๋ฌธ
Ultralytics YOLOv8 ํํธ๋งต์ ์ด๋ป๊ฒ ์์ฑ๋๋ฉฐ ์ด๋ค ์ด์ ์ด ์๋์?
Ultralytics YOLOv8 ๋ ๋ณต์กํ ๋ฐ์ดํฐ๋ฅผ ์์์ผ๋ก ๊ตฌ๋ถ๋ ํ๋ ฌ๋ก ๋ณํํ์ฌ ํํธ๋งต์ ์์ฑํ๋ฉฐ, ๋ค์ํ ์์์ด ๋ฐ์ดํฐ ๊ฐ๋๋ฅผ ๋ํ๋ ๋๋ค. ํํธ๋งต์ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ์ ํจํด, ์๊ด๊ด๊ณ, ์ด์ ์งํ๋ฅผ ๋ ์ฝ๊ฒ ์๊ฐํํ ์ ์์ต๋๋ค. ๋ฐ๋ปํ ์์กฐ๋ ๋ ๋์ ๊ฐ์ ๋ํ๋ด๊ณ ์ฐจ๊ฐ์ด ์์กฐ๋ ๋ ๋ฎ์ ๊ฐ์ ๋ํ๋ ๋๋ค. ์ฃผ์ ์ด์ ์ผ๋ก๋ ๋ฐ์ดํฐ ๋ถํฌ์ ์ง๊ด์ ์ธ ์๊ฐํ, ํจ์จ์ ์ธ ํจํด ๊ฐ์ง, ์์ฌ ๊ฒฐ์ ์ ์ํ ํฅ์๋ ๊ณต๊ฐ ๋ถ์ ๋ฑ์ด ์์ต๋๋ค. ์์ธํ ๋ด์ฉ๊ณผ ๊ตฌ์ฑ ์ต์ ์ ํํธ๋งต ๊ตฌ์ฑ ์น์ ์ ์ฐธ์กฐํ์ธ์.
Ultralytics YOLOv8 ์ ์ฌ์ฉํ์ฌ ์ค๋ธ์ ํธ ์ถ์ ๊ณผ ํํธ๋งต ์์ฑ์ ๋์์ ์ํํ ์ ์๋์?
์, Ultralytics YOLOv8 ๊ฐ์ฒด ์ถ์ ๊ณผ ํํธ๋งต ์์ฑ์ ๋์์ ์ง์ํฉ๋๋ค. ์ด๋ Heatmap
์๋ฃจ์
์ ๊ฐ์ฒด ์ถ์ ๋ชจ๋ธ๊ณผ ํตํฉํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ ค๋ฉด ํํธ๋งต ๊ฐ์ฒด๋ฅผ ์ด๊ธฐํํ๊ณ YOLOv8 ์ ์ถ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ๋ค์์ ๊ฐ๋จํ ์์์
๋๋ค:
import cv2
from ultralytics import YOLO, solutions
model = YOLO("yolov8n.pt")
cap = cv2.VideoCapture("path/to/video/file.mp4")
heatmap_obj = solutions.Heatmap(colormap=cv2.COLORMAP_PARULA, view_img=True, shape="circle", names=model.names)
while cap.isOpened():
success, im0 = cap.read()
if not success:
break
tracks = model.track(im0, persist=True, show=False)
im0 = heatmap_obj.generate_heatmap(im0, tracks)
cv2.imshow("Heatmap", im0)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
cap.release()
cv2.destroyAllWindows()
์์ธํ ์๋ด๋ ์ถ์ ๋ชจ๋ ํ์ด์ง๋ฅผ ์ฐธ์กฐํ์ธ์.
Ultralytics YOLOv8 ํํธ๋งต์ด OpenCV๋ Matplotlib ๊ฐ์ ๋ค๋ฅธ ๋ฐ์ดํฐ ์๊ฐํ ๋๊ตฌ์ ๋ค๋ฅธ ์ ์ ๋ฌด์์ธ๊ฐ์?
Ultralytics YOLOv8 ํํธ๋งต์ ๊ฐ์ฒด ๊ฐ์ง ๋ฐ ์ถ์ ๋ชจ๋ธ๊ณผ์ ํตํฉ์ ์ํด ํน๋ณํ ์ค๊ณ๋์ด ์ค์๊ฐ ๋ฐ์ดํฐ ๋ถ์์ ์ํ ์๋ํฌ์๋ ์๋ฃจ์ ์ ์ ๊ณตํฉ๋๋ค. OpenCV๋ Matplotlib ๊ฐ์ ์ผ๋ฐ์ ์ธ ์๊ฐํ ๋๊ตฌ์ ๋ฌ๋ฆฌ YOLOv8 ํํธ๋งต์ ์ฑ๋ฅ๊ณผ ์๋ ์ฒ๋ฆฌ์ ์ต์ ํ๋์ด ์์ด ์ง์์ ์ธ ์ถ์ , ๊ฐ์ ๊ณ์ ์กฐ์ , ์ค์๊ฐ ๋น๋์ค ์ค๋ฒ๋ ์ด์ ๊ฐ์ ๊ธฐ๋ฅ์ ์ง์ํฉ๋๋ค. YOLOv8 ์ ๊ณ ์ ํ ๊ธฐ๋ฅ์ ๋ํ ์์ธํ ๋ด์ฉ์ Ultralytics YOLOv8 ์๊ฐ๋ฅผ ์ฐธ์กฐํ์ธ์.
Ultralytics YOLOv8 ์ ์ฌ์ฉํ์ฌ ํํธ ๋งต์์ ํน์ ๊ฐ์ฒด ํด๋์ค๋ง ์๊ฐํํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ๋์?
์์ ์ํ๋ ํด๋์ค๋ฅผ ์ง์ ํ์ฌ ํน์ ์ค๋ธ์ ํธ ํด๋์ค๋ฅผ ์๊ฐํํ ์ ์์ต๋๋ค. track()
YOLO ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์๋์ฐจ์ ์ฌ๋๋ง ์๊ฐํํ๋ ค๋ ๊ฒฝ์ฐ(ํด๋์ค ์ธ๋ฑ์ค๊ฐ 0๊ณผ 2๋ผ๊ณ ๊ฐ์ ํ ๊ฒฝ์ฐ) classes
๋งค๊ฐ ๋ณ์๋ฅผ ์ ์ ํ ์ฌ์ฉํฉ๋๋ค.
import cv2
from ultralytics import YOLO, solutions
model = YOLO("yolov8n.pt")
cap = cv2.VideoCapture("path/to/video/file.mp4")
heatmap_obj = solutions.Heatmap(colormap=cv2.COLORMAP_PARULA, view_img=True, shape="circle", names=model.names)
classes_for_heatmap = [0, 2] # Classes to visualize
while cap.isOpened():
success, im0 = cap.read()
if not success:
break
tracks = model.track(im0, persist=True, show=False, classes=classes_for_heatmap)
im0 = heatmap_obj.generate_heatmap(im0, tracks)
cv2.imshow("Heatmap", im0)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
cap.release()
cv2.destroyAllWindows()
๊ธฐ์ ์ด ๋ฐ์ดํฐ ๋ถ์์์ ํํธ๋งต ์์ฑ์ ์ํด Ultralytics YOLOv8 ์ ์ ํํด์ผ ํ๋ ์ด์ ๋ ๋ฌด์์ธ๊ฐ์?
Ultralytics YOLOv8 ๋ ๊ณ ๊ธ ๊ฐ์ฒด ๊ฐ์ง ๊ธฐ๋ฅ๊ณผ ์ค์๊ฐ ํํธ๋งต ์์ฑ ๊ธฐ๋ฅ์ ์ํํ๊ฒ ํตํฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ค ํจ๊ณผ์ ์ผ๋ก ์๊ฐํํ๊ณ ์ ํ๋ ๊ธฐ์ ์๊ฒ ์ด์์ ์ธ ์ ํ์ ๋๋ค. ์ฃผ์ ์ฅ์ ์ผ๋ก๋ ์ง๊ด์ ์ธ ๋ฐ์ดํฐ ๋ถํฌ ์๊ฐํ, ํจ์จ์ ์ธ ํจํด ๊ฐ์ง, ๋ ๋์ ์์ฌ๊ฒฐ์ ์ ์ํ ํฅ์๋ ๊ณต๊ฐ ๋ถ์ ๋ฑ์ด ์์ต๋๋ค. ๋ํ, ์๊ตฌ ์ถ์ , ์ฌ์ฉ์ ์ ์ ๊ฐ๋ฅํ ์ปฌ๋ฌ๋งต, ๋ค์ํ ๋ด๋ณด๋ด๊ธฐ ํ์ ์ง์๊ณผ ๊ฐ์ YOLOv8 ์ ์ต์ฒจ๋จ ๊ธฐ๋ฅ์ ํฌ๊ด์ ์ธ ๋ฐ์ดํฐ ๋ถ์์ ์ํ TensorFlow ๋ฐ OpenCV์ ๊ฐ์ ๋ค๋ฅธ ๋๊ตฌ๋ณด๋ค ์ฐ์ํฉ๋๋ค. ๋น์ฆ๋์ค ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ์์ธํ ๋ด์ฉ์ Ultralytics ์๊ธ์ ์์ ํ์ธํ์ธ์.
2023-12-07 ์์ฑ, 2024-07-14 ์ ๋ฐ์ดํธ
์์ฑ์: RizwanMunawar (8), glenn-jocher (13), IvorZhu331 (1), AyushExel (1), 1579093407@qq.com (1)