머신러닝 쪽지시험 정리

준표장·2022년 10월 13일
0

실전 머신러닝

목록 보기
4/4
post-thumbnail

문제 내용

  1. 위 이미지를 다운받아 저장하세요
  2. opencv 로 이미지를 읽고 이미지의 가로, 세로가 각 몇 pixel 인지 구하세요
    1. (세로, 가로)
  3. 이미지에서 사람을 찾아 하얀색으로 네모를 그려서 result1.png 로 저장하세요
  4. 이미지에서 사람들을 잘라 people1.png, people2.png… 로 저장하세요
  5. 코드와 이미지를 git에 업로드하고 해당 repository를 공유해주세요

전체 코드

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 의 메소드를 사용하여 파일을 저장하는데 처음 입력은 이미지의 이름을 정하고, 이후는 저장 내용을 나타낸다.

profile
개발일지용 메모장

0개의 댓글