Ultralytics YOLOv8 ๐์ ์ฌ์ฉํ ๊ฐ์ฒด ์๋ฅด๊ธฐ
๊ฐ์ฒด ์๋ฅด๊ธฐ๋ ๋ฌด์์ธ๊ฐ์?
๋ฅผ ์ฌ์ฉํ ๊ฐ์ฒด ์๋ฅด๊ธฐ Ultralytics YOLOv8 ๋ฅผ ์ฌ์ฉํ ๊ฐ์ฒด ์๋ฅด๊ธฐ์๋ ์ด๋ฏธ์ง ๋๋ ๋์์์์ ๊ฐ์ง๋ ํน์ ๊ฐ์ฒด๋ฅผ ๋ถ๋ฆฌํ๊ณ ์ถ์ถํ๋ ์์ ์ด ํฌํจ๋ฉ๋๋ค. YOLOv8 ๋ชจ๋ธ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด๋ฅผ ์ ํํ๊ฒ ์๋ณํ๊ณ ๋ฌ์ฌํ์ฌ ์ถ๊ฐ ๋ถ์ ๋๋ ์กฐ์์ ์ํ ์ ๋ฐํ ์๋ฅด๊ธฐ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
์ค๋ธ์ ํธ ์๋ฅด๊ธฐ์ ์ฅ์ ์?
- ์ง์ค ๋ถ์: YOLOv8 ๋์ ๊ฐ์ฒด ์๋ฅด๊ธฐ๋ฅผ ์ฌ์ฉํ๋ฉด ์ฅ๋ฉด ๋ด์์ ๊ฐ๋ณ ํญ๋ชฉ์ ์ฌ์ธต์ ์ผ๋ก ์กฐ์ฌํ๊ฑฐ๋ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
- ๋ฐ์ดํฐ ์ฉ๋ ๊ฐ์: ๊ฐ์ฒด ์๋ฅด๊ธฐ๋ ๊ด๋ จ ๊ฐ์ฒด๋ง ์ถ์ถํจ์ผ๋ก์จ ๋ฐ์ดํฐ ํฌ๊ธฐ๋ฅผ ์ต์ํํ์ฌ ์ ์ฅ, ์ ์ก ๋๋ ํ์ ๊ณ์ฐ ์์ ์ ํจ์จ์ ์ผ๋ก ์ํํ ์ ์๋๋ก ๋์์ค๋๋ค.
- ํฅ์๋ ์ ๋ฐ๋: YOLOv8 ์ ๊ฐ์ฒด ๊ฐ์ง ์ ํ๋๋ ์๋ฆฐ ๊ฐ์ฒด๊ฐ ๊ณต๊ฐ ๊ด๊ณ๋ฅผ ์ ์งํ๋๋ก ๋ณด์ฅํ์ฌ ์์ธํ ๋ถ์์ ์ํด ์๊ฐ์ ์ ๋ณด์ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์กดํฉ๋๋ค.
๋น์ฃผ์ผ
๊ณตํญ ์ํ๋ฌผ |
---|
๊ณตํญ ์ปจ๋ฒ ์ด์ด ๋ฒจํธ๋ฅผ ์ด์ฉํ ์ฌํ ๊ฐ๋ฐฉ ์๋ฅด๊ธฐ Ultralytics YOLOv8 |
YOLOv8 ์์ ๋ฅผ ์ฌ์ฉํ ๊ฐ์ฒด ์๋ฅด๊ธฐ
from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator, colors
import cv2
import os
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))
crop_dir_name = "ultralytics_crop"
if not os.path.exists(crop_dir_name):
os.mkdir(crop_dir_name)
# Video writer
video_writer = cv2.VideoWriter("object_cropping_output.avi",
cv2.VideoWriter_fourcc(*'mp4v'),
fps, (w, h))
idx = 0
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):
idx += 1
annotator.box_label(box, color=colors(int(cls), True), label=names[int(cls)])
crop_obj = im0[int(box[1]):int(box[3]), int(box[0]):int(box[2])]
cv2.imwrite(os.path.join(crop_dir_name, str(idx)+".png"), crop_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-03-03
์์ฑ์: glenn-jocher (2), RizwanMunawar (2), AyushExel (1)