Ultralytics YOLOv8 ๐์ ์ด์ฉํ ์ฃผ์ฐจ ๊ด๋ฆฌ
์ฃผ์ฐจ ๊ด๋ฆฌ ์์คํ ์ด๋ ๋ฌด์์ธ๊ฐ์?
์ฃผ์ฐจ ๊ด๋ฆฌ Ultralytics YOLOv8 ๋ ๊ณต๊ฐ์ ๊ตฌ์ฑํ๊ณ ๊ฐ์ฉ์ฑ์ ๋ชจ๋ํฐ๋งํ์ฌ ํจ์จ์ ์ด๊ณ ์์ ํ ์ฃผ์ฐจ๋ฅผ ๋ณด์ฅํฉ๋๋ค. YOLOv8 ์ค์๊ฐ ์ฐจ๋ ๊ฐ์ง ๋ฐ ์ฃผ์ฐจ ์ ์ ์จ์ ๋ํ ์ธ์ฌ์ดํธ๋ฅผ ํตํด ์ฃผ์ฐจ์ฅ ๊ด๋ฆฌ๋ฅผ ๊ฐ์ ํ ์ ์์ต๋๋ค.
Watch: Ultralytics YOLOv8 ๐์ ์ฌ์ฉํ์ฌ ์ฃผ์ฐจ ๊ด๋ฆฌ๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ
์ฃผ์ฐจ ๊ด๋ฆฌ ์์คํ ์ ์ฅ์ ์?
- ํจ์จ์ฑ: ์ฃผ์ฐจ์ฅ ๊ด๋ฆฌ๋ ์ฃผ์ฐจ ๊ณต๊ฐ ์ฌ์ฉ์ ์ต์ ํํ๊ณ ํผ์ก์ ์ค์ ๋๋ค.
- ์์ ๋ฐ ๋ณด์: YOLOv8 ์ ์ด์ฉํ ์ฃผ์ฐจ ๊ด๋ฆฌ๋ ๊ฐ์ ๋ฐ ๋ณด์ ์กฐ์น๋ฅผ ํตํด ์ฌ๋๊ณผ ์ฐจ๋ ๋ชจ๋์ ์์ ์ ํฅ์์ํต๋๋ค.
- ๋ฐฐ๊ธฐ๊ฐ์ค ๋ฐฐ์ถ๋ ๊ฐ์: YOLOv8 ์ ์ฌ์ฉํ ์ฃผ์ฐจ ๊ด๋ฆฌ๋ ๊ตํต ํ๋ฆ์ ๊ด๋ฆฌํ์ฌ ์ฃผ์ฐจ์ฅ์ ์ ํด ์๊ฐ๊ณผ ๋ฐฐ๊ธฐ๊ฐ์ค ๋ฐฐ์ถ์ ์ต์ํํฉ๋๋ค.
์ค์ ์ ํ๋ฆฌ์ผ์ด์
์ฃผ์ฐจ ๊ด๋ฆฌ ์์คํ | ์ฃผ์ฐจ ๊ด๋ฆฌ ์์คํ |
---|---|
์ฃผ์ฐจ ๊ด๋ฆฌ ๋ค์์ ์ฌ์ฉํ ์กฐ๊ฐ๋ Ultralytics YOLOv8 | ๋ค์์ ์ฌ์ฉํ ์ฃผ์ฐจ ๊ด๋ฆฌ ํ๋ฉด๋ Ultralytics YOLOv8 |
์ฃผ์ฐจ ๊ด๋ฆฌ ์์คํ ์ฝ๋ ์ํฌํ๋ก์ฐ
ํฌ์ธํธ ์ ํ
์ด์ ํฌ์ธํธ ์ ํ์ด ์ฌ์์ก์ต๋๋ค.
์ฃผ์ฐจ ์ง์ ์ ํ์ ์ฃผ์ฐจ ๊ด๋ฆฌ ์์คํ ์์ ๋งค์ฐ ์ค์ํ๊ณ ๋ณต์กํ ์์ ์ ๋๋ค. Ultralytics ์์๋ ์ฃผ์ฐจ์ฅ ๊ตฌ์ญ์ ์ ์ํ ์ ์๋ ๋๊ตฌ๋ฅผ ์ ๊ณตํ์ฌ ์ด ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ํํ๊ณ , ๋์ค์ ์ถ๊ฐ ์ฒ๋ฆฌ์ ํ์ฉํ ์ ์์ต๋๋ค.
- ์ฃผ์ฐจ์ฅ์ ๊ด๋ฆฌํ๋ ค๋ ๋น๋์ค ๋๋ ์นด๋ฉ๋ผ ์คํธ๋ฆผ์์ ํ๋ ์์ ์บก์ฒํฉ๋๋ค.
- ์ ๊ณต๋ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ทธ๋ํฝ ์ธํฐํ์ด์ค๋ฅผ ์์ํ๋ฉด ์ด๋ฏธ์ง๋ฅผ ์ ํํ๊ณ ๋ง์ฐ์ค ํด๋ฆญ์ผ๋ก ์ฃผ์ฐจ ๊ตฌ์ญ์ ์ค๊ณฝ์ ๊ทธ๋ ค ๋ค๊ฐํ์ ๋ง๋ค ์ ์์ต๋๋ค.
์ด๋ฏธ์ง ํฌ๊ธฐ
์ต๋ ์ด๋ฏธ์ง ํฌ๊ธฐ 1920 * 1080 ์ง์
์ฃผ์ฐจ ์ฌ๋กฏ ์ฃผ์๊ธฐ Ultralytics YOLOv8
- ๋ค๊ฐํ์ผ๋ก ์ฃผ์ฐจ ๊ตฌ์ญ์ ์ ์ํ ํ ๋ค์์ ํด๋ฆญํฉ๋๋ค.
save
์ ์ฌ์ฉํ์ฌ ์์ ๋๋ ํฐ๋ฆฌ์ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋ JSON ํ์ผ์ ์ ์ฅํฉ๋๋ค.
Python ์ฃผ์ฐจ ๊ด๋ฆฌ ๊ท์
YOLOv8 ์์ ๋ฅผ ์ฌ์ฉํ ์ฃผ์ฐจ ๊ด๋ฆฌ
import cv2
from ultralytics import solutions
# Path to json file, that created with above point selection app
polygon_json_path = "bounding_boxes.json"
# Video capture
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("parking management.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
# Initialize parking management object
management = solutions.ParkingManagement(model_path="yolov8n.pt")
while cap.isOpened():
ret, im0 = cap.read()
if not ret:
break
json_data = management.parking_regions_extraction(polygon_json_path)
results = management.model.track(im0, persist=True, show=False)
if results[0].boxes.id is not None:
boxes = results[0].boxes.xyxy.cpu().tolist()
clss = results[0].boxes.cls.cpu().tolist()
management.process_data(json_data, im0, boxes, clss)
management.display_frames(im0)
video_writer.write(im0)
cap.release()
video_writer.release()
cv2.destroyAllWindows()
์ ํ์ ์ธ์ ParkingManagement
์ด๋ฆ | ์ ํ | ๊ธฐ๋ณธ๊ฐ | ์ค๋ช |
---|---|---|---|
model_path |
str |
None |
YOLOv8 ๋ชจ๋ธ ๊ฒฝ๋ก์ ๋๋ค. |
txt_color |
tuple |
(0, 0, 0) |
ํ ์คํธ์ฉ RGB ์ปฌ๋ฌ ํํ์ ๋๋ค. |
bg_color |
tuple |
(255, 255, 255) |
๋ฐฐ๊ฒฝ์ฉ RGB ์ปฌ๋ฌ ํํ์ ๋๋ค. |
occupied_region_color |
tuple |
(0, 255, 0) |
์ ์ ์์ญ์ ๋ํ RGB ์ปฌ๋ฌ ํํ์ ๋๋ค. |
available_region_color |
tuple |
(0, 0, 255) |
์ฌ์ฉ ๊ฐ๋ฅํ ์ง์ญ์ ๋ํ RGB ์์ ํํ์ ๋๋ค. |
margin |
int |
10 |
ํ ์คํธ ํ์๋ฅผ ์ํ ์ฌ๋ฐฑ. |
์ธ์ model.track
์ธ์ | ์ ํ | ๊ธฐ๋ณธ๊ฐ | ์ค๋ช |
---|---|---|---|
source |
str |
None |
Specifies the source directory for images or videos. Supports file paths and URLs. |
persist |
bool |
False |
Enables persistent tracking of objects between frames, maintaining IDs across video sequences. |
tracker |
str |
botsort.yaml |
Specifies the tracking algorithm to use, e.g., bytetrack.yaml ๋๋ botsort.yaml . |
conf |
float |
0.3 |
Sets the confidence threshold for detections; lower values allow more objects to be tracked but may include false positives. |
iou |
float |
0.5 |
Sets the Intersection over Union (IoU) threshold for filtering overlapping detections. |
classes |
list |
None |
Filters results by class index. For example, classes=[0, 2, 3] only tracks the specified classes. |
verbose |
bool |
True |
Controls the display of tracking results, providing a visual output of tracked objects. |
์์ฃผ ๋ฌป๋ ์ง๋ฌธ
Ultralytics YOLOv8 ์ฃผ์ฐจ ๊ด๋ฆฌ ์์คํ ์ ์ด๋ป๊ฒ ๊ฐ์ ํ๋์?
Ultralytics YOLOv8 ๋ ์ค์๊ฐ ์ฐจ๋ ๊ฐ์ง ๋ฐ ๋ชจ๋ํฐ๋ง์ ์ ๊ณตํ์ฌ ์ฃผ์ฐจ ๊ด๋ฆฌ ์์คํ ์ ํฌ๊ฒ ํฅ์์ํต๋๋ค. ์ด๋ฅผ ํตํด ์ฃผ์ฐจ ๊ณต๊ฐ์ ์ต์ ํํ๊ณ ํผ์ก์ ์ค์ด๋ฉฐ ์ง์์ ์ธ ๊ฐ์๋ฅผ ํตํด ์์ ์ฑ์ ๊ฐ์ ํ ์ ์์ต๋๋ค. ์ฃผ์ฐจ ๊ด๋ฆฌ ์์คํ ์ ํจ์จ์ ์ธ ๊ตํต ํ๋ฆ์ ๊ฐ๋ฅํ๊ฒ ํ์ฌ ์ฃผ์ฐจ์ฅ์ ์ ํด ์๊ฐ๊ณผ ๋ฐฐ๊ธฐ๊ฐ์ค ๋ฐฐ์ถ์ ์ต์ํํจ์ผ๋ก์จ ํ๊ฒฝ ์ง์ ๊ฐ๋ฅ์ฑ์๋ ๊ธฐ์ฌํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ์ฃผ์ฐจ ๊ด๋ฆฌ ์ฝ๋ ์ํฌํ๋ก์ฐ๋ฅผ ์ฐธ์กฐํ์ธ์.
์ค๋งํธ ์ฃผ์ฐจ๋ฅผ ์ํด Ultralytics YOLOv8 ์ ์ฌ์ฉํ๋ฉด ์ด๋ค ์ด์ ์ด ์๋์?
Ultralytics YOLOv8 ์ค๋งํธ ์ฃผ์ฐจ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์ํ ์ด์ ์ ๋๋ฆด ์ ์์ต๋๋ค:
- ํจ์จ์ฑ: ์ฃผ์ฐจ ๊ณต๊ฐ ์ฌ์ฉ์ ์ต์ ํํ๊ณ ํผ์ก์ ์ค์ ๋๋ค.
- ์์ ๋ฐ ๋ณด์: ๊ฐ์๋ฅผ ๊ฐํํ๊ณ ์ฐจ๋๊ณผ ๋ณดํ์์ ์์ ์ ๋ณด์ฅํฉ๋๋ค.
- ํ๊ฒฝ ์ํฅ: ์ฐจ๋ ์ ํด ์๊ฐ์ ์ต์ํํ์ฌ ๋ฐฐ๊ธฐ๊ฐ์ค๋ฅผ ์ค์ด๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ์ด์ ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ฌ๊ธฐ์์ ํ์ธํ ์ ์์ต๋๋ค.
Ultralytics YOLOv8 ์ ์ฌ์ฉํ์ฌ ์ฃผ์ฐจ ๊ณต๊ฐ์ ์ ์ํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ๋์?
์ฃผ์ฐจ ๊ณต๊ฐ ์ ์๋ Ultralytics YOLOv8 ์ผ๋ก ๊ฐ๋จํ๊ฒ ํ ์ ์์ต๋๋ค:
- ๋์์ ๋๋ ์นด๋ฉ๋ผ ์คํธ๋ฆผ์์ ํ๋ ์์ ์บก์ฒํฉ๋๋ค.
- ์ ๊ณต๋ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ์ ํํ๊ณ ๋ค๊ฐํ์ ๊ทธ๋ ค ์ฃผ์ฐจ ๊ณต๊ฐ์ ์ ์ํ๋ GUI๋ฅผ ์คํํ์ธ์.
- ์ถ๊ฐ ์ฒ๋ฆฌ๋ฅผ ์ํด ๋ ์ด๋ธ์ด ์ง์ ๋ ๋ฐ์ดํฐ๋ฅผ JSON ํ์์ผ๋ก ์ ์ฅํฉ๋๋ค. ์์ธํ ์ง์นจ์ ํฌ์ธํธ ์ ํ ์น์ ์ ์ฐธ์กฐํ์ธ์.
ํน์ ์ฃผ์ฐจ ๊ด๋ฆฌ ์๊ตฌ ์ฌํญ์ ๋ง๊ฒ YOLOv8 ๋ชจ๋ธ์ ์ฌ์ฉ์ ์ง์ ํ ์ ์๋์?
์, Ultralytics YOLOv8 ์์ ํน์ ์ฃผ์ฐจ ๊ด๋ฆฌ ์๊ตฌ ์ฌํญ์ ๋ง๊ฒ ์ฌ์ฉ์ ์ง์ ํ ์ ์์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ ๋งค๊ฐ๋ณ์๋ฅผ ์กฐ์ ํ ์ ์์ต๋๋ค. ์ ์ ๋ฐ ์ฌ์ฉ ๊ฐ๋ฅํ ์์ญ ์์ํ
์คํธ ํ์๋ฅผ ์ํ ์ฌ๋ฐฑ ๋ฑ์ ์ค์ ํ ์ ์์ต๋๋ค. ํ
์คํธ ํ์๋ฅผ ์ํ ParkingManagement
ํด๋์ค์ ์ ํ์ ์ธ์๋ฅผ ์ฌ์ฉํ๋ฉด ํน์ ์๊ตฌ ์ฌํญ์ ๋ง๊ฒ ๋ชจ๋ธ์ ์กฐ์ ํ์ฌ ํจ์จ์ฑ๊ณผ ํจ๊ณผ๋ฅผ ๊ทน๋ํํ ์ ์์ต๋๋ค.
์ฃผ์ฐจ์ฅ ๊ด๋ฆฌ์์ Ultralytics YOLOv8 ์ ์ค์ ์ ์ฉ ์ฌ๋ก์๋ ์ด๋ค ๊ฒ์ด ์๋์?
Ultralytics YOLOv8 ๋ฅผ ๋น๋กฏํ ๋ค์ํ ์ค์ ์ฃผ์ฐจ์ฅ ๊ด๋ฆฌ ์ ํ๋ฆฌ์ผ์ด์ ์์ ํ์ฉ๋๊ณ ์์ต๋๋ค:
- ์ฃผ์ฐจ ๊ณต๊ฐ ๊ฐ์ง: ์ฌ์ฉ ๊ฐ๋ฅํ ๊ณต๊ฐ๊ณผ ์ ์ ๊ณต๊ฐ์ ์ ํํ๊ฒ ํ์ ํฉ๋๋ค.
- ๊ฐ์: ์ค์๊ฐ ๋ชจ๋ํฐ๋ง์ ํตํด ๋ณด์์ ๊ฐํํฉ๋๋ค.
- ํธ๋ํฝ ํ๋ฆ ๊ด๋ฆฌ: ํจ์จ์ ์ธ ํธ๋ํฝ ์ฒ๋ฆฌ๋ก ์ ํด ์๊ฐ ๋ฐ ํผ์ก์ ์ค์ ๋๋ค. ์ด๋ฌํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด์ฌ์ฃผ๋ ์ด๋ฏธ์ง๋ ์ค์ ์ ํ๋ฆฌ์ผ์ด์ ์์ ํ์ธํ ์ ์์ต๋๋ค.