Open sang9984 opened 8 months ago
# roboflow에서 제공하는 데이터셋 공유 url
!wget https://public.roboflow.com/ds/QXe0aiBtlV?key=zKpJrswWk3 -O Aquarium_Data.zip
import zipfile # 압축해제를 위한 zipfile 모듈 import
path = '/content/Aquarium_Data.zip' # 압축 해제 대상 파일 경로
zip_object = zipfile.ZipFile(file=path, mode = 'r') # zip파일 객체를 생성하고 읽고 모드로 열람
zip_object.extractall('./') # zip파일 압축을 해제 했을때 생성되는 모든 내용을 저장하는 위치를 설정 - 현재 디렉토리로 설정
zip_object.close # zipfile 객체를 닫는다
!cat '/content/data.yaml' # 파일의 내용을 확인하기 위한 명령어
!pip install ultralytics
import ultralytics
ultralytics.checks()
from ultralytics import YOLO
model = YOLO('yolov8n.pt') # 사전학습 되어있는 yolov8 모델을 로드한다
print(type(model.names), len(model.names)) # 미리 가져온 데이터 모델내에서 식별 가능한 대상에 대한 정보를 확인
print(model.names)
model.train(data='/content/data.yaml', epochs=100, patience=30, batch=32,imgsz=416) # YOLOv8 환경에 Aquarium 데이터 학습
print(type(model.names), len(model.names)) # 기존 모델에 새로운 데이터 모델을 학습시킨 결과에 대해 확인하기 위해 출력
print(model.names)
result = model.predict(source='/content/test/images', save = True) # 학습된 모델에 test 데이터를 삽입해 결과 예측
result2 = model("/content/test/images/IMG_2289_jpeg_jpg.rf.fe2a7a149e7b11f2313f5a7b30386e85.jpg") # 테스트 이미지 하나를 삽입해 결과 확인
YOLOv8 객체의 중심과 화면의 중심 사이의 선과 좌표 출력
import torch
from ultralytics import YOLO
import cv2
import math
# Start webcam
cap = cv2.VideoCapture(0)
cap.set(3, 640)
cap.set(4, 480)
# Load YOLO model
model = YOLO("yolo-Weights/yolov8n.pt")
# Object classes
classNames = ["person", "bicycle", "car", "motorbike", "aeroplane", "bus", "train", "truck", "boat",
"traffic light", "fire hydrant", "stop sign", "parking meter", "bench", "bird", "cat",
"dog", "horse", "sheep", "cow", "elephant", "bear", "zebra", "giraffe", "backpack", "umbrella",
"handbag", "tie", "suitcase", "frisbee", "skis", "snowboard", "sports ball", "kite", "baseball bat",
"baseball glove", "skateboard", "surfboard", "tennis racket", "bottle", "wine glass", "cup",
"fork", "knife", "spoon", "bowl", "banana", "apple", "sandwich", "orange", "broccoli",
"carrot", "hot dog", "pizza", "donut", "cake", "chair", "sofa", "pottedplant", "bed",
"diningtable", "toilet", "tvmonitor", "laptop", "mouse", "remote", "keyboard", "cell phone",
"microwave", "oven", "toaster", "sink", "refrigerator", "book", "clock", "vase", "scissors",
"teddy bear", "hair drier", "toothbrush"
]
# Define the center of the screen
center_x, center_y = 320, 240 # Assuming 640x480 resolution
while True:
success, img = cap.read()
results = model(img, stream=True)
# Draw crosshair lines
#cv2.line(img, (0, center_y), (640, center_y), (0, 0, 255), 1) # Horizontal line
#cv2.line(img, (center_x, 0), (center_x, 480), (0, 0, 255), 1) # Vertical line
# Coordinates
for r in results:
boxes = r.boxes
for box in boxes:
# Bounding box
x1, y1, x2, y2 = box.xyxy[0]
x1, y1, x2, y2 = int(x1), int(y1), int(x2), int(y2) # Convert to int values
# Put box in the center-relative coordinates
center_relative_x, center_relative_y = (x1 + x2) // 2 - center_x, center_y - (y1 + y2) // 2
# Draw box on the frame
cv2.rectangle(img, (x1, y1), (x2, y2), (255, 0, 255), 3)
# Confidence
confidence = math.ceil((box.conf[0] * 100)) / 100
print("Confidence --->", confidence)
# Class name
cls = int(box.cls[0])
print("Class name -->", classNames[cls])
# Object details
font = cv2.FONT_HERSHEY_SIMPLEX
fontScale = 1
color = (255, 0, 0)
thickness = 2
# Display object class name
text = classNames[cls]
org_text = (x1, y1 - 10) # Top-left corner with slight offset
cv2.putText(img, text, org_text, font, fontScale, color, thickness)
# Display object center coordinates
text = f"({center_relative_x}, {center_relative_y})"
org_coord = (x2, y2 + 10) # Bottom-right corner with slight offset
cv2.putText(img, text, org_coord, font, fontScale, color, thickness)
# Draw line from object center to the screen center
cv2.line(img, (center_x, center_y), ((x1 + x2) // 2, (y1 + y2) // 2), (0, 255, 0), 2)
cv2.imshow('Webcam', img)
if cv2.waitKey(1) == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
Yolov8 기본 모듈 웹캠 연결 및 실행 테스트
MacOS 기준 카메라 인덱스