import torch
import cv2
model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True)
img = cv2.imread('Untitled.jpeg')
results = model(img)
results.save()
print(img.shape[:2])
result = results.pandas().xyxy[0].to_numpy()
result = [item for item in result if item[6]=='person']
tmp_img1 = cv2.imread('Untitled.jpeg')
tmp_img2 = cv2.imread('Untitled.jpeg')
for i in range(len(result)):
cv2.rectangle(tmp_img1, (int(results.xyxy[0][i][0].item()), int(results.xyxy[0][i][1].item())), (int(results.xyxy[0][i][2].item()), int(results.xyxy[0][i][3].item())), (255,255,255))
cropped = tmp_img2[int(result[i][1]):int(result[i][3]), int(result[i][0]):int(result[i][2])]
cv2.imwrite(f'people{i+1}.png', cropped)
cv2.imwrite('resul1.png', tmp_img1)
img = cv2.imread('Untitled.jpeg')
results = model(img)
results.save()
print(img.shape[:2])
shape 를 사용하면 3개의 데이터가 나오는데 (가로px, 세로px, color 데이터) 로 나온다. 필요한 데이터는 가로, 세로 px 사이즈가 필요하므로 0,1 번의 데이터를 불러온다.
result = results.pandas().xyxy[0].to_numpy()
result = [item for item in result if item[6]=='person']
tmp_img1 = cv2.imread('Untitled.jpeg')
for i in range(len(result)):
cv2.rectangle(tmp_img1, (int(results.xyxy[0][i][0].item()), int(results.xyxy[0][i][1].item())), (int(results.xyxy[0][i][2].item()), int(results.xyxy[0][i][3].item())), (255,255,255))
cv2.imwrite('resul1.png', tmp_img1)
i 번째에 값의 길이를 확인하고 길이 만큼 i 를 실행 시킨다. rectangle은 사각형을 그리는 x min, y min, x max, y max 좌표를 입력해입력한 좌표대로 사각형을 그린다. 이후 5번째 값은 색상을 표시한다 색상은 B G R 순서로 색상을 나타낸다.
tmp_img2 = cv2.imread('Untitled.jpeg')
for i in range(len(result)):
cropped = tmp_img2[int(result[i][1]):int(result[i][3]), int(result[i][0]):int(result[i][2])]
cv2.imwrite(f'people{i+1}.png', cropped)
cropped 이라는 변수에 사진을 4개의 좌표를 기준으로 입력해주고, imwrite
의 메소드를 사용하여 파일을 저장하는데 처음 입력은 이미지의 이름을 정하고, 이후는 저장 내용을 나타낸다.