์ฝ˜ํ…์ธ ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

Ultralytics YOLOv8 ๐Ÿš€์„ ์‚ฌ์šฉํ•œ ๋Œ€๊ธฐ์—ด ๊ด€๋ฆฌ

๋Œ€๊ธฐ์—ด ๊ด€๋ฆฌ๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

์„ ์‚ฌ์šฉํ•œ ๋Œ€๊ธฐ์—ด ๊ด€๋ฆฌ Ultralytics YOLOv8 ๋Š” ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ์ค„์ด๊ณ  ํšจ์œจ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ์‚ฌ๋žŒ์ด๋‚˜ ์ฐจ๋Ÿ‰์˜ ์ค„์„ ๊ตฌ์„ฑํ•˜๊ณ  ์ œ์–ดํ•˜๋Š” ๊ฒƒ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๊ธฐ์—ด์„ ์ตœ์ ํ™”ํ•˜์—ฌ ์†Œ๋งค์ , ์€ํ–‰, ๊ณตํ•ญ, ์˜๋ฃŒ ์‹œ์„ค ๋“ฑ ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ์—์„œ ๊ณ ๊ฐ ๋งŒ์กฑ๋„์™€ ์‹œ์Šคํ…œ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.



Watch: ๋Œ€๊ธฐ์—ด ๊ด€๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ• Ultralytics YOLOv8 | ๊ณตํ•ญ ๋ฐ ์ง€ํ•˜์ฒ ์—ญ

๋Œ€๊ธฐ์—ด ๊ด€๋ฆฌ์˜ ์žฅ์ ์€?

  • ๋Œ€๊ธฐ ์‹œ๊ฐ„ ๋‹จ์ถ•: ๋Œ€๊ธฐ์—ด ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์€ ๋Œ€๊ธฐ์—ด์„ ํšจ์œจ์ ์œผ๋กœ ๊ตฌ์„ฑํ•˜์—ฌ ๊ณ ๊ฐ์˜ ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ณ ๊ฐ์ด ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ์ค„์ด๊ณ  ์ œํ’ˆ์ด๋‚˜ ์„œ๋น„์Šค์— ๋” ๋งŽ์€ ์‹œ๊ฐ„์„ ํ• ์• ํ•  ์ˆ˜ ์žˆ์–ด ๋งŒ์กฑ๋„ ํ–ฅ์ƒ์œผ๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค.
  • ํšจ์œจ์„ฑ ํ–ฅ์ƒ: ๋Œ€๊ธฐ์—ด ๊ด€๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด ๊ธฐ์—…์€ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ณด๋‹ค ํšจ๊ณผ์ ์œผ๋กœ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๊ธฐ์—ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ์ง์› ๋ฐฐ์น˜๋ฅผ ์ตœ์ ํ™”ํ•จ์œผ๋กœ์จ ๊ธฐ์—…์€ ์šด์˜์„ ๊ฐ„์†Œํ™”ํ•˜๊ณ  ๋น„์šฉ์„ ์ ˆ๊ฐํ•˜๋ฉฐ ์ „๋ฐ˜์ ์ธ ์ƒ์‚ฐ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹ค์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜

๋ฌผ๋ฅ˜ ๋ฆฌํ…Œ์ผ
๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ณตํ•ญ ๋ฐœ๊ถŒ ์นด์šดํ„ฐ์—์„œ ๋Œ€๊ธฐ์—ด ๊ด€๋ฆฌ Ultralytics YOLOv8 ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ํฌ๋ผ์šฐ๋“œ์—์„œ ๋Œ€๊ธฐ์—ด ๋ชจ๋‹ˆํ„ฐ๋ง Ultralytics YOLOv8
๊ณตํ•ญ ๋ฐœ๊ถŒ ์นด์šดํ„ฐ์—์„œ ๋Œ€๊ธฐ์—ด ๊ด€๋ฆฌ Ultralytics YOLOv8 ๊ตฐ์ค‘ ์† ๋Œ€๊ธฐ์—ด ๋ชจ๋‹ˆํ„ฐ๋ง Ultralytics YOLOv8

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 = cv2.VideoWriter("queue_management.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

queue_region = [(20, 400), (1080, 404), (1080, 360), (20, 360)]

queue = solutions.QueueManager(
    names=model.names,
    reg_pts=queue_region,
    line_thickness=3,
    fontsize=1.0,
    region_color=(255, 144, 31),
)

while cap.isOpened():
    success, im0 = cap.read()

    if success:
        tracks = model.track(im0, show=False, persist=True, verbose=False)
        out = queue.process_queue(im0, tracks)

        video_writer.write(im0)
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break
        continue

    print("Video frame is empty or video processing has been successfully completed.")
    break

cap.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 = cv2.VideoWriter("queue_management.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

queue_region = [(20, 400), (1080, 404), (1080, 360), (20, 360)]

queue = solutions.QueueManager(
    names=model.names,
    reg_pts=queue_region,
    line_thickness=3,
    fontsize=1.0,
    region_color=(255, 144, 31),
)

while cap.isOpened():
    success, im0 = cap.read()

    if success:
        tracks = model.track(im0, show=False, persist=True, verbose=False, classes=0)  # Only person class
        out = queue.process_queue(im0, tracks)

        video_writer.write(im0)
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break
        continue

    print("Video frame is empty or video processing has been successfully completed.")
    break

cap.release()
cv2.destroyAllWindows()

์ธ์ˆ˜ QueueManager

์ด๋ฆ„ ์œ ํ˜• ๊ธฐ๋ณธ๊ฐ’ ์„ค๋ช…
names dict model.names ํด๋ž˜์Šค ID๋ฅผ ํด๋ž˜์Šค ์ด๋ฆ„์— ๋งคํ•‘ํ•˜๋Š” ์‚ฌ์ „์ž…๋‹ˆ๋‹ค.
reg_pts list of tuples [(20, 400), (1260, 400)] ๊ณ„์‚ฐ ์˜์—ญ ๋‹ค๊ฐํ˜•์„ ์ •์˜ํ•˜๋Š” ์ ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ ๋ฏธ๋ฆฌ ์ •์˜๋œ ์ง์‚ฌ๊ฐํ˜•์ž…๋‹ˆ๋‹ค.
line_thickness int 2 ์ฃผ์„ ์„ ์˜ ๋‘๊ป˜์ž…๋‹ˆ๋‹ค.
track_thickness int 2 ํŠธ๋ž™ ์„ ์˜ ๋‘๊ป˜์ž…๋‹ˆ๋‹ค.
view_img bool False ์ด๋ฏธ์ง€ ํ”„๋ ˆ์ž„์„ ํ‘œ์‹œํ• ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค.
region_color tuple (255, 0, 255) ๊ณ„์‚ฐ ์˜์—ญ ์„ (BGR)์˜ ์ƒ‰์ƒ.
view_queue_counts bool True ๋Œ€๊ธฐ์—ด ์ˆ˜๋ฅผ ํ‘œ์‹œํ• ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค.
draw_tracks bool False ์˜ค๋ธŒ์ ํŠธ์˜ ํŠธ๋ž™์„ ๊ทธ๋ฆด์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค.
count_txt_color tuple (255, 255, 255) ์นด์šดํŠธ ํ…์ŠคํŠธ์˜ ์ƒ‰์ƒ(BGR).
track_color tuple None ํŠธ๋ž™์˜ ์ƒ‰์ƒ. ๋งŒ์•ฝ None๋ฅผ ํด๋ฆญํ•˜๋ฉด ํŠธ๋ž™๋งˆ๋‹ค ๋‹ค๋ฅธ ์ƒ‰์ƒ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
region_thickness int 5 ๊ณ„์‚ฐ ์˜์—ญ ์„ ์˜ ๋‘๊ป˜์ž…๋‹ˆ๋‹ค.
fontsize float 0.7 ํ…์ŠคํŠธ ์ฃผ์„์˜ ๊ธ€๊ผด ํฌ๊ธฐ์ž…๋‹ˆ๋‹ค.

์ธ์ˆ˜ 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]).
verbose bool True ๊ฐœ์ฒด ์ถ”์  ๊ฒฐ๊ณผ ํ‘œ์‹œ

์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ

์‹ค์‹œ๊ฐ„ ๋Œ€๊ธฐ์—ด ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด Ultralytics YOLOv8 ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•˜๋‚˜์š”?

์‹ค์‹œ๊ฐ„ ๋Œ€๊ธฐ์—ด ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด Ultralytics YOLOv8 ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด์„ธ์š”:

  1. YOLOv8 ๋ชจ๋ธ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. YOLO("yolov8n.pt").
  2. ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋™์˜์ƒ ํ”ผ๋“œ๋ฅผ ์บก์ฒ˜ํ•ฉ๋‹ˆ๋‹ค. cv2.VideoCapture.
  3. ๋Œ€๊ธฐ์—ด ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ๊ด€์‹ฌ ์˜์—ญ(ROI)์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  4. ํ”„๋ ˆ์ž„์„ ์ฒ˜๋ฆฌํ•˜์—ฌ ๊ฐœ์ฒด๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ๋Œ€๊ธฐ์—ด์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์ตœ์†Œํ•œ์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค:

import cv2

from ultralytics import YOLO, solutions

model = YOLO("yolov8n.pt")
cap = cv2.VideoCapture("path/to/video.mp4")
queue_region = [(20, 400), (1080, 404), (1080, 360), (20, 360)]

queue = solutions.QueueManager(
    names=model.names,
    reg_pts=queue_region,
    line_thickness=3,
    fontsize=1.0,
    region_color=(255, 144, 31),
)

while cap.isOpened():
    success, im0 = cap.read()
    if success:
        tracks = model.track(im0, show=False, persist=True, verbose=False)
        out = queue.process_queue(im0, tracks)
        cv2.imshow("Queue Management", im0)
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break

cap.release()
cv2.destroyAllWindows()

Ultralytics HUB๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๋Œ€๊ธฐ์—ด ๊ด€๋ฆฌ ์†”๋ฃจ์…˜์„ ๋ฐฐํฌํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ ํ”Œ๋žซํผ์„ ์ œ๊ณตํ•จ์œผ๋กœ์จ ์ด ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ„์†Œํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ€๊ธฐ์—ด ๊ด€๋ฆฌ์— Ultralytics YOLOv8 ์„ ์‚ฌ์šฉํ•˜๋ฉด ์–ด๋–ค ์ฃผ์š” ์ด์ ์ด ์žˆ๋‚˜์š”?

๋Œ€๊ธฐ์—ด ๊ด€๋ฆฌ์— Ultralytics YOLOv8 ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ช‡ ๊ฐ€์ง€ ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค:

  • ๋Œ€๊ธฐ ์‹œ๊ฐ„ ๋‹จ์ถ•: ๋Œ€๊ธฐ์—ด์„ ํšจ์œจ์ ์œผ๋กœ ์ •๋ฆฌํ•˜์—ฌ ๊ณ ๊ฐ ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ์ค„์ด๊ณ  ๋งŒ์กฑ๋„๋ฅผ ๋†’์ž…๋‹ˆ๋‹ค.
  • ํšจ์œจ์„ฑ ํ–ฅ์ƒ: ๋Œ€๊ธฐ์—ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ์ง์› ๋ฐฐ์น˜ ๋ฐ ์šด์˜์„ ์ตœ์ ํ™”ํ•จ์œผ๋กœ์จ ๋น„์šฉ์„ ์ ˆ๊ฐํ•ฉ๋‹ˆ๋‹ค.
  • ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ: ๊ธด ๋Œ€๊ธฐ์—ด์— ๋Œ€ํ•œ ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ์„ ์ œ๊ณตํ•˜์—ฌ ๋น ๋ฅธ ๊ฐœ์ž…์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
  • ํ™•์žฅ์„ฑ: ๋ฆฌํ…Œ์ผ, ๊ณตํ•ญ, ์˜๋ฃŒ ๋“ฑ ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ์—์„œ ์‰ฝ๊ฒŒ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋Œ€๊ธฐ์—ด ๊ด€๋ฆฌ ์†”๋ฃจ์…˜์„ ์‚ดํŽด๋ณด์„ธ์š”.

๋Œ€๊ธฐ์—ด ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด TensorFlow ๋˜๋Š” Detectron2์™€ ๊ฐ™์€ ๊ฒฝ์Ÿ์‚ฌ๋ณด๋‹ค Ultralytics YOLOv8 ์„ ์„ ํƒํ•ด์•ผ ํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?

Ultralytics YOLOv8 ๋Š” ๋Œ€๊ธฐ์—ด ๊ด€๋ฆฌ ์ธก๋ฉด์—์„œ TensorFlow ๋ฐ Detectron2์— ๋น„ํ•ด ๋ช‡ ๊ฐ€์ง€ ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค:

  • ์‹ค์‹œ๊ฐ„ ์„ฑ๋Šฅ: YOLOv8 ๋Š” ์‹ค์‹œ๊ฐ„ ๊ฐ์ง€ ๊ธฐ๋Šฅ์œผ๋กœ ๋” ๋น ๋ฅธ ์ฒ˜๋ฆฌ ์†๋„๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์œ ๋ช…ํ•ฉ๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ ํŽธ์˜์„ฑ: Ultralytics Ultralytics HUB๋ฅผ ํ†ตํ•ด ๊ต์œก๋ถ€ํ„ฐ ๋ฐฐํฌ๊นŒ์ง€ ์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ ๊ฒฝํ—˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ์‚ฌ์ „ ํ•™์Šต๋œ ๋ชจ๋ธ: ์‚ฌ์ „ ํ•™์Šต๋œ ๋‹ค์–‘ํ•œ ๋ชจ๋ธ์— ์•ก์„ธ์Šคํ•˜์—ฌ ์„ค์ •์— ํ•„์š”ํ•œ ์‹œ๊ฐ„์„ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ปค๋ฎค๋‹ˆํ‹ฐ ์ง€์›: ๊ด‘๋ฒ”์œ„ํ•œ ๋ฌธ์„œ์™€ ํ™œ๋ฐœํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ ์ง€์›์œผ๋กœ ๋ฌธ์ œ ํ•ด๊ฒฐ์ด ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค.

์‹œ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ• ์•Œ์•„๋ณด๊ธฐ Ultralytics YOLO.

Ultralytics YOLOv8 ๊ณตํ•ญ ๋ฐ ์†Œ๋งค์ ๊ณผ ๊ฐ™์€ ์—ฌ๋Ÿฌ ์œ ํ˜•์˜ ๋Œ€๊ธฐ์—ด์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

์˜ˆ, Ultralytics YOLOv8 ์€ ๊ณตํ•ญ ๋ฐ ๋ฆฌํ…Œ์ผ ํ™˜๊ฒฝ์„ ํฌํ•จํ•œ ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ๋Œ€๊ธฐ์—ด์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠน์ • ์ง€์—ญ ๋ฐ ์„ค์ •์œผ๋กœ QueueManager๋ฅผ ๊ตฌ์„ฑํ•˜๋ฉด YOLOv8 ๋‹ค์–‘ํ•œ ๋Œ€๊ธฐ์—ด ๋ ˆ์ด์•„์›ƒ๊ณผ ๋ฐ€๋„์— ๋งž๊ฒŒ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ณตํ•ญ์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค:

queue_region_airport = [(50, 600), (1200, 600), (1200, 550), (50, 550)]
queue_airport = solutions.QueueManager(
    names=model.names,
    reg_pts=queue_region_airport,
    line_thickness=3,
    fontsize=1.0,
    region_color=(0, 255, 0),
)

๋‹ค์–‘ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์‹ค์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„น์…˜์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๋Œ€๊ธฐ์—ด ๊ด€๋ฆฌ์—์„œ Ultralytics YOLOv8 ์˜ ์‹ค์ œ ์ ์šฉ ์‚ฌ๋ก€๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?

Ultralytics YOLOv8 ๋Š” ๋Œ€๊ธฐ์—ด ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ์‹ค์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค:

  • ์†Œ๋งค์—…: ๊ณ„์‚ฐ๋Œ€ ๋Œ€๊ธฐ์—ด์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜์—ฌ ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ์ค„์ด๊ณ  ๊ณ ๊ฐ ๋งŒ์กฑ๋„๋ฅผ ๋†’์ž…๋‹ˆ๋‹ค.
  • ๊ณตํ•ญ: ๋ณด๋‹ค ์›ํ™œํ•œ ์Šน๊ฐ ๊ฒฝํ—˜์„ ์œ„ํ•ด ๋ฐœ๊ถŒ ์นด์šดํ„ฐ์™€ ๋ณด์•ˆ ๊ฒ€์ƒ‰๋Œ€์˜ ๋Œ€๊ธฐ์—ด์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ํ—ฌ์Šค์ผ€์–ด: ํด๋ฆฌ๋‹‰๊ณผ ๋ณ‘์›์—์„œ ํ™˜์ž ํ๋ฆ„์„ ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • ์€ํ–‰: ์€ํ–‰์—์„œ ๋Œ€๊ธฐ์—ด์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜์—ฌ ๊ณ ๊ฐ ์„œ๋น„์Šค๋ฅผ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค.

์‹ค์ œ ๋Œ€๊ธฐ์—ด ๊ด€๋ฆฌ์— ๋Œ€ํ•œ ๋ธ”๋กœ๊ทธ์—์„œ ์ž์„ธํ•œ ๋‚ด์šฉ์„ ํ™•์ธํ•˜์„ธ์š”.



์ƒ์„ฑ 2024-04-02, ์—…๋ฐ์ดํŠธ 2024-07-14
์ž‘์„ฑ์ž: RizwanMunawar (1), glenn-jocher (5), IvorZhu331 (1), Burhan-Q (1)

๋Œ“๊ธ€