본문 바로가기
프로젝트 기록/딥러닝 모델 개발_공학설계캡스톤디자인(스마트카ICT)

[YOLOv5] 좌표 구하고, 관심 영역 설정하고, 해당 영역 yolov5 탐지

by 소요이 2023. 5. 15.
728x90

한번에 여러개를 감지할려면, 각각 학습시킨 다음 병렬로 처리해서?

 

우리도 정상상태를 학습시키고 \, 튕너ㅏ올수있는것들을 각각 학습시켜서 뭔지 판별한다?
정상상태 자체를 학습시키고, 뭐가 창밖으로 튀어나왔

 

1. 이미지에서 관심영역 설정할 좌표를 찾기

ver1.(x,y)형식, 초록 점 화면에 찍힘

 

<이미지 좌표 찾는 코드>

아래 코드 실행시키고, 이미지 찍으면 콘솔 결과창에 좌표가 표시됨

import cv2

ref_points = []

def click_event(event, x, y, flags, param):
    if event == cv2.EVENT_LBUTTONDOWN:
        ref_points.append((x, y))
        print(f"좌표: ({x}, {y})")
        cv2.circle(image, (x, y), 5, (0, 255, 0), -1)
        cv2.imshow("Image", image)

image = cv2.imread('input_image.jpg')
cv2.imshow("Image", image)
cv2.setMouseCallback("Image", click_event)

cv2.waitKey(0)
cv2.destroyAllWindows()

 

 

 

 

 

ver2. [[x,y], [x1,y1]] 형식으로 출력

 

"""video_frame_capture.py"""

import cv2

# 비디오 읽기
cap = cv2.VideoCapture('final_test.mp4')

# 캡쳐할 프레임 번호
frame_number = 50  # 원하는 프레임 번호로 변경

# 프레임 번호로 이동
cap.set(cv2.CAP_PROP_POS_FRAMES, frame_number)

# 해당 프레임 읽기
ret, frame = cap.read()

# 좌표를 저장할 리스트
coords = []

# 마우스 콜백 함수 정의
def get_coordinates(event, x, y, flags, param):
    if event == cv2.EVENT_LBUTTONDOWN:
        print('Point Selected: ', x, y)
        coords.append([x, y])  # 출력 형식 지정


# 윈도우 이름 설정 및 마우스 콜백 함수 등록
cv2.namedWindow("image")
cv2.setMouseCallback("image", get_coordinates)

# 이미지 표시
cv2.imshow("image", frame)
cv2.waitKey(0)

# 모든 좌표 출력
print("All selected coordinates: ", coords)

cap.release()
cv2.destroyAllWindows()

 

 

 

 

2. 관심영역 설정

 

<구한 좌표로 관심영역 설정하는 코드>

 

import cv2
import numpy as np

image = cv2.imread('frame_1.jpg')

points= np.array([[357,34] ,[574,78], [769, 132], [920, 188], [1022, 291], [1080, 377], [1110, 438], [1051,492], [936, 543], [802, 594], [685, 642], [550, 702], [507, 532], [428, 266]], dtype=np.int32)
"""
#바깥쪽이 까매지는 코드
mask = np.zeros_like(image, dtype=np.uint8) * 255
cv2.fillPoly(mask, [points], (255, 255, 255))
"""

#창문 안쪽이 까매지는 코드
mask = np.ones_like(image, dtype=np.uint8) * 255
cv2.fillPoly(mask, [points], (0, 0, 0))

roi = cv2.bitwise_and(image, mask)

gray_roi = cv2.cvtColor(roi, cv2.COLOR_BGR2GRAY)

cv2.imshow("ROI", roi)
cv2.waitKey(0)
cv2.destroyAllWindows()
 

결과 1