File size: 1,756 Bytes
4e38f98 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
import torch
from PIL import Image
import cv2
import numpy as np
import matplotlib.pyplot as plt
import torchvision.transforms as T
def inference_and_save(model, input_image_path, output_image_path, threshold=0.3):
# 이미지 로드 및 전처리
img = Image.open(input_image_path).convert("RGB")
img_tensor = T.ToTensor()(img).unsqueeze(0) # 이미지 텐서로 변환 및 배치 차원 추가
# 모델 추론
with torch.no_grad():
predictions = model(img_tensor.to(torch.device('cpu'))) # CPU로 모델 실행
# 이미지 변환 및 그리기
img_np = np.array(img) # PIL 이미지를 numpy 배열로 변환
img_np = cv2.cvtColor(img_np, cv2.COLOR_RGB2BGR) # OpenCV 형식으로 변환
for i, box in enumerate(predictions[0]['boxes']):
score = predictions[0]['scores'][i].item()
if score > threshold: # 신뢰도 점수가 임계값 이상인 경우만 표시
x1, y1, x2, y2 = map(int, box)
label = predictions[0]['labels'][i].item()
cv2.rectangle(img_np, (x1, y1), (x2, y2), (0, 255, 0), 2)
cv2.putText(img_np, f'Label: {label} Score: {score:.2f}', (x1, y1 - 10),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
# 결과 이미지 저장
cv2.imwrite(output_image_path, img_np)
print(f'Result saved at {output_image_path}')
# 사용 예시
input_image_path = 'test_video.mp4' # 입력 이미지 경로
output_image_path = 'r.mp4' # 출력 이미지 저장 경로
# 모델 로드
model_path = '15road_best_model.pt'
model = torch.load(model_path, map_location=torch.device('cpu'))
model.eval()
# 추론 및 저장
inference_and_save(model, input_image_path, output_image_path, threshold=0.3)
|