이미지 내에서 객체 (사물, 사람등)를 감지해 내는 것
차령을 차주변에 파악할 수 있다, laser sensor
비슷한 객체 가져오기 -> 한번도 모아 > 한번도 모아-> 객체 줄어들다
장점: 성능 많습니다 - 높은 성능
단점: 속도가 느리다 10~15 fps (동영상이 보통 30fps) > 실시간 탐지 불가능
-> 경로 다운로드
test label 의미:
!curl -L "https://app.roboflow.com/ds/At1kvgVH5l?key=QfDSImtcCA" > roboflow.zip; unzip roboflow.zip; rm roboflow.zip
# mkdir (make directory)
%mkdir dataset
# mv(move)
%mv ./README.dataset.txt ./README.roboflow.txt ./data.yaml train test valid /content/dataset
하난의 변수에 사용한 파일 모아주기
이미지 파일의 결로 모은 에모장파일 만들기
train.txt, val.txt
파일 경로 불러오기
from glob import glob
train_img_list = glob('/content/dataset/train/images/*.jpg')
train_img_list
val_img_list = glob('/content/dataset/valid/images/*.jpg')
with open('/content/dataset/train.txt','w') as f:
f.write('\n'.join(train_img_list)+ '\n') # 하나입력enter
with open('/content/dataset/val.txt','w') as f:
f.write('\n'.join(val_img_list)+ '\n') # 하나입력enter
!git clone https://github.com/ultralytics/yolov5
%pwd
%cd yolov5
!pip install -r requirements.txt
!python train.py --img 640 --batch 16 --epochs 50 --data /content/dataset/data.yaml --name cat_dog_yolov5s_results
YOLO 환경설정
#파이썬 3.8버전으로 yolov5이름의 환경 만들기
conda create -n yolov5 python==3.8
#yolov5 환경 접속하기
activate yolov5
#yolov5를 다운로드 받기위해서 git 설치
pip install git-python
conda install git
#github에서 yolov5관련 파일 다운로드 받기
git clone https://github.com/ultralytics/yolov5
#yolov5실행하기위한 라이브러리 설치
cd yolov5
pip install -r requirements.txt
#jupyter notebook 실행파일 설치
pip install jupyter
import torch # yolo 사용하는 라이브러리
import numpy as np
import cv2 # 이미지 다루는 라이브러리
import pathlib
temp = pathlib.PosixPath
pathlib.PosixPath = pathlib.WindowsPath
# 모델 불러오기
model = torch.hub.load('ultralytics/yolov5', 'custom', path='./data/best.pt' , force_reload=True)
dog = cv2.imread('./data/dog.1500.jpg')
cv2.imshow('dog',dog)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 이미지 불러오기
cat = cv2.imread('./data/KakaoTalk_20240112_122826900.jpg')
# 객체 검출하기
result = model(cat)
# ctrl +shift + '-' -> 커서 기준으로 샐 분할
result
# 객체 검출했으면 이미지에 표시하기
cv2.rectangle(dog, (x1,y1) , (x2,y2) , (0,0,255), 2)
# 이미지 뛰우기
cv2.imshow('cat',cat)
cv2.waitKey(0)
cv2.destroyAllWindows()
dog = cv2.imread('./data/KakaoTalk_20240112_122826900_03.jpg')
# 객체 검출하기
result = model(dog)
detect = result.xyxyn[0].numpy()
# 크기
x = dog.shape[1]
y = dog.shape[0]
# 계산
x1 = int(detect[0,0]*x)
y1 = int(detect[0,1]*y)
x2 = int(detect[0,2]*x)
y2 = int(detect[0,3]*y)
cv2.rectangle(dog, (x1,y1) , (x2,y2) , (0,0,255), 2)
# 이미지 뛰우기
cv2.imshow('dog',dog)
cv2.waitKey(0)
cv2.destroyAllWindows()
dog = cv2.imread('./data/3 dog.png')
# 객체 검출하기
result = model(dog)
detect = result.xyxyn[0].numpy()
# 크기
x = dog.shape[1]
y = dog.shape[0]
# 여러 마리 검출했을 경우
for i in range (len(detect)):
# 계산
x1 = int(detect[i,0]*x)
y1 = int(detect[i,1]*y)
x2 = int(detect[i,2]*x)
y2 = int(detect[i,3]*y)
cv2.rectangle(dog, (x1,y1) , (x2,y2) , (0,0,255), 2)
# 이미지 뛰우기
cv2.imshow('dog',dog)
cv2.waitKey(0)
cv2.destroyAllWindows()
import cv2
# 모델 불러오기
torch.hub.load('ultralytics/yolov5', 'custom', path='./data/best.pt' , force_reload=True)
# 동영상 연결하기
video_path ='./data/cat_video.mp4'
# 비디오 연결한 코드
video = cv2.VideoCapture(video_path)
# 초당 30장의 사진을 가져온다 > 한장씩 사용
while video.isOpened():
ret, img = video.read() #이미지 한장 가져오기
# ret = 성공여부, img = 이미지 값
if not ret:
break
result = model(img)
detect = result.xyxyn[0].numpy()
# 크기
x = img.shape[1]
y = img.shape[0]
# 여러 마리 검출했을 경우
for i in range (len(detect)):
# 계산
x1 = int(detect[i,0]*x)
y1 = int(detect[i,1]*y)
x2 = int(detect[i,2]*x)
y2 = int(detect[i,3]*y)
cv2.rectangle(img, (x1,y1) , (x2,y2) , (0,0,255), 2)
cv2.imshow('video', img)
# 동영상 종료기능 (!)
k = cv2.waitKey(1)
if k == 49:
break
videos. realeased()
# 원두우에 뛰운창 종료
cv2.destroyAllWindows ()