https://ultralytics.com/yolov8
๊ทธ๋ฅ ์ด๋ฏธ์ง ๊ฐ๋จํ๊ฒ ํ์ธํ์ฌ ๊ฒ์ถ๋ ๋ด์ฉ์ ํ์ธํ๊ณ ์ถ์๋ค.
ํ์ง๋ง ์ฐพ์๋ณด๋๊น ์น์บ ์์๋ง ์ฌ์ฉํ๋๊ฑธ ๋ง์ด ํฌ์คํ ํ๊ณ ์์ด์ ์ฐพ๊ธฐ ์ด๋ ค์ ๋ค.
๊ทธ๋์ ๊ฐ๋จํ๊ฒ ์ด๋ฏธ์ง ํ์ฅ ํ์ธํ๋๊ฑธ ํฌ์คํ ํ๊ฒ ๋์๋ค.
!pip install ultralytics
!pip install opencv-python
!pip install supervision
๋จผ์ yolo v8์ ์ฌ์ฉํ๊ธฐ ์ํด ultralytics๋ฅผ install ํ๋ค.
yolo v8์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ python 3.10 ๋ฒ์ ์ด์์ ์ฌ์ฉํด์ผ ์ข๋ค๊ณ ํ๋ค.
python 3.8 ๋ฒ์ ์ ์ฌ์ฉ์ค์ด์๋๋ฐ, ์ค๋ฅ๊ฐ ๋ฐ์ํ์ฌ ์์๋ณด๊ณ ๋ฒ์ ์ ๊ทธ๋ ์ด๋๋ฅผ ํด์ฃผ์๋ค.
import cv2
from ultralytics import YOLO
model = YOLO('yolov8n.pt')
# yolo v8n ๊ฐ์ค์น๋ฅผ ์ฌ์ฉํ๋ค.
# git ์ฝ๋๋ฅผ ๋ถ์ํด๋ณด๋ YOLO๋ผ๋ ํจ์์์์ yolov8n.pt๊ฐ default์ด๊ณ ,
# string์ผ๋ก ๋๊ฒจ์ค ๋ชจ๋ธ์ด ์์ผ๋ฉด git์์ downloadํ์ฌ ์ฌ์ฉํ๋ค.
# ์๋ชป๋ ๊ธ์๋ผ๋ฉด ์๋ฌ๊ฐ ์ถ๋ ฅ๋จ
cap = cv2.VideoCapture(0)
# cv2์์ ์น์บ ์ ์ฌ์ฉํ๊ฒ ๋ค.
while cap.isOpened():
success, frame = cap.read()
# cv2์์ ์น์บ ์ readํ๋ค.
# cap.read()ํจ์๋ ํํ๋ก 2๊ฐ์ ์ธ์๋ฅผ ๋ฆฌํดํ๋๋ฐ,
# ์ฒซ๋ฒ์งธ ์ธ์๋ frame์ ๊ฐ์ ธ์๋์ง์ bool ๋ณ์ (true, false)์ด๊ณ
# ๋๋ฒ์งธ ์ธ์๋ ์น์บ ํ๋ ์ 1์ฅ์ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ง๊ณ ์จ๋ค.
if success:
results= model(frame)
# frame์ด๋ฏธ์ง๋ฅผ ๋ชจ๋ธ์ ๋ฃ์ด ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ง๊ณ ์จ๋ค.
# ๋ฆฌํดํ๋๊ฐ์ ๋ฆฌ์คํธ์ด๋ค.
annotated_frame = results[0].plot()
# ์ด๋ถ๋ถ์ ์๋ชจ๋ฅด๊ฒ ๋๋ฐ results[0]์ ํ์
์ ultralytics.yolo.engine.results.Results ์ด๋ค.
# ์ด๊ฑธ plot()ํ๊ฒ ๋๋ฉด numpy ์ด๋ ์ด ์ขํ๊ฐ ๋์จ๋ค.
# ์ด ์ขํ๊ฐ๋ค์ ๊ฒ์ถ๋ ๋ฐ์ค๋ฅผ ๊ทธ๋ ค์ฃผ๋ ์ขํ๋ค.
cv2.imshow("YOLOv8 Inference", annotated_frame)
# ์ด ์ขํ๊ฐ๋ค์ด ํ์๋๊ฑธ inshow์ ๋ฃ์ผ๋ฉด ๋ฐ์ค๊ฐ ๊ทธ๋ ค์ ธ์ ์ถ๋ ฅ๋๋ค.
if cv2.waitKey(1)&0xFF == ord("q"): # ํค๊ฐ์ด ๋ค์ด์๋๋ฐ q๋ผ๋ฉด ๊บผ์ง๋ค.
break
else:
print("error")
break
cap.release() # ์์บ ์ ๋๋ค.
cv2.destroyAllWindows() # cv2๋ก ์ด์ด์ง ๋ชจ๋ ์ฐฝ์ ์ข
๋ฃ์ํจ๋ค.
์ ์ฝ๋๋ ์น์บ ์ ์ฌ์ฉํ ๋ ์ฌ์ฉํ๋ฉด ๋๋ค.
์ฃผ์์ ๋ด๊ฐ ์์๋ก ์์ฑํ๊ธฐ ๋๋ฌธ์ ์๋ด๋ ๋๋ค.
๋๋ ๊ฒ์ถ๊ฒฐ๊ณผ๋ฅผ ๋ณ์์ ๋ฃ๊ณ ์ถ์๋๋ฐ ๋ณ์์ ๋ฃ์ด๋ ๊ฐ์ด ์๋ฃ์ด์ก๋ค.
์์๋ณด๋๊น ๊ฐ์ด ์๋ด๊ฒจ์ ธ ์จ๋ค๋๊ฒ์ด๋ค.
๊ทธ๋์ stackoverflow์์ ์ด์ฌํ ๊ฒ์ํ๊ณ , git์ ์ฐพ์๋ณด๊ณ ๋ฐฉ๋ฒ์ ์ฐพ์๋ค.
import cv2
import supervision as sv
from ultralytics import YOLO
model = YOLO('yolov8n.pt')
result = model.predict(cv2.imread('temp.jpg'))[0]
detections = sv.Detections.from_yolov8(result)
labels = [[f"{model.model.names[class_id]}", confidence] for _, _, confidence, class_id, _ in detections]
labels
'''
0: 640x480 5 persons, 1 tv, 140.1ms
Speed: 5.0ms preprocess, 140.1ms inference, 10.9ms postprocess per image at shape (1, 3, 640, 480)
[['tv', 0.9154752],
['person', 0.860976],
['person', 0.84003013],
['person', 0.75352204],
['person', 0.40899122],
['person', 0.3967925]]
'''
supervision ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ yolov8์ ๊ฒฐ๊ณผ๊ฐ์ ๋ฆฌ์คํธ์ ๋ด์์ค๋ค.
๋ด๊ฐ ํ์ํ๊ฐ์ ์ ํ๋์ ํด๋์ค์์ด๋์ด๋ฏ๋ก 2๊ฐ๋ง ๋ฐ์์ labels ๋ณ์์ ๋ฃ์ด์ฃผ์๋ค.
์ด๋ ๊ฒ ํ๋ฉด ์ฃผ์์ฒ๋ผ ๊ฐ์ด ๋ฐ์์ง๋ค.
์ง๊ธ ๋น์ฅ์ ์ฌ๋๋ง ๊ฒ์ถํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ์ปค์คํ ํ์ต์ ํ์์์ด์ ์งํํ์ง ์์๋ค.
์กฐ๋ง๊ฐ ์ปค์คํ ํ์ต๋ ์งํํ ๊ณํ์ด๋ค.
'๐ผ๐ > ๐พ๐ค๐๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ก์ปฌ์์ BERT๋ชจ๋ธ ๋๋ ค์ ํ์ตํ๊ธฐ (1) | 2023.02.15 |
---|---|
์ธ๊ณต์ง๋ฅ koBERT ๋ชจ๋ธ ํ์ต (3) | 2023.02.11 |
๋๊ธ