커스텀 데이터셋 학습을 완료하고 best.pt를 구하였습니다. 그 후 yolo v5에 넣어서 python detect.py --weight best.pt --conf 0.5 --img 416 --source 0
으로 하여서 실시간 객체인식을 시켰습니다. 저는 이제 여기서 아두이노와 연결하여 객체 head가 인식되면 빨간색 Led와 능동 부저가 작동하고, 객체 helmet이 인식되면 빨간색 Led와 능동부저는 멈추고 초록색 Led가 작동 하게끔 코딩을 하는 도중
import serial
import time
import cv2
from models.experimental import attempt_load
from utils.general import non_max_suppression
from utils.general import scale_segments
시리얼 포트 설정 (아두이노와 연결된 포트로 변경)
ser = serial.Serial('COM3', 9600, timeout=1)
time.sleep(2) # 시리얼 통신 안정화 대기
YOLO v5 모델 로드
import torch
가중치 경로 설정
weights = 'best.pt' # 모델 경로
모델 로드
model = attempt_load(weights) # load model
CPU로 모델 이동
device = torch.device('cpu')
model.to(device)
객체 인식 함수
import numpy as np
import cv2
def detect(image):
try:
img = image[:, :, ::-1].transpose(2, 0, 1) # BGR to RGB, to 3x416x416
except Exception as e:
print(f"Error processing image: {e}")
return None
img = np.ascontiguousarray(img)
img = torch.from_numpy(img).to(device)
img = img.float() / 255.0 # 0 - 255 to 0.0 - 1.0
if img.ndimension() == 3:
img = img.unsqueeze(0)
pred = model(img, augment=False)[0]
pred = non_max_suppression(pred, 0.5, 0.45, classes=None, agnostic=False)
for det in pred:
if len(det):
det[:, :4] = scale_segments(img.shape[2:], det[:, :4], image.shape).round()
for *xyxy, conf, cls in det:
label = model.names[int(cls)]
return label
return None
실시간 객체 인식 및 시리얼 통신
cap = cv2.VideoCapture(0)
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
label = detect(frame)
if label:
if label == 'head':
ser.write(b'head\n')
elif label == 'helmet':
ser.write(b'helmet\n')
cv2.imshow('YOLO v5', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
ser.close()
이렇게 코딩을 하여 run을 시키니 웹캠만 켜지고 객체 인식과 박스,라벨 이름등은 뜨지도 않네요 ㅠㅜ