새로운 폴더를 만들어서
가상환경을 만든 다음에 패키지를 설치한다
pip install -qr https://raw.githubusercontent.com/ultralytics/yolov5/master/requirements.txt
.py파일을 하나 만들어서 아래와 같이 입력한다
import torch
import cv2
model = torch.hub.load('ultralytics/yolov5','yolov5s',pretrained=True)
# yolov5는 사물인식에 쓰이는 도구인듯하다
imgs = ['https://ultralytics.com/images/zidane.jpg']
# 서버에서 이미지를 가져올 때 어레이에 담아줘야한다
results = model(imgs)
# 모델에 분석하고자하는 이미지를 담아서
results.save()
# 저장
실행시키면 욜로가 다운로드가 되고
Downloading https://github.com/ultralytics/yolov5/releases/download/v6.2/
100%|███████████████████████████████████████████| 14.1M/14.1M
Fusing layers...
YOLOv5s summary: 213 layers, 7225885 parameters, 0 gradients
Adding AutoShape...
Saved 1 image to runs\detect\exp
runs/detect 아래 exp라는 새로운 폴더가 생긴다. 열어보면 아래와 같은 이미지 파일이 나온다
(실행 횟수에 따라서 exp는 여러개 만들어진다)
import torch
import cv2
model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True)
imgs = ['https://ultralytics.com/images/zidane.jpg'] # batch of images
results = model(imgs)
print(results.xyxy[0], results.xyxy[0][0][0].item()) # img1 predictions (tensor)
print(results.pandas().xyxy[0]) # img1 predictions (pandas)
tmp_img = cv2.imread('zidane.jpg')
# 이미지를 읽어서 tmp_img에 담는다
cv2.rectangle(tmp_img, (int(results.xyxy[0][0][0].item()), int(results.xyxy[0][0][1].item())),
(int(results.xyxy[0][0][2].item()), int(results.xyxy[0][0][3].item())),
(255,255,255))
# xmin, ymin
# xmax, ymax
# 위의 두개의 좌표로 이미지에 사각형을 그린다
cv2.imwrite('result.png', tmp_img)
# tmp_img를 result.png파일로 저장한다
위가 텐서플로 아래가 판다스로 정리된 자료
텐서플로 출력 결과를 보면 뒷부분의 results.xyxy[0][0][0].item() 부분은 item()을 붙여야 숫자로 출력된다
results.xyxy[0]의 [0]의 [0]이니까 출력된 부분의 가장 첫번째 값이 나온다 뒷부분 값은 +02(=10^2)니까 100 곱해져서 나옴 뿅
판다스에서 name칼럼이 하나 더 나온 건 그냥 라벨 값과 매칭시켜준 것 각 라벨은 특정 사물들로 학습된 값이다
import torch
import cv2
model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True)
img = cv2.imread('zidane.jpg')
# 같은 폴더 안에 있는 이미지 파일을 읽어옴
results = model(img)
results.save()
result = results.pandas().xyxy[0].to_numpy()
# 넘파이 배열로 바꿔준다
result = [item for item in result if item[6]=='person']
tmp_img = cv2.imread('zidane.jpg')
print(tmp_img.shape)
cropped = tmp_img[int(result[0][1]):int(result[0][3]), # ymin:ymax
int(result[0][0]):int(result[0][2]) # xmin:xmax
]
print(cropped.shape)
cv2.imwrite('result2.png', cropped)
cv2.rectangle(tmp_img, (int(results.xyxy[0][0][0].item()), int(results.xyxy[0][0][1].item())),
(int(results.xyxy[0][0][2].item()), int(results.xyxy[0][0][3].item())),
(255,255,255))
cv2.imwrite('result.png', tmp_img)
[array([743.7372436523438, 45.19775390625, 1149.868408203125, 720.0, 0.8572449088096619, 0, 'person'], dtype=object), array([120.3214111328125, 197.51776123046875, 853.2149658203125, 718.7362670898438, 0.620564341545105, 0, 'person'], dtype=object)]
➜ 넘파이 배열 형태 item[6]는 7번째 칼럼
➜ shape을 출력함 ➜ 각각 (가로, 세로, 컬러)라는 뜻
➜ result2.png로 저장된 cropped
➜ result.png