sang9984 / LeetCode-Algo

0 stars 0 forks source link

CNN 학습 테스트 #1

Open sang9984 opened 8 months ago

sang9984 commented 8 months ago

Yolov8 기본 모듈 웹캠 연결 및 실행 테스트

MacOS 기준 카메라 인덱스

import cv2
from ultralytics import YOLO

# Load the YOLOv8 model
model = YOLO('yolov8n.pt')

# Open the video file
cap = cv2.VideoCapture(0)

# Loop through the video frames
while cap.isOpened():
    # Read a frame from the video
    success, frame = cap.read()

    if success:
        # Run YOLOv8 tracking on the frame, persisting tracks between frames
        results = model.track(frame, persist=True)

        # Visualize the results on the frame
        annotated_frame = results[0].plot()

        # Display the annotated frame
        cv2.imshow("YOLOv8 Tracking", annotated_frame)

        # Break the loop if 'q' is pressed
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break
    else:
        # Break the loop if the end of the video is reached
        break

# Release the video capture object and close the display window
cap.release()
cv2.destroyAllWindows()

Image Image Image

sang9984 commented 8 months ago

YOLOv8 학습 환경에 Aquarium 데이터 학습 후 예측 결과 확인

# 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") # 테스트 이미지 하나를 삽입해 결과 확인
abcd001203 commented 8 months ago

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()

Image