Ultralytics YOLOv8 ๐์ ์ฌ์ฉํ ์ค๋ธ์ ํธ ๋ธ๋ฌ๋ง
์ค๋ธ์ ํธ ๋ธ๋ฌ๋ ๋ฌด์์ธ๊ฐ์?
๋ฌผ์ฒด ํ๋ฆฌ๊ฒ ์ฒ๋ฆฌ Ultralytics YOLOv8 ๋ ์ด๋ฏธ์ง ๋๋ ๋์์์์ ๊ฐ์ง๋ ํน์ ๊ฐ์ฒด์ ๋ธ๋ฌ ํจ๊ณผ๋ฅผ ์ ์ฉํ๋ ๊ธฐ๋ฅ์ ๋๋ค. ์ด๋ YOLOv8 ๋ชจ๋ธ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ์ฃผ์ด์ง ์ฅ๋ฉด ๋ด์์ ๊ฐ์ฒด๋ฅผ ์๋ณํ๊ณ ์กฐ์ํ ์ ์์ต๋๋ค.
์ค๋ธ์ ํธ ๋ธ๋ฌ์ ์ฅ์ ์?
- ๊ฐ์ธ์ ๋ณด ๋ณดํธ: ๋ฌผ์ฒด ํ๋ฆผ ํจ๊ณผ๋ ์ด๋ฏธ์ง๋ ๋์์์์ ๋ฏผ๊ฐํ ์ ๋ณด๋ ๊ฐ์ธ ์๋ณ ์ ๋ณด๋ฅผ ์จ๊ฒจ ๊ฐ์ธ ์ ๋ณด๋ฅผ ๋ณดํธํ๋ ๋ฐ ํจ๊ณผ์ ์ธ ๋๊ตฌ์ ๋๋ค.
- ์ ํ์ ์ด์ : YOLOv8 ์ ์ฌ์ฉํ๋ฉด ์ ํ์ ์ผ๋ก ํ๋ฆฌ๊ฒ ์ฒ๋ฆฌํ์ฌ ์ฌ์ฉ์๊ฐ ํน์ ๊ฐ์ฒด๋ฅผ ๋์์ผ๋ก ์ง์ ํ ์ ์์ผ๋ฏ๋ก ๊ฐ์ธ์ ๋ณด ๋ณดํธ์ ๊ด๋ จ ์๊ฐ ์ ๋ณด ์ ์ง ๊ฐ์ ๊ท ํ์ ์ ์งํ ์ ์์ต๋๋ค.
- ์ค์๊ฐ ์ฒ๋ฆฌ: YOLOv8 ์ ํจ์จ์ฑ์ ์ค์๊ฐ์ผ๋ก ๋ฌผ์ฒด๋ฅผ ํ๋ฆฌ๊ฒ ์ฒ๋ฆฌํ ์ ์์ด ๋์ ํ๊ฒฝ์์ ์ฆ๊ฐ์ ์ธ ๊ฐ์ธ ์ ๋ณด ๋ณดํธ ๊ฐํ๊ฐ ํ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉํฉ๋๋ค.
YOLOv8 ์ ์ฌ์ฉํ ์ค๋ธ์ ํธ ํ๋ฆผ ์์
from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator, colors
import cv2
model = YOLO("yolov8n.pt")
names = model.names
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))
# Blur ratio
blur_ratio = 50
# Video writer
video_writer = cv2.VideoWriter("object_blurring_output.avi",
cv2.VideoWriter_fourcc(*'mp4v'),
fps, (w, h))
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or video processing has been successfully completed.")
break
results = model.predict(im0, show=False)
boxes = results[0].boxes.xyxy.cpu().tolist()
clss = results[0].boxes.cls.cpu().tolist()
annotator = Annotator(im0, line_width=2, example=names)
if boxes is not None:
for box, cls in zip(boxes, clss):
annotator.box_label(box, color=colors(int(cls), True), label=names[int(cls)])
obj = im0[int(box[1]):int(box[3]), int(box[0]):int(box[2])]
blur_obj = cv2.blur(obj, (blur_ratio, blur_ratio))
im0[int(box[1]):int(box[3]), int(box[0]):int(box[2])] = blur_obj
cv2.imshow("ultralytics", im0)
video_writer.write(im0)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
video_writer.release()
cv2.destroyAllWindows()
์ธ์ model.predict
์ด๋ฆ | ์ ํ | ๊ธฐ๋ณธ๊ฐ | ์ค๋ช |
---|---|---|---|
source |
str |
'ultralytics/assets' |
์ด๋ฏธ์ง ๋๋ ๋น๋์ค์ ์์ค ๋๋ ํ ๋ฆฌ |
conf |
float |
0.25 |
ํ์ง๋ฅผ ์ํ ๊ฐ์ฒด ์ ๋ขฐ ์๊ณ๊ฐ |
iou |
float |
0.7 |
NMS์ ๋ํ ๊ต์ฐจ์ ์ค๋ฒ ์ ๋์จ(IoU) ์๊ณ๊ฐ |
imgsz |
int or tuple |
640 |
์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์ค์นผ๋ผ ๋๋ (h, w) ๋ชฉ๋ก(์: (640, 480))์ผ๋ก ์ง์ ํฉ๋๋ค. |
half |
bool |
False |
๋ฐ์ ๋ฐ๋ ์ฌ์ฉ(FP16) |
device |
None or str |
None |
์คํํ ๋๋ฐ์ด์ค(์: CUDA ๋๋ฐ์ด์ค=0/1/2/3 ๋๋ ๋๋ฐ์ด์ค=CPU) |
max_det |
int |
300 |
์ด๋ฏธ์ง๋น ์ต๋ ํ์ง ํ์ |
vid_stride |
bool |
False |
๋น๋์ค ํ๋ ์ ์๋ ๋ณดํญ |
stream_buffer |
bool |
False |
๋ชจ๋ ์คํธ๋ฆฌ๋ฐ ํ๋ ์์ ๋ฒํผ๋งํ๊ฑฐ๋(True) ๊ฐ์ฅ ์ต๊ทผ ํ๋ ์์ ๋ฐํํฉ๋๋ค(False). |
visualize |
bool |
False |
๋ชจ๋ธ ๊ธฐ๋ฅ ์๊ฐํ |
augment |
bool |
False |
์์ธก ์์ค์ ์ด๋ฏธ์ง ์ฆ๊ฐ ์ ์ฉ |
agnostic_nms |
bool |
False |
ํด๋์ค์ ๊ตฌ์ ๋ฐ์ง ์๋ NMS |
classes |
list[int] |
None |
ํด๋์ค๋ณ๋ก ๊ฒฐ๊ณผ๋ฅผ ํํฐ๋งํฉ๋๋ค(์: classes=0 ๋๋ classes=[0,2,3]). |
retina_masks |
bool |
False |
๊ณ ํด์๋ ์ธ๋ถํ ๋ง์คํฌ ์ฌ์ฉ |
embed |
list[int] |
None |
์ฃผ์ด์ง ๋ ์ด์ด์์ ํผ์ฒ ๋ฒกํฐ/์๋ฒ ๋ฉ์ ๋ฐํํฉ๋๋ค. |
์์ฑ 2024-01-09, ์ ๋ฐ์ดํธ 2024-01-15
์์ฑ์: glenn-jocher (2), AyushExel (1), RizwanMunawar (1)